1.源码解读分为三部分,初始化和运行过程以及扩展点
1.1 sentinel自身初始化
初始化为sentinel在springboot启动时候,做了什么? 在引入依赖后,对spring boot产生了什么副作用
我们看看依赖中包含什么?

image-20240709114212024
有很多,可以看到经典的几个部分,我们先看看本体spring-cloud-starter-alibaba-sentinel中的内容,一般看三个部分,一是自动配置类,二是SPI接口,再是springboot中的扩展点spring.factories
我们先看看有什么

image-20240709114953153
可以看到只是导入了自动配置类,看看里面导入了什么配置类
第一第二个是对springweb框架的适配,第三个是sentinel提供对外的访问端口,第三个是初始化和定制sentinel,第五个是对feign的支持,我们一个一个看,首先看sentinel自身的初始化
1.2 sentinel自身的初始化,属性初始化,数据源初始化,切面初始化,restTemplate初始化,这部分适配了spring项目,在没有使用mvc的情况下
1.3 对springMVC的适配初始化
2 运行过程
2.1 springMVC拦截器运行逻辑
拦截器一般有两个方法,一个是请求前的方法,一个是请求后的方法,我们先看请求前的方法
2.2 进入chain.entry(context, resourceWrapper, null, count, prioritized, args)看看实际的运行过程
我们先看看slot接口,方面理解,
看看抽象类
ok,现在正是进入到调用slot的过程中,我们按照上面的循序一个一个看
NodeSelectorSlot,资源node选择器
我们必须先明确一点,node是与slotchain绑定的,每一个唯一资源都有唯一一个slotchain,而slotchain里面保存了node(defaultNode),并且保存了不同调用上下文的不同node(defaultNode),官网有解说

image-20240709141403982
资源都有唯一一个slotchain;
我们看看NodeSelectorSlot是怎么实现的
ClusterBuilderSlot,资源统计节点的构建,也就是ClusterNode
ok,这里逻辑很简单,创建一个clusterNode统计进入信息
接着进入LogSlot
这里面逻辑也比较简单,记录BlockException
ok ,到了核心的StatisticSlot
首先判断是否可以进入,这里先去执行AuthoritySlot、SystemSlot,ParamFlowSlot,FlowSlot,所以我们先去看看其他几个slot的逻辑,先跳过这一节
AuthoritySlot
SystemSlot
ParamFlowSlot
FlowSlot
与ParamFlowSlot类似,根据FlowRule决定是否通过flow-control | Sentinel (sentinelguard.io)
DegradeSlot
- 慢调用比例 (
SLOW_REQUEST_RATIO):选择以慢调用比例作为阈值,需要设置允许的慢调用 RT(即最大的响应时间),请求的响应时间大于该值则统计为慢调用。当单位统计时长(statIntervalMs)内请求数目大于设置的最小请求数目,并且慢调用的比例大于阈值,则接下来的熔断时长内请求会自动被熔断。经过熔断时长后熔断器会进入探测恢复状态(HALF-OPEN 状态),若接下来的一个请求响应时间小于设置的慢调用 RT 则结束熔断,若大于设置的慢调用 RT 则会再次被熔断。 - 异常比例 (
ERROR_RATIO):当单位统计时长(statIntervalMs)内请求数目大于设置的最小请求数目,并且异常的比例大于阈值,则接下来的熔断时长内请求会自动被熔断。经过熔断时长后熔断器会进入探测恢复状态(HALF-OPEN 状态),若接下来的一个请求成功完成(没有错误)则结束熔断,否则会再次被熔断。异常比率的阈值范围是[0.0, 1.0],代表 0% - 100%。 - 异常数 (
ERROR_COUNT):当单位统计时长内的异常数目超过阈值之后会自动进行熔断。经过熔断时长后熔断器会进入探测恢复状态(HALF-OPEN 状态),若接下来的一个请求成功完成(没有错误)则结束熔断,否则会再次被熔断。 - circuit-breaking | Sentinel (sentinelguard.io)
如果前面的都通过了然后回到StatisticSlot
3. 扩展点
sentinel有很多扩展点
3.1 初始化过程扩展Initexector
执行时机,第一次调用enty,或者不是Earler模式
默认情况下,会找到集群模式下的client和server初始化以及metric回调函数初始化
3.2 Slot/Slot Chain扩展
调用时机:没有找到资源匹配的slotchain
3.3 Transport 扩展
其实就是客户端对外暴露的接口,默认也会暴露一些接口,方面查看客户端的情况
首先有一个API中心负责接收外界信息
接收到之后找到适配的handler
默认会定义一些handle