系统自适应限流检测具体由 SystemRuleManager 的 checkSystem 方法实现,接下来详细剖析其实现细节。
Step1:验证相关资源,主要包含三层验证:
-
如果资源名称为空,则直接跳过,这个是容错机制。
-
如果系统自适应开关为打开,直接放行,该开关初始化时为 false,在加载到一条系统自适应配置规则时该状态会设置为 true,具体在 loadSystemConf 中。
-
如果资源的类型不是入口流量(EntryType.IN),则直接放行。
Step2:从QPS为维度验证是否需要被限流,其实现关键点如下:
- 当前的qps,如果 ENTRY_NODE 为空则返回0,否则返回该统计节点的成功 qps,那 ENTRY_NODE 统计节点是“何许人也”,原来是 Sentinel 特定定义了一个资源,其名称为__total_inbound_traffic__,用来采集所有入口调用的信息,当资源进入类型为 ENTRY_TYPE_IN 时,会自动采集信息,其具体统计信息在 StatisticSlot 的 entry 方法中被调用,其截图如下: