意见箱
恒创运营部门将仔细参阅您的意见和建议,必要时将通过预留邮箱与您保持联络。感谢您的支持!
意见/建议
提交建议

Sentinel熔断限流器工作原理

来源:恒创科技 编辑:恒创科技编辑部
2024-02-03 09:28:59

​Sentinel控制台页面​

Sentinel熔断限流器工作原理_生命周期

Sentinel核心架构图

Sentinel熔断限流器工作原理_生命周期_02


Sentinel熔断限流器工作原理

如图上半部分是做数据统计的
下面部分就是使用统计的数据做规则的校验
整个过程就是一个链

Sentinel核心骨架是ProcessorSlotChain(处理器槽链)
其将不同的Slot按照顺序串在一起(责任链模式) 从而将不通的功能合在一起(限流、降级、系统保护)

系统会为每个资源创建一套SlotChain

​SPI(服务处理接口)机制​

Sentinel槽链中各Slot的执行顺序是固定好的
但并不是绝对不能改变的
Sentinel将ProcessorSlot作为SPI接口进行扩展
使得SlotChain具备了扩展能力
用户可以自定义Slot并编排Slot之间的顺序

Sentinel熔断限流器工作原理_数据_03

可以把自定义的slot插入到链的任意位置

​NodeSelectorSlot​

负责收集资源的路径,并将这些资源的调用路径,用树状结构存储起来,用于根据调用路径来限流降级

​ClusterBuilderSlot​

用于存储统计资源信息以及调用者信息 例如该资源的RT、QPS、thread count、Block count、Exception count等 这些信息将用作多维度限流,降级的依据
就是用于构建ClusterNode

​StatisticSlot​

用于记录,统计不同维度的runtime指标监控信息
底层使用的滑动时间窗口算法

​ParamFlowSlot​

Sentinel熔断限流器工作原理_数据_04

对应"热点流控"

​FlowSlot​

Sentinel熔断限流器工作原理_限流_05

对应的是"流控规则"
根据预设的限流规则以及前面slot统计的状态 来进行流量控制

​AuthoritySlot​

Sentinel熔断限流器工作原理_数据_06

根据配置的黑白名单和调用来源信息 来做黑白名单控制 对应"授权规则"

​DegradeSlot​

Sentinel熔断限流器工作原理_数据_07

通过统计信息以及预设的规则 来做熔断降级 对应"熔断规则"

​SystemSlot​

Sentinel熔断限流器工作原理_限流_08

对应"系统规则" 通过系统的状态 例如load等来控制总的入口流量

接下来分析架构图

​调用树​

Sentinel熔断限流器工作原理_生命周期_09

调用树由NodeSelectorSlot创建的

Root节点:一个应用就属于一个Root节点

Sentinel熔断限流器工作原理_生命周期_10

同一个应用的每个请求都会走SlotChain这个调用链
第一个请求过来之后 看是否有Root节点 如果没有则会创建
再来请求过来就不会新建了

​查看ClusterNode、DefaultNode、EntranceNode、Node、StatisticNode之间的关系​

Sentinel熔断限流器工作原理_限流_11

Sentinel熔断限流器工作原理_限流_12

EntranceNode、DefaultNode、查看ClusterNode都是继承的StatisticNode 说明这些节点都是用于统计的

要想弄明白这些节点之间的区别 先来看下Context这个概念

​Context​

Context是对资源操作的上下文 每个操作必须属于一个Context
如果代码中没有指定Context 则会创建一个name为sentinel_default_context的默认Context
一个Context生命周期可以包含多个资源操作
Context生命周期中的最后一个资源在exit()时会清理该Context 这也意味着这个Context的生命周期结束了

Sentinel熔断限流器工作原理_生命周期_13Sentinel熔断限流器工作原理_数据_14

​一个Context生命周期可以包含多个资源操作​

Sentinel熔断限流器工作原理_生命周期_15

这个就是在一个context里面包含2个资源的操作

Sentinel熔断限流器工作原理_限流_16

在一个应用中包含2个Context
每个Context都包含了对2种资源的访问
2个Context访问的2种资源有重合的部分 即都访问了resource2

​代码了解到这里之后 再来解释下架构图中的调用树了​

Sentinel熔断限流器工作原理_生命周期_17Sentinel熔断限流器工作原理_限流_12

Node
用于完成数据统计
StatisticNode
统计节点,是Node接口的实现类,用于完成数据统计
EntranceNode
入口节点,一个Context上下文会有一个入口节点,用于统计当前Context的总体流量数据
DefaultNode
默认节点 用于统计"一个资源"在"当前Context"中的流量数据
ClusterNode
集群节点 用于统计一个资源在所有Context中的总体流量

上图中的2个Context中的DefaultNode2 被ClusterNode2汇总

该节点是由ClusterBuilderSlot处理器槽创建


上一篇: 深入理解K8S网络原理上 下一篇: 手机怎么远程登录云服务器?