sentinel 源码分析

元气小坏坏 提交于 2020-10-06 07:40:42

sentinel 结构 release-1.7 未完后续更新

sentinel-core 核心模块,限流、降级、系统保护等都在这里实现
sentinel-dashboard 控制台模块,可以对连接上的sentinel客户端实现可视化的管理
sentinel-transport 传输模块,提供了基本的监控服务端和客户端的API接口,以及一些基于不同库的实现
sentinel-extension 扩展模块,主要对DataSource进行了部分扩展实现
sentinel-adapter 适配器模块,主要实现了对一些常见框架的适配
sentinel-demo 样例模块,可参考怎么使用sentinel进行限流、降级等
sentinel-benchmark 基准测试模块,对核心代码的精确性提供基准测试

1、限流 qps

(1) initFlowQpsRule 初始化加载qps 限流规则
	FlowRuleManager.loadRules(rules);
	————> 初始化 FlowPropertyListener  ——>加入到 DynamicSentinelProperty  add --> synchronizedSet 
	————> loadRules ————> DynamicSentinelProperty  ————> updateValue && FlowPropertyListener configUpdate ————> 
		  buildFlowRuleMap validRule && generateRater(获取控制器)  ———> 加载到ConCurrentHashMap 
(2)Env 所有的 InitFunc初始化 ———>  sph=CtSph 实现Sph所有接口 ————>
controlBehavior 流量控制规则 :
0、直接拒绝
1、warm up(预热)
2、rate limiter(均速排队)
这种方式主要用于处理间隔性突发的流量,例如消息队列。想象一下这样的场景,在某一秒有大量的请求到来,而接下来的几秒则处于空闲状态,我们希望系统能够在接下来的空闲期间逐渐处理这些请求,而不是在第一秒直接拒绝多余的请求。 
3、 warm up + rate limiter
节流控制器 TrafficShapingController接口
1、DefaultController 默认的节流控制器(立即拒绝策略)
2、RateLimiterController 限速控制器
3、WarmUpController 预热控制器
4、WarmUpRateLimiterController 算法是将匀速排队和预热相结合
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!