Spring Cloud Alibaba Sentinel 源码分析 滑动窗口数据统计解析
阅读更多整体流程图
源码分析
那我们就按照这个流程图来从头分析
Spring Cloud Alibaba Sentinel 源码分析-滑动时间窗口算法原理
“滑动时间窗口算法” 是Sentinel源码中的一个非常重要的算法。
那么在了解滑动时间窗算法之前,我们先要来了解时间窗算法,也可以称之为:固定时间窗算法
概念:固定时间窗口计数器算法思想:在固定的时间窗口内,可以允许固定数量的请求进入。超过数量就拒绝或者排队,等下一个时间段进入。
Spring Cloud Alibaba Sentinel DegradeSlot 源码解析
DegradeSlot是熔断降级的Slot,那我们直接来看核心方法
1 | //DegradeSlot.entry |
Spring Cloud Alibaba Sentinel StatisticSlot 源码解析
StatisticSlot 是 Sentinel 最为重要的类之一,用于根据规则判断结果进行相应的统计操作。
entry 的时候:依次执行后面的判断 slot。每个 slot 触发流控的话会抛出异常(BlockException的子类)。若有 BlockException抛出,则记录 block 数据;若无异常抛出则算作可通过(pass),记录 pass 数据。
exit 的时候:若无 error(无论是业务异常还是流控异常),记录 complete(success)以及 RT,线程数-1。
Spring Cloud Alibaba Sentinel FlowSlot 源码解析
1 | // 获取到指定资源的所有流控规则 |
Spring Cloud Alibaba Sentinel 源码解析 SlotChain 入口解析
我们从这里继续分析,这个位置的chain.entry方法,但是此时这个chain是谁?
1 | //CtSph中 |
Spring Cloud Alibaba Sentinel 源码解析 ClusterBuilderSlot 解析
ClusterBuilderSlot:则用于存储资源的统计信息以及调用者信息,例如该资源的 RT, QPS, thread count 等等,这些信息将用作为多维度限流,降级的依据;
1 | //NodeSelectorSlot.entry() |
Spring Cloud Alibaba Sentinel 源码解析 源码入口
在微服务的使用Sentinel实际工作场景中,我们只需要引入对应依赖:spring-cloud-starter-alibaba-sentinel,就会进行自动装配,所以我们之间看META-INF/spring.factories,然后我们这里从SentinelAutoConfiguration开始看起
Spring Cloud Alibaba Sentinel 源码解析 构建 Context
我们继续分析当前这个类型中的InternalContextUtil.internalEnter(Constants.CONTEXT_DEFAULT_NAME);方法
1 | /** |