熔断器三态模型:Closed / Open / Half-Open

熔断机制的核心是一个有限状态机,即熔断器三态模型。该模型定义了三个稳定状态(Closed、Open、Half-Open)以及它们之间的转换条件。理解这一模型是设计弹性系统的基石。

核心概念:熔断器并非二进制开关(开/关),而是通过第三个中间状态(Half-Open)实现自动恢复探测,避免在故障未恢复时盲目放行请求,也避免在恢复后长期拒绝流量。

三态定义与转换条件总览

状态 含义 默认行为 转换触发条件
Closed(关闭) 熔断器闭合,请求正常通过 正常调用下游,统计失败率/超时率 初始状态;失败率未达阈值
Open(打开) 熔断器断开,请求被快速失败 直接返回降级响应或抛出异常,不发起真实调用 失败率超过阈值 → 从 Closed 转换
Half-Open(半开) 熔断器半开,允许少量探测请求通过 放行一个或一小批请求,测试下游是否恢复 Open 状态持续超时时间 → 自动进入

状态转换条件详解

  1. Closed → Open

    当熔断器处于 Closed 状态时,持续统计最近一个时间窗口(如 10 秒)内的请求失败率。若失败率超过预设阈值(如 50%),且请求量达到最小请求数(如 5 次),则熔断器跳转为 Open 状态。此时所有后续请求立即失败,不再调用下游。

    避坑提示:阈值设置需考虑业务容忍度。过低(如 10%)容易误触发;过高(如 90%)则保护滞后。建议结合超时时间与错误类型(5xx vs 网络超时)综合判定。
  2. Open → Half-Open

    熔断器进入 Open 状态后,会启动一个休眠计时器(如 30 秒)。计时器到期后,熔断器自动进入 Half-Open 状态。此转换是时间驱动的,不依赖外部请求。

  3. Half-Open → Closed 或 Open

    在 Half-Open 状态下,熔断器允许有限数量的探测请求通过(通常为 1 个)。若探测请求成功(响应正常),则认为下游已恢复,熔断器重置为 Closed 状态,并清零统计计数器。若探测请求失败,熔断器立即回到 Open 状态,并重置休眠计时器。

    关键设计:Half-Open 状态下的探测请求数量必须严格控制。过多探测请求可能压垮正在恢复的下游;过少则可能因单次抖动导致误判。推荐使用“单次探测 + 连续成功次数”策略。

熔断器三态转换流程图

熔断器三态模型状态转换图 Closed 请求正常通过 Open 请求快速失败 Half-Open 探测请求放行 失败率 > 阈值 休眠超时 探测成功 探测失败 说明: Closed 状态统计滑动窗口失败率;Open 状态启动休眠计时器;Half-Open 状态仅放行 1 个探测请求。 所有状态转换均为自动触发,无需人工干预。

状态转换参数配置清单

参数名称 典型值 作用阶段 说明
滑动窗口大小 10 秒 Closed 统计最近 N 秒内的请求总数与失败数
最小请求数 5 Closed → Open 窗口内请求量低于此值时不触发熔断,避免冷启动误判
失败率阈值 50% Closed → Open 失败请求占比超过此值时触发熔断
休眠超时时间 30 秒 Open → Half-Open 熔断后等待多久才允许探测
探测请求数 1 Half-Open 半开状态下允许通过的请求数量
连续成功次数 1 Half-Open → Closed 探测请求连续成功多少次后关闭熔断器

三态模型在分布式系统中的意义

  • Closed 状态:提供正常服务,同时通过滑动窗口实时监控健康度,是系统的“常态”。
  • Open 状态:快速失败,保护下游不被持续重试压垮,同时为上游提供明确的降级信号。
  • Half-Open 状态:实现自动恢复探测,避免人工介入,是系统自愈能力的关键。
实践建议:在生产环境中,建议为熔断器配置独立的监控指标(如熔断器状态变化次数、Open 状态持续时间),并与告警系统联动。当熔断器频繁在 Open 与 Half-Open 之间震荡时,说明下游可能存在间歇性故障,需要人工排查。