首页 > 项目 > 当前页面

Sentinel支持哪些降级规则?原理、源码思想与生产实践详解

2026-06-12 NEW个对象

📌 Sentinel支持哪些降级规则?原理、源码思想与生产实践详解

1️⃣ 问题背景

在微服务架构中,服务之间通过HTTP、RPC、Feign、Dubbo等方式相互调用。随着业务规模扩大,一个用户请求往往会经过十几个甚至几十个服务节点。

如果某个下游服务出现故障、数据库响应变慢或者网络发生抖动,大量请求会持续堆积,最终导致线程池耗尽、连接池耗尽,从而引发整个系统雪崩。

为了防止局部故障扩散到整个系统,阿里巴巴开源了Sentinel。Sentinel除了支持流量控制之外,还提供了强大的熔断降级能力。

⚠️ 服务雪崩场景

库存服务故障

订单服务持续调用

线程阻塞等待

Tomcat线程池耗尽

整个系统不可用

Sentinel通过实时统计请求指标,当达到预设阈值时自动熔断服务,从而实现系统自我保护。

2️⃣ 核心原理

Sentinel熔断降级本质上是对服务运行状态进行持续监控。

当服务异常率过高、异常数量过多或者响应时间持续变慢时,Sentinel自动切断对目标服务的访问。

✅ Sentinel熔断思想

持续统计指标

达到阈值

触发熔断

执行Fallback

等待恢复

从Sentinel 1.8开始,官方统一采用熔断器模式实现降级功能,其内部基于滑动窗口和状态机实现。

3️⃣ 数据结构分析

熔断状态机

Sentinel内部维护三种状态。

Closed(关闭状态)

达到熔断条件

Open(熔断状态)

等待恢复时间

Half Open(半开状态)

探测成功

Closed

滑动窗口结构

Sentinel采用LeapArray实现滑动时间窗口统计。

Bucket1
Bucket2
Bucket3
Bucket4
Bucket5

每个Bucket负责统计一段时间内的请求数据。

  • 总请求数
  • 成功请求数
  • 异常请求数
  • 慢请求数
  • 平均RT

熔断规则对象

DegradeRule

resource
grade
count
timeWindow
minRequestAmount

其中grade字段决定具体使用哪种降级规则。

4️⃣ 算法分析

Sentinel目前支持三种核心熔断降级规则。

规则一:慢调用比例(Slow Request Ratio)

这是生产环境最常见的降级策略。

当请求响应时间超过指定RT时,该请求会被标记为慢请求。

RT > 1000ms
判定为慢调用

若慢调用比例持续超过阈值,则触发熔断。

总请求数 = 100
慢请求数 = 60
慢调用比例 = 60%

若配置阈值为50%,则触发熔断。

规则二:异常比例(Exception Ratio)

统计异常请求占总请求比例。

异常比例 = 异常数 ÷ 总请求数

例如:

总请求 = 1000
异常请求 = 600
异常比例 = 60%

如果阈值设置为50%,则熔断器开启。

规则三:异常数(Exception Count)

统计时间窗口内异常总数。

一分钟内异常数 ≥ 100
触发熔断

该策略适用于QPS较低的业务系统。

5️⃣ 执行流程

慢调用比例熔断流程

请求进入

统计RT

RT超过阈值

slowCount++

计算慢调用比例

超过阈值

熔断

异常比例熔断流程

请求执行

发生异常

errorCount++

统计错误率

超过阈值

触发熔断

异常数熔断流程

请求异常

errorCount++

统计异常总数

达到阈值

执行熔断

6️⃣ 实际案例

慢调用比例配置

资源名称:getStock
熔断策略:慢调用比例
最大RT:1000ms
比例阈值:50%
最小请求数:10
熔断时长:30秒

表示最近统计窗口中,如果超过50%的请求RT大于1000ms,则触发熔断30秒。

异常比例配置

资源名称:getStock
熔断策略:异常比例
异常比例:0.5
最小请求数:10
熔断时长:30秒

异常数配置

资源名称:getStock
熔断策略:异常数
异常数量:100
统计窗口:60秒
熔断时长:30秒

代码实现Fallback

@SentinelResource(
  value = "getStock",
  fallback = "fallback"
)
public Integer getStock(Long id){
  return stockApi.getStock(id);
}
public Integer fallback(Long id, Throwable e){
  return 0;
}

触发熔断后直接进入Fallback方法。

7️⃣ 优缺点分析

✅ 优点
  • 自动检测服务异常
  • 防止服务雪崩
  • 支持动态配置
  • 支持实时生效
  • 支持自动恢复
  • 集成Spring Cloud方便
❌ 缺点
  • 阈值配置需要经验
  • 降级结果可能不准确
  • 规则过多维护复杂
  • 需要完善监控体系

8️⃣ 面试常见问题

Q1:Sentinel支持哪些降级规则?

慢调用比例、异常比例、异常数三种熔断规则。

Q2:生产环境最推荐哪种规则?

慢调用比例规则最常见,因为很多故障表现为服务变慢而不是直接报错。

Q3:异常比例和异常数有什么区别?

异常比例关注失败率,异常数关注失败总量。

Q4:熔断后如何恢复?

熔断时间结束后进入Half Open状态,允许少量请求探测服务是否恢复。

Q5:Sentinel内部如何统计数据?

通过滑动窗口LeapArray实时统计QPS、异常数、RT等指标。

9️⃣ 总结

Sentinel当前主要支持三种熔断降级规则:慢调用比例、异常比例和异常数。其中慢调用比例是互联网企业最常见的生产配置。

其底层依赖滑动窗口统计数据,通过熔断状态机实现自动保护和自动恢复机制。当系统检测到服务异常时,会快速切断调用链路并执行Fallback逻辑,从而保证整体系统可用性。

✅ 面试速记版

Sentinel支持三种熔断降级规则:

① 慢调用比例(Slow Request Ratio)
RT超过阈值的请求占比达到条件触发熔断。

② 异常比例(Exception Ratio)
异常请求占总请求比例达到阈值触发熔断。

③ 异常数(Exception Count)
统计窗口内异常数量达到阈值触发熔断。

生产环境最常用:
慢调用比例 + Feign Fallback + Sentinel Dashboard动态配置。

相关文章

NEW个对象 NEW个对象
JAVA是世界上最好的语言