4. 熔断机制基础:熔断定义、熔断三状态、熔断与降级的关系
4.1 熔断定义与核心目标
熔断(Circuit Breaker)是一种面向调用链路的快速失败保护机制。当下游服务或资源持续出现高延迟、高错误率时,熔断器主动切断上游请求,防止故障级联扩散,为系统提供自我修复的缓冲时间。
核心目标:
- 隔离故障:将故障限制在局部范围,避免雪崩效应。
- 快速失败:拒绝等待超时的请求,释放线程/连接资源。
- 自动恢复:在故障缓解后逐步恢复流量,无需人工介入。
4.2 熔断三状态详解
熔断器通过三个有限状态机实现闭环控制:Closed(关闭)、Open(打开)、Half-Open(半开)。状态转换由滑动窗口内的指标(错误率、延迟、请求数)驱动。
| 状态 | 含义 | 请求处理行为 | 触发条件 |
|---|---|---|---|
| Closed | 熔断器关闭,正常转发请求 | 请求正常通过,统计窗口内指标 | 初始状态;指标低于阈值 |
| Open | 熔断器打开,拒绝所有请求 | 直接返回降级响应(Fallback),不发起真实调用 | 错误率/延迟超过阈值,且达到最小请求数 |
| Half-Open | 熔断器半开,试探性放行少量请求 | 允许有限请求通过,观察成功率 | Open 状态持续超时(如 5s)后自动进入 |
关键参数:滑动窗口大小(如 10s)、错误率阈值(如 50%)、最小请求数(如 5)、Open 超时时间(如 5s)、Half-Open 最大试探请求数(如 3)。
4.3 熔断三状态转换流程
下图展示了熔断器在三个状态之间的完整转换路径,以及每个状态下的核心决策逻辑。
4.4 熔断与降级的关系
熔断和降级是协同配合的两种治理手段,并非替代关系。熔断是触发条件,降级是处理动作。
| 维度 | 熔断(Circuit Breaker) | 降级(Degradation) |
|---|---|---|
| 定位 | 故障隔离与快速失败机制 | 服务能力衰减时的替代方案 |
| 触发条件 | 错误率/延迟超过阈值 | 熔断触发、限流触发、资源不足 |
| 执行动作 | 切断请求链路 | 返回降级数据(缓存、默认值、空结果) |
| 恢复方式 | 自动试探恢复(Half-Open) | 随熔断/限流恢复而自动恢复 |
| 典型场景 | 下游服务宕机、网络超时 | 大促时关闭非核心功能 |
常见误区:熔断后不提供降级响应,直接抛出异常,导致调用方无任何兜底数据。正确的做法是:熔断打开时,必须配合降级逻辑返回有意义的 Fallback 结果。
4.5 熔断与降级协同流程
下图展示了熔断器在 Open 状态下如何与降级逻辑协同工作,以及 Half-Open 状态下的试探恢复流程。
最佳实践:在压测场景中,熔断触发后必须验证降级响应的正确性。例如:商品详情页熔断后,降级返回缓存中的商品名称和价格,而不是返回“系统繁忙”的空白页。降级数据的质量直接影响用户体验。