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 熔断三状态转换流程

下图展示了熔断器在三个状态之间的完整转换路径,以及每个状态下的核心决策逻辑。

熔断三状态转换流程图 Closed 正常转发请求 Open 拒绝所有请求 Half-Open 试探放行请求 错误率/延迟超阈值 超时自动进入 试探请求成功 → 重置为 Closed 试探请求失败 状态转换说明 1. Closed → Open:滑动窗口内错误率 ≥ 50% 且请求数 ≥ 5 2. Open → Half-Open:Open 状态持续 5s 后自动进入 3. Half-Open → Closed:试探请求成功率 ≥ 80% 4. Half-Open → Open:试探请求失败,重新进入 Open

4.4 熔断与降级的关系

熔断和降级是协同配合的两种治理手段,并非替代关系。熔断是触发条件,降级是处理动作。

维度 熔断(Circuit Breaker) 降级(Degradation)
定位 故障隔离与快速失败机制 服务能力衰减时的替代方案
触发条件 错误率/延迟超过阈值 熔断触发、限流触发、资源不足
执行动作 切断请求链路 返回降级数据(缓存、默认值、空结果)
恢复方式 自动试探恢复(Half-Open) 随熔断/限流恢复而自动恢复
典型场景 下游服务宕机、网络超时 大促时关闭非核心功能
常见误区:熔断后不提供降级响应,直接抛出异常,导致调用方无任何兜底数据。正确的做法是:熔断打开时,必须配合降级逻辑返回有意义的 Fallback 结果。

4.5 熔断与降级协同流程

下图展示了熔断器在 Open 状态下如何与降级逻辑协同工作,以及 Half-Open 状态下的试探恢复流程。

熔断与降级协同流程图 请求到达 熔断状态判断 Closed:正常调用 Open:触发降级 Half-Open:试探调用 返回降级数据 降级数据示例:缓存数据、默认值、空列表、静态页面;禁止直接抛出异常
最佳实践:在压测场景中,熔断触发后必须验证降级响应的正确性。例如:商品详情页熔断后,降级返回缓存中的商品名称和价格,而不是返回“系统繁忙”的空白页。降级数据的质量直接影响用户体验。