Sentinel支持哪些降级规则?原理、源码思想与生产实践详解
📌 Sentinel支持哪些降级规则?原理、源码思想与生产实践详解
1️⃣ 问题背景
在微服务架构中,服务之间通过HTTP、RPC、Feign、Dubbo等方式相互调用。随着业务规模扩大,一个用户请求往往会经过十几个甚至几十个服务节点。
如果某个下游服务出现故障、数据库响应变慢或者网络发生抖动,大量请求会持续堆积,最终导致线程池耗尽、连接池耗尽,从而引发整个系统雪崩。
为了防止局部故障扩散到整个系统,阿里巴巴开源了Sentinel。Sentinel除了支持流量控制之外,还提供了强大的熔断降级能力。
库存服务故障
↓
订单服务持续调用
↓
线程阻塞等待
↓
Tomcat线程池耗尽
↓
整个系统不可用
Sentinel通过实时统计请求指标,当达到预设阈值时自动熔断服务,从而实现系统自我保护。
2️⃣ 核心原理
Sentinel熔断降级本质上是对服务运行状态进行持续监控。
当服务异常率过高、异常数量过多或者响应时间持续变慢时,Sentinel自动切断对目标服务的访问。
持续统计指标
↓
达到阈值
↓
触发熔断
↓
执行Fallback
↓
等待恢复
从Sentinel 1.8开始,官方统一采用熔断器模式实现降级功能,其内部基于滑动窗口和状态机实现。
3️⃣ 数据结构分析
熔断状态机
Sentinel内部维护三种状态。
↓
达到熔断条件
↓
Open(熔断状态)
↓
等待恢复时间
↓
Half Open(半开状态)
↓
探测成功
↓
Closed
滑动窗口结构
Sentinel采用LeapArray实现滑动时间窗口统计。
Bucket2
Bucket3
Bucket4
Bucket5
每个Bucket负责统计一段时间内的请求数据。
- 总请求数
- 成功请求数
- 异常请求数
- 慢请求数
- 平均RT
熔断规则对象
resource
grade
count
timeWindow
minRequestAmount
其中grade字段决定具体使用哪种降级规则。
4️⃣ 算法分析
Sentinel目前支持三种核心熔断降级规则。
规则一:慢调用比例(Slow Request Ratio)
这是生产环境最常见的降级策略。
当请求响应时间超过指定RT时,该请求会被标记为慢请求。
判定为慢调用
若慢调用比例持续超过阈值,则触发熔断。
慢请求数 = 60
慢调用比例 = 60%
若配置阈值为50%,则触发熔断。
规则二:异常比例(Exception Ratio)
统计异常请求占总请求比例。
例如:
异常请求 = 600
异常比例 = 60%
如果阈值设置为50%,则熔断器开启。
规则三:异常数(Exception Count)
统计时间窗口内异常总数。
触发熔断
该策略适用于QPS较低的业务系统。
5️⃣ 执行流程
慢调用比例熔断流程
↓
统计RT
↓
RT超过阈值
↓
slowCount++
↓
计算慢调用比例
↓
超过阈值
↓
熔断
异常比例熔断流程
↓
发生异常
↓
errorCount++
↓
统计错误率
↓
超过阈值
↓
触发熔断
异常数熔断流程
↓
errorCount++
↓
统计异常总数
↓
达到阈值
↓
执行熔断
6️⃣ 实际案例
慢调用比例配置
熔断策略:慢调用比例
最大RT:1000ms
比例阈值:50%
最小请求数:10
熔断时长:30秒
表示最近统计窗口中,如果超过50%的请求RT大于1000ms,则触发熔断30秒。
异常比例配置
熔断策略:异常比例
异常比例:0.5
最小请求数:10
熔断时长:30秒
异常数配置
熔断策略:异常数
异常数量:100
统计窗口:60秒
熔断时长:30秒
代码实现Fallback
value = "getStock",
fallback = "fallback"
)
public Integer getStock(Long id){
return stockApi.getStock(id);
}
return 0;
}
触发熔断后直接进入Fallback方法。
7️⃣ 优缺点分析
- 自动检测服务异常
- 防止服务雪崩
- 支持动态配置
- 支持实时生效
- 支持自动恢复
- 集成Spring Cloud方便
- 阈值配置需要经验
- 降级结果可能不准确
- 规则过多维护复杂
- 需要完善监控体系
8️⃣ 面试常见问题
Q1:Sentinel支持哪些降级规则?
Q2:生产环境最推荐哪种规则?
Q3:异常比例和异常数有什么区别?
Q4:熔断后如何恢复?
Q5:Sentinel内部如何统计数据?
9️⃣ 总结
Sentinel当前主要支持三种熔断降级规则:慢调用比例、异常比例和异常数。其中慢调用比例是互联网企业最常见的生产配置。
其底层依赖滑动窗口统计数据,通过熔断状态机实现自动保护和自动恢复机制。当系统检测到服务异常时,会快速切断调用链路并执行Fallback逻辑,从而保证整体系统可用性。
Sentinel支持三种熔断降级规则:
① 慢调用比例(Slow Request Ratio)
RT超过阈值的请求占比达到条件触发熔断。
② 异常比例(Exception Ratio)
异常请求占总请求比例达到阈值触发熔断。
③ 异常数(Exception Count)
统计窗口内异常数量达到阈值触发熔断。
生产环境最常用:
慢调用比例 + Feign Fallback + Sentinel Dashboard动态配置。
相关文章
-
从数据结构到算法:RBAC权限系统的完整实现解析
RBAC(Role-Based Access Control,基于角色的访问控制)是企业级权限系统的主流设计模型。 它通过“用户—角色—权限”的映射关系,将复杂的权限管理问题抽象为结构化的数据模型与可计算的访问控制算法。
NEW个对象 2026-06-08
-
什么是降级和熔断?从原理到落地实践全面解析
随着微服务架构的普及,一个完整业务请求往往需要经过多个服务调用链。例如用户下单时,可能需要依次调用订单服务、库存服务、商品服务、营销服务、积分服务、支付服务等多个系统。
NEW个对象 2026-06-12
-
对外接口安全体系的具体实现思路(可落地架构)
对外接口的实现不能只停留在Controller层,而应该是一个完整的“API网关 + 业务服务 + 安全治理”的分层架构。
NEW个对象 2026-06-08