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 算法是将匀速排队和预热相结合
来源:oschina
链接:https://my.oschina.net/u/3301366/blog/4307530