Sentinel熔断限流器工作原理

简介: Sentinel熔断限流器工作原理

image.png



Sentinel核心架构图


image.png

如图上半部分是做数据统计的
下面部分就是使用统计的数据做规则的校验
整个过程就是一个链
Sentinel核心骨架是ProcessorSlotChain(处理器槽链)
其将不同的Slot按照顺序串在一起(责任链模式) 从而将不通的功能合在一起(限流、降级、系统保护)
系统会为每个资源创建一套SlotChain

SPI(服务处理接口)机制

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

image.png


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

NodeSelectorSlot

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

ClusterBuilderSlot

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

StatisticSlot

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

ParamFlowSlot

image.png

对应"热点流控"

FlowSlot

image.png


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

AuthoritySlot

image.png

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

DegradeSlot

image.png

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

SystemSlot

image.png


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


接下来分析架构图

调用树

image.png

image.png

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

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

image.png

image.png

EntranceNode、DefaultNode、查看ClusterNode都是继承的StatisticNode 说明这些节点都是用于统计的
要想弄明白这些节点之间的区别 先来看下Context这个概念

Context

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

image.png

image.png

image.png


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

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


image.png

image.png


  • Node
用于完成数据统计
  • StatisticNode
统计节点,是Node接口的实现类,用于完成数据统计
  • EntranceNode
入口节点,一个Context上下文会有一个入口节点,用于统计当前Context的总体流量数据
  • DefaultNode
默认节点 用于统计"一个资源"在"当前Context"中的流量数据
  • ClusterNode
集群节点 用于统计一个资源在所有Context中的总体流量
上图中的2个Context中的DefaultNode2 被ClusterNode2汇总
该节点是由ClusterBuilderSlot处理器槽创建
相关文章
|
8月前
|
监控 Java Sentinel
使用Sentinel进行服务调用的熔断和限流管理(SpringCloud2023实战)
Sentinel是面向分布式、多语言异构化服务架构的流量治理组件,主要以流量为切入点,从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性。
208 3
|
4月前
|
负载均衡 算法 Java
蚂蚁面试:Nacos、Sentinel了解吗?Springcloud 核心底层原理,你知道多少?
40岁老架构师尼恩分享了关于SpringCloud核心组件的底层原理,特别是针对蚂蚁集团面试中常见的面试题进行了详细解析。内容涵盖了Nacos注册中心的AP/CP模式、Distro和Raft分布式协议、Sentinel的高可用组件、负载均衡组件的实现原理等。尼恩强调了系统化学习的重要性,推荐了《尼恩Java面试宝典PDF》等资料,帮助读者更好地准备面试,提高技术实力,最终实现“offer自由”。更多技术资料和指导,可关注公众号【技术自由圈】获取。
蚂蚁面试:Nacos、Sentinel了解吗?Springcloud 核心底层原理,你知道多少?
|
5月前
|
监控 Java API
谷粒商城笔记+踩坑(25)——整合Sentinel实现流控和熔断降级
先简单介绍熔断、降级等核心概念,然后阐述SpringBoot整合Sentinel的实现方式,最后介绍Sentinel在本项目中的应用。
谷粒商城笔记+踩坑(25)——整合Sentinel实现流控和熔断降级
|
4月前
|
运维 监控 算法
聊一聊Sentinel背后的原理
本文介绍了Sentinel的核心原理,包括流量控制、熔断降级、系统负载保护、实时监控和统计、与多种微服务框架的集成能力以及扩展性,强调了Sentinel在保障分布式系统稳定性方面的重要性。
198 0
|
6月前
|
运维 监控 NoSQL
【Redis】哨兵(Sentinel)原理与实战全解~炒鸡简单啊
Redis 的哨兵模式(Sentinel)是一种用于实现高可用性的机制。它通过监控主节点和从节点,并在主节点故障时自动进行切换,确保集群持续提供服务。哨兵模式包括主节点、从节点和哨兵实例,具备监控、通知、自动故障转移等功能,能显著提高系统的稳定性和可靠性。本文详细介绍了哨兵模式的组成、功能、工作机制以及其优势和局限性,并提供了单实例的安装和配置步骤,包括系统优化、安装、配置、启停管理和性能监控等。此外,还介绍了如何配置主从复制和哨兵,确保在故障时能够自动切换并恢复服务。
|
7月前
|
监控 算法 Java
高并发架构设计三大利器:缓存、限流和降级问题之配置Sentinel的流量控制规则问题如何解决
高并发架构设计三大利器:缓存、限流和降级问题之配置Sentinel的流量控制规则问题如何解决
112 0
|
8月前
|
监控 Java API
深入解析 Spring Cloud Sentinel:分布式系统流量控制与熔断降级的全面指南
深入解析 Spring Cloud Sentinel:分布式系统流量控制与熔断降级的全面指南
168 0
深入解析 Spring Cloud Sentinel:分布式系统流量控制与熔断降级的全面指南
|
8月前
|
监控 Java 应用服务中间件
Sentinel原理及实践
Sentinel原理及实践
146 1
|
8月前
|
自然语言处理 监控 开发者
springCloud之Sentinel流量路由、流量控制、流量整形、熔断降级
springCloud之Sentinel流量路由、流量控制、流量整形、熔断降级
186 0
|
9月前
|
Java 数据安全/隐私保护 Sentinel
微服务学习 | Spring Cloud 中使用 Sentinel 实现服务限流
微服务学习 | Spring Cloud 中使用 Sentinel 实现服务限流