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处理器槽创建

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,716评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,558评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,431评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,127评论 0 209
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,511评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,692评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,915评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,664评论 0 202
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,412评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,616评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,105评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,424评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,098评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,096评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,869评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,748评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,641评论 2 271

推荐阅读更多精彩内容

  • 完整源码流程图 架构图 几个重要概念 Resource Sentinel 通过资源来保护具体的业务代码或其他后方服...
    知止9528阅读 472评论 0 0
  • 限流是保障服务高可用的方式之一,尤其是在微服务架构中,对接口或资源进行限流可以有效地保障服务的可用性和稳定性。 之...
    vivo互联网技术阅读 632评论 0 1
  • Sentinel 是阿里中间件团队开源的,面向分布式服务架构的轻量级高可用流量控制组件,主要以流量为切入点,从流量...
    没想好像阅读 1,564评论 0 0
  • 系列 Sentinel流程介绍[https://www.jianshu.com/p/059aaf9492b1] S...
    晴天哥_王志阅读 1,000评论 0 2
  • 服务限流的作用及实现限流的主要目的是通过限制并发数访问或者限制同一个时间窗口允许处理的请求数量来保护系统。提供稳定...
    TZX_0710阅读 898评论 0 1