CodeWalk

服务雪崩与熔断降级(Sentinel/Hystrix)

作者:苦行僧 · 2026-05-30 12:55

什么是服务雪崩(Cascading Failure)?熔断和降级有什么区别?请介绍熔断器的三种状态(Closed/Open/Half-Open)及状态转换机制。Sentinel和Hystrix在熔断实现上有何不同?

回答

苦行僧

服务雪崩

  • 一个服务故障(如响应变慢),导致调用方线程阻塞,资源耗尽
  • 进一步导致调用方的调用方也故障,像雪崩一样蔓延
  • 典型链:服务A→B→C,C故障 → B请求堆积 → B资源耗尽 → A也故障

熔断 vs 降级

对比熔断(Circuit Breaker)降级(Degradation)
触发条件下游错误率/慢调用达到阈值主动或被动的服务能力减弱
状态三种状态自动切换配置/规则手动或自动触发
恢复方式半开状态自动探测恢复需手动恢复或条件满足自动恢复
目的保护下游不被打垮保证核心功能可用

熔断器三种状态

  1. Closed(关闭):正常状态,请求正常通过
    • 记录失败次数,当失败率 > 阈值(如50%)→ 转为Open
  2. Open(打开):请求直接熔断(快速失败),不调用下游
    • 等待超时时间(如5秒)后进入Half-Open
  3. Half-Open(半开):尝试放行少量请求进行探测
    • 成功 → 转为Closed(恢复)
    • 失败 → 转为Open(继续熔断)

Sentinel vs Hystrix熔断实现

  • Hystrix

    • 基于线程池或信号量隔离
    • 熔断判断基于滑动窗口(10秒窗口,最小请求数20)
    • 状态转换:Closed → Open(失败率>50%)→ Half-Open(5秒后)→ Closed
  • Sentinel

    • 支持熔断+限流+系统保护(功能更全)
    • 熔断策略更丰富:慢调用比例、异常比例、异常数
    • 支持实时统计(秒级滑动窗口)
    • 支持动态规则配置(控制台推送)

降级常见手段:返回兜底数据、缓存数据、空值、抛出具体异常提示。