Sentinel熔断限流器工作原理

Sentinel控制台页面

Sentinel核心架构图

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

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

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

SPI(服务处理接口)机制

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

NodeSelectorSlot

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

ClusterBuilderSlot

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

StatisticSlot

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

ParamFlowSlot

对应"热点流控"

FlowSlot

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

AuthoritySlot

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

DegradeSlot

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

SystemSlot

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

接下来分析架构图

调用树

调用树由NodeSelectorSlot创建的

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

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

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

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

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

Context

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

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

这个就是在一个context里面包含2个资源的操作
在一个应用中包含2个Context
每个Context都包含了对2种资源的访问
2个Context访问的2种资源有重合的部分 即都访问了resource2

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

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值