服务雪崩与熔断降级(Sentinel/Hystrix)
什么是服务雪崩(Cascading Failure)?熔断和降级有什么区别?请介绍熔断器的三种状态(Closed/Open/Half-Open)及状态转换机制。Sentinel和Hystrix在熔断实现上有何不同?
回答
苦行僧
服务雪崩:
- 一个服务故障(如响应变慢),导致调用方线程阻塞,资源耗尽
- 进一步导致调用方的调用方也故障,像雪崩一样蔓延
- 典型链:服务A→B→C,C故障 → B请求堆积 → B资源耗尽 → A也故障
熔断 vs 降级:
| 对比 | 熔断(Circuit Breaker) | 降级(Degradation) |
|---|---|---|
| 触发条件 | 下游错误率/慢调用达到阈值 | 主动或被动的服务能力减弱 |
| 状态 | 三种状态自动切换 | 配置/规则手动或自动触发 |
| 恢复方式 | 半开状态自动探测恢复 | 需手动恢复或条件满足自动恢复 |
| 目的 | 保护下游不被打垮 | 保证核心功能可用 |
熔断器三种状态:
- Closed(关闭):正常状态,请求正常通过
- 记录失败次数,当失败率 > 阈值(如50%)→ 转为Open
- Open(打开):请求直接熔断(快速失败),不调用下游
- 等待超时时间(如5秒)后进入Half-Open
- Half-Open(半开):尝试放行少量请求进行探测
- 成功 → 转为Closed(恢复)
- 失败 → 转为Open(继续熔断)
Sentinel vs Hystrix熔断实现:
-
Hystrix:
- 基于线程池或信号量隔离
- 熔断判断基于滑动窗口(10秒窗口,最小请求数20)
- 状态转换:Closed → Open(失败率>50%)→ Half-Open(5秒后)→ Closed
-
Sentinel:
- 支持熔断+限流+系统保护(功能更全)
- 熔断策略更丰富:慢调用比例、异常比例、异常数
- 支持实时统计(秒级滑动窗口)
- 支持动态规则配置(控制台推送)
降级常见手段:返回兜底数据、缓存数据、空值、抛出具体异常提示。