1. 熔断器概述

1.1 熔断器模式的定义

熔断器(Circuit Breaker)是一种源自电气工程的故障保护模式,在分布式系统中用于防止级联故障。其核心思想是:当对下游服务的调用持续失败达到阈值时,快速切断调用链路,避免资源被无效等待耗尽,并在适当时候尝试恢复。

核心定义:熔断器是一个状态机,在 关闭(Closed)、打开(Open)、半开(Half-Open) 三个状态间转换,通过监控失败率自动决策是否放行请求。
熔断器三态转换模型 关闭(Closed) 正常调用,计数失败 打开(Open) 快速失败,拒绝请求 半开(Half-Open) 试探放行,验证恢复 失败率超阈值 超时窗口到期 试探成功 → 重置计数器 试探失败 → 回到打开 状态转换由滑动窗口失败计数、超时时间、试探请求数共同驱动

1.2 在微服务架构中的重要性

微服务架构中,服务间依赖链复杂,单个服务故障极易扩散。熔断器是防止级联故障的第一道防线,其重要性体现在以下方面:

维度 无熔断器时的风险 有熔断器时的保护
资源耗尽 线程池/连接池被慢调用占满,导致服务整体不可用 快速失败释放资源,保障服务自身稳定性
级联故障 故障沿调用链向上游传播,引发雪崩 切断故障链路,隔离影响范围
用户体验 客户端长时间等待超时,请求堆积 快速返回降级响应,保持系统可交互
运维成本 故障定位困难,需要人工介入恢复 自动状态转换,减少人工干预
SRE 视角:熔断器是服务等级目标(SLO)的守护者。当下游错误预算即将耗尽时,熔断器主动拒绝请求,避免错误预算超支,为恢复争取时间。

1.3 与重试/限流的区别

熔断器、重试、限流是分布式系统容错的三个核心手段,但它们的关注点和作用机制不同。以下从多个维度进行对比:

对比维度 熔断器 重试 限流
核心目标 防止级联故障,保护调用方 补偿临时性失败,提高成功率 控制请求速率,保护被调方
触发条件 失败率超过阈值 特定异常类型(如超时、网络抖动) 请求速率超过预设配额
动作 切断调用链路,返回降级响应 重新发送请求(可能带退避) 拒绝或排队超出配额的请求
状态持久性 有状态(Closed/Open/Half-Open) 无状态(每次独立判断) 有状态(令牌桶/漏桶计数器)
恢复机制 超时后试探恢复 重试成功即恢复 速率降低后自动恢复
典型场景 下游服务宕机、慢查询、连接池满 网络闪断、临时超时、主从切换 突发流量、爬虫攻击、热点 Key
常见误区:熔断器与重试不能简单叠加使用。在熔断器打开期间执行重试,会加剧资源消耗并延迟恢复。正确做法是:熔断器打开时直接降级,熔断器关闭时按策略重试。

三者在实际系统中通常组合使用,形成完整的容错体系:

  • 限流 在最外层,防止流量洪峰冲垮服务。
  • 熔断器 在中间层,防止下游故障向上游扩散。
  • 重试 在最内层,补偿偶发的临时性失败。
熔断器、重试、限流在调用链中的协作层次 客户端 限流层 熔断器层 重试层 下游服务 限流防冲垮 → 熔断防扩散 → 重试补偶发:三层协作构建完整容错体系
关键原则:熔断器关注的是 调用结果的质量(失败率),限流关注的是 调用量的多少(速率),重试关注的是 调用过程的可靠性(补偿)。三者各司其职,不可相互替代。