0%

Sentinel降级

Sentinel 熔断降级:保护服务链路的稳定性机制

熔断降级是 Sentinel 保障服务稳定性的另一核心能力,当调用链路中某个资源因异常(如响应缓慢、错误率高)变得不稳定时,Sentinel 会暂时 “熔断” 对该资源的调用,避免故障扩散至整个链路。与流量控制不同,降级更关注资源自身的状态健康度,通过 “故障隔离” 实现系统的弹性容错。

熔断降级的核心目标

在分布式系统中,服务间依赖关系复杂,一个资源的故障可能引发 “雪崩效应”(如 A 依赖 B,B 依赖 C,C 故障导致 B 超时,进而导致 A 崩溃)。熔断降级的目标是:

  • 当资源异常时,快速 “切断” 调用,避免无效等待或错误累积;
  • 给故障资源 “恢复时间”,熔断一段时间后尝试恢复调用;
  • 保护调用方资源(如线程、连接)不被耗尽,确保系统整体可用。

熔断策略详解

Sentinel 提供三种熔断策略,覆盖不同的异常场景,可根据业务特点选择配置:

1. 慢调用比例(SLOW_REQUEST_RATIO)

核心逻辑:当资源的慢调用比例超过阈值时,触发熔断,避免因长期等待耗尽调用方资源。

关键参数(Dashboard 配置项):
  • 最大 RT(毫秒):定义 “慢调用” 的阈值,响应时间超过该值的请求被视为 “慢调用”(默认值 4900ms,可通过 JVM 参数-Dcsp.sentinel.statistic.max.rt调整);
  • 比例阈值:慢调用占总请求的比例阈值(范围 [0.0,1.0],如 0.5 代表 50%);
  • 最小请求数:单位统计时长内,触发熔断的最小请求数(避免少量请求导致误判,默认 5);
  • 熔断时长(毫秒):熔断后,持续拒绝调用的时间(如 10000ms,即 10 秒);
  • 统计时长:默认 1000ms(1 秒),即基于每秒的数据判断。
触发条件(需同时满足):
  1. 单位统计时长内,请求数 ≥ 最小请求数;
  2. 慢调用(响应时间>最大 RT)的比例 ≥ 比例阈值。
状态转换:
  • 正常(CLOSED) → 满足条件 → 熔断(OPEN):熔断时长内,所有请求被拒绝;
  • 熔断(OPEN)→ 熔断时长结束 →探测恢复(HALF-OPEN):允许一个请求尝试调用;
    • 若该请求响应时间 ≤ 最大 RT → 正常(CLOSED)(熔断结束);
    • 若该请求响应时间 > 最大 RT → 熔断(OPEN)(重新计时熔断时长)。
适用场景:
  • 对响应时间敏感的接口(如支付、下单),避免因慢调用导致调用方线程阻塞;
  • 依赖外部服务(如第三方 API)的接口,外部服务偶尔响应缓慢时使用。

2. 异常比例(ERROR_RATIO)

核心逻辑:当资源的异常请求比例超过阈值时,触发熔断,避免无效调用消耗资源。

关键参数:
  • 异常比例阈值:异常请求占总请求的比例(范围 [0.0,1.0],如 0.3 代表 30%);
  • 最小请求数:单位统计时长内,触发熔断的最小请求数(默认 5);
  • 熔断时长(毫秒):熔断后拒绝调用的时间;
  • 统计时长:默认 1000ms(1 秒)。
触发条件(需同时满足):
  1. 单位统计时长内,请求数 ≥ 最小请求数;
  2. 异常请求(如抛出异常、返回错误码)的比例 ≥ 异常比例阈值。
状态转换:
  • 正常(CLOSED) → 满足条件 → 熔断(OPEN)
  • 熔断(OPEN)→ 熔断时长结束 →探测恢复(HALF-OPEN):允许一个请求尝试调用;
    • 若该请求无异常 → 正常(CLOSED)
    • 若该请求有异常 → 熔断(OPEN)
适用场景:
  • 接口错误率波动较大的场景(如数据库偶发连接失败);
  • 依赖不稳定服务的接口(如上游服务偶尔返回 500 错误)。

3. 异常数(ERROR_COUNT)

核心逻辑:当资源的异常请求总数超过阈值时,触发熔断,适合异常数累积触发的场景。

关键参数:
  • 异常数阈值:单位统计时长内,允许的最大异常请求数(如 5 次);
  • 熔断时长(毫秒):熔断后拒绝调用的时间;
  • 统计时长:默认 60000ms(1 分钟,与前两种策略的秒级统计不同)。
触发条件:

单位统计时长内,异常请求数 ≥ 异常数阈值(无需判断请求总数,只要异常数达标即触发)。

状态转换:

与 “异常比例” 策略一致,熔断后通过单请求探测恢复。

适用场景:
  • 异常数可预期的场景(如每日允许 3 次支付失败,超过则熔断);
  • 需严格控制异常总数的接口(如敏感操作接口,多次失败后暂时关闭)。

Dashboard 配置示例

以 “异常比例” 策略为例,配置步骤如下:

  1. 登录 Sentinel Dashboard,选择目标服务;
  2. 进入 “簇点链路”,找到需降级的资源(如/order/pay),点击 “降级”;
  3. 配置规则:
    • 资源名:/order/pay
    • 熔断策略:异常比例;
    • 比例阈值:0.5(50%);
    • 最小请求数:5;
    • 熔断时长:10000(10 秒);
  4. 点击 “新增”,规则立即生效。

/order/pay接口每秒请求≥5 次,且异常比例≥50% 时,会触发 10 秒熔断,期间所有请求被拒绝。

熔断状态与监控

Sentinel Dashboard 的 “实时监控” 页面可查看资源的熔断状态:

  • CLOSED(正常):资源正常调用,无熔断;
  • OPEN(熔断):资源被熔断,请求被拒绝;
  • HALF-OPEN(探测恢复):熔断结束,尝试恢复调用。

通过监控指标(如异常数、慢调用数)可分析熔断原因,优化资源稳定性。

注意事项

  1. 统计时长差异

    • 慢调用比例、异常比例的统计时长为1 秒
    • 异常数的统计时长为1 分钟,配置时需注意阈值与时长的匹配(如 1 分钟内允许 5 次异常)。
  2. 最小请求数
    慢调用比例和异常比例策略中,“最小请求数” 是避免少量请求误判的关键(如 1 次请求失败就触发熔断),建议根据接口 QPS 设置(如 QPS=100,最小请求数可设为 10)。

  3. RT 阈值调整
    慢调用比例的 “最大 RT” 默认 4900ms,若业务接口正常响应时间更长(如 6000ms),需通过 JVM 参数调整:

    1
    java -jar app.jar -Dcsp.sentinel.statistic.max.rt=6000  # 设置最大RT为6000ms
  4. 降级与流控结合
    实际场景中,流控(限制流量入口)与降级(保护故障资源)通常结合使用,形成 “多层防护”(如先限流削峰,再降级隔离故障)。

总结

Sentinel 的熔断降级通过三种策略实现了对资源异常的精准控制:

  • 慢调用比例:关注响应速度,避免调用方阻塞;
  • 异常比例:关注错误率波动,适合偶发故障;
  • 异常数:关注错误累积,适合严格控制异常总量的场景

欢迎关注我的其它发布渠道

表情 | 预览
快来做第一个评论的人吧~
Powered By Valine
v1.3.10