本篇将重点关注 Sentienl 实时数据收集,即 Sentienl 具体是如何收集调用信息,以此来判断是否需要触发限流或熔断。
Sentienl 实时数据收集的入口类为 StatisticSlot。
我们先简单来看一下 StatisticSlot 该类的注释,来看一下该类的整体定位。
StatisticSlot,专用于实时统计的 slot。在进入一个资源时,在执行 Sentienl 的处理链条中会进入到该 slot 中,需要完成如下计算任务:
- 集群维度计算资源的总统计信息,用于集群限流,后续文章将详细探讨。
- 来自不同调用方/来源的群集节点的统计信息。
- 特定调用上下文环境的统计信息。
- 统计所有入口的统计信息。
接下来用源码分析的手段来详细分析 StatisticSlot 的实现原理。
1、源码分析 StatisticSlot
1.1 StatisticSlot entry 详解
StatisticSlot#entry
![321ff6b95b60da0c213762ddaca0e60c.png](https://img-blog.csdnimg.cn/img_convert/321ff6b95b60da0c213762ddaca0e60c.png)
StatisticSlot#entry
![0c7de8b1a8e79e2c5b3eecabed0e302e.png](https://img-blog.csdnimg.cn/img_convert/0c7de8b1a8e79e2c5b3eecabed0e302e.png)
StatisticSlot#entry
![9e3728a397efea8141e828f36ac426fb.png](https://img-blog.csdnimg.cn/img_convert/9e3728a397efea8141e828f36ac426fb.png)
StatisticSlot#entry
代码@1:首先调用 fireEntry,先调用 Sentinel Slot Chain 中其他的处理器,执行完其他处理器的逻辑,例如 FlowSlot、DegradeSlot,因为 StatisticSlot 的职责是收集统计信息。
代码@2:如果后续处理器成功执行,则将正在执行线程数统计指标加一,并将通过的请求数量指标增加对应的值。下文会对 Sentinel Node 体系进行详细的介绍,在 Sentinel 中使用 Node 来表示调用链中的某一个节点,每个节点关联一个资源,资源的实时统计信息就存储在 Node 中,故该部分也是调用 DefaultNode 的相关方法来改变线程数等,将在下文会向详细介绍。
代码@3:如果上下文环境中保存了调用的源头(调用方)的节点信