sentinel源码解析
2021-07-22 14:43:28 0 举报
sentinel源码解析,含主要流程和持久化流程
作者其他创作
大纲/内容
SentinelResourceAspect@Aspect切面
executeCommand--http://192.168.1.238:8721/getRules
@Bean
调用顺序和右边的chain顺序一致
开关默认 close
持久化源码开始
滑动时间窗算法:
getRules
DynamicSentinelProperty#updateValue
SimpleHttpCommandCenter#start
降级
@SentinelResource
DefaultController.canPass
以新增规则setRules为例
newSlotChain
Warm UP
InitExecutor#doInit()
while死循环等待,如果有通信连接,则提交执行任务
规则校验
repository#save
w.func.init();
DefaultProcessorSlotChain
读取文件
开启socket线程,监听通信事件
否
存到dashboard内存
退出
publishRules
spring-cloud-alibaba-sentinel:0.2.1.releasespring.factories
AuthoritySlot
FileRefreshableDataSource初始化
entry
开始
监听器
ClusterBuilderSlot
canPassCheck
令牌桶算法:令牌桶大小固定,请求必须拿到令牌才能通过,可处理多个突发请求,假设有100个请求,只要令牌桶有令牌,就会全部通过
新增或者获取流控规则setRules、getRules
漏桶算法:处理请求的速度时间固定,每次留出的水是固定的
更新client内存
StatisticsSlot
ServiceLoaderUtil.getServiceLoader(InitFunc.class)
RateLimiterController.canPass
入口配置类
结束
尝试一次半开
WritableDataSourceRegistry.getFlowDataSource()
降级规则
open
false
FileWritableDataSource#write
执行http请求client
获取规则
主流程源码结束
WarmUpController.canPass
统计statisticSlot.exit()
half-open
触发降级
FlowSlot
@Around
SentinelApiClient#executeCommand
入口-spring.factories
@PointCut
开启和dashboard通信端口
FetchActiveRuleCommandHandler#handle
apply
client
ParamFlowSlot
开启socket端口
DegradeSlot
SentinelAutoConfiguration
lookProcessChain
入口
invokeResourceWithSentinel
快速失败
FlowControllerV1
FlowControllerV1#apiAddFlowRule
加载规则到client内存
AutoRefreshDataSource#startTimerService
排队等待
NodeSelectSlot
rollingCounterInSecond.pass()
FlowRuleManager#getRules
LogSlot
流控
SphU.entry
spring-cloud-alibaba-sentinel:0.2.1
YES,降级开始
executeCommand--http://192.168.1.238:8721/setRules
保存成文件
slotchain初始化
FlowRuleManager.loadRules
checkFlow
主流程源码开始
node.passQps
HttpEventTask#run
JAVA SPI初始化CommandHandler
beforeStart()
ModifyRulesCommandHandler#handle
avgUsedTokens
dashboard
采用的是ServerSocket通信,默认开启8719端口
SimpleHttpCommandCenter.this.new ServerThread
是否触发降级条件
检查黑白名单
扩展点:通过JAVASPI机制加载InitFunc接口的实现类,其中有一个重要的实现类CommandCenterInitFunc,该类是客户端与dashboard通信的核心类
entry.exit()
CommandCenterInitFunc#init
获取校验规则
修改内存
定时更新任务:每3秒,从持久化文件读取配置文件,并且更新到内存中
SimpleHttpCommandCenter#getServerSocketFromBasePort
SentinelApiClient#setRulesAsync
PropertyListener#updateValue
SentinelAutoConfiguration#init()
this#writeToDataSource()
true
0 条评论
下一页