1. 熔断器基础概念

1.1 熔断器模式起源:从电路到软件

熔断器(Circuit Breaker)模式最早源于电气工程——当电路过载或短路时,保险丝熔断以切断电流,保护后端设备不被烧毁。2014 年,Michael Nygard 在《Release It!》中正式将这一思想引入分布式系统设计,用于解决微服务调用链中的级联故障问题。

核心类比:电气熔断器保护灯泡不被浪涌电流烧坏;软件熔断器保护下游服务不被上游的异常流量压垮。

在微服务架构中,服务间通过 RPC 或 HTTP 进行同步调用。当某个下游服务出现延迟或错误时,上游服务若持续重试,会迅速耗尽线程池和连接池,最终导致整个调用链雪崩。熔断器模式通过监控调用失败率,在达到阈值时自动“断开”请求通道,让上游快速失败而非阻塞等待。

1.2 核心三状态:Closed / Open / Half-Open

熔断器是一个有限状态机,包含三个核心状态。理解三状态的流转是校准熔断参数的前提。

状态 含义 行为 触发条件
Closed(关闭) 熔断器闭合,请求正常通过 正常转发请求,统计失败率 初始状态;失败率低于阈值时保持
Open(断开) 熔断器断开,请求被快速拒绝 直接返回降级响应或异常,不发起真实调用 失败率超过阈值(如 50%)
Half-Open(半开) 熔断器半开,试探下游是否恢复 允许少量探测请求通过,根据结果决定状态迁移 Open 状态持续超时时间后自动进入
状态流转规则:
  • Closed → Open:失败率 ≥ 阈值(如 50%)且请求量 ≥ 最小请求数(如 5)
  • Open → Half-Open:等待超时时间(如 10 秒)后自动进入
  • Half-Open → Closed:探测请求成功率达到阈值(如 100%)
  • Half-Open → Open:探测请求失败,立即回到 Open 并重置计时器
熔断器三状态流转图 Closed 请求正常通过 Open 请求快速失败 Half-Open 探测请求试探 失败率 ≥ 阈值 超时时间到 探测成功 探测失败 状态迁移由失败率阈值、最小请求数、超时时间三个参数共同驱动

1.3 熔断器在微服务中的价值

熔断器不是简单的“失败重试”,而是一种系统自我保护与依赖隔离的机制。在微服务拓扑中,一个服务通常依赖多个下游服务,熔断器在以下场景中发挥关键作用:

  • 防止级联故障(Cascading Failure):下游服务 A 故障 → 上游 B 线程阻塞 → B 的调用方 C 也阻塞,最终整个调用链崩溃。熔断器在 B 层切断请求,阻断故障传播。
  • 快速失败与降级:熔断器 Open 后,上游立即返回降级响应(如缓存数据、默认值、错误提示),避免用户长时间等待。
  • 自动恢复探测:Half-Open 状态允许系统在无人工干预的情况下,自动探测下游是否恢复,降低运维成本。
  • 资源隔离:熔断器通常配合线程池隔离或信号量隔离,为每个依赖分配独立资源池,避免一个依赖耗尽所有线程。
常见误区:熔断器不等于重试机制。重试用于临时网络抖动,熔断器用于持续故障。两者应配合使用:先熔断,熔断期间不重试;Half-Open 探测成功后再恢复重试策略。
熔断器在微服务调用链中的位置 上游服务 Service A 熔断器 Circuit Breaker 下游服务 Service B 请求 转发 降级响应(快速失败) 熔断器位于上游与下游之间,作为代理层监控调用健康状态 Closed 时转发请求;Open 时直接返回降级响应,不发起真实调用 Half-Open 时允许少量探测请求通过,验证下游是否恢复

1.4 熔断器 vs 重试 vs 限流

熔断器常与重试、限流配合使用,但三者职责不同。下表帮助区分:

机制 目标 触发条件 典型动作 适用场景
熔断器 防止级联故障 失败率超过阈值 断开请求,快速失败 下游持续故障或超时
重试 提高临时故障容错 请求失败(网络抖动) 间隔重试 1~3 次 瞬时错误、超时重试
限流 保护自身不被流量冲垮 QPS 超过阈值 拒绝或排队请求 流量突增、DoS 攻击
最佳实践:在微服务网关或 RPC 客户端侧,按以下顺序组合:限流 → 熔断 → 重试。先限流保护自身,再熔断保护下游,最后对允许通过的请求做有限重试。