1. 熔断器概述
1.1 熔断器模式的定义
熔断器(Circuit Breaker)是一种源自电气工程的故障保护模式,在分布式系统中用于防止级联故障。其核心思想是:当对下游服务的调用持续失败达到阈值时,快速切断调用链路,避免资源被无效等待耗尽,并在适当时候尝试恢复。
核心定义:熔断器是一个状态机,在 关闭(Closed)、打开(Open)、半开(Half-Open) 三个状态间转换,通过监控失败率自动决策是否放行请求。
1.2 在微服务架构中的重要性
微服务架构中,服务间依赖链复杂,单个服务故障极易扩散。熔断器是防止级联故障的第一道防线,其重要性体现在以下方面:
| 维度 | 无熔断器时的风险 | 有熔断器时的保护 |
|---|---|---|
| 资源耗尽 | 线程池/连接池被慢调用占满,导致服务整体不可用 | 快速失败释放资源,保障服务自身稳定性 |
| 级联故障 | 故障沿调用链向上游传播,引发雪崩 | 切断故障链路,隔离影响范围 |
| 用户体验 | 客户端长时间等待超时,请求堆积 | 快速返回降级响应,保持系统可交互 |
| 运维成本 | 故障定位困难,需要人工介入恢复 | 自动状态转换,减少人工干预 |
SRE 视角:熔断器是服务等级目标(SLO)的守护者。当下游错误预算即将耗尽时,熔断器主动拒绝请求,避免错误预算超支,为恢复争取时间。
1.3 与重试/限流的区别
熔断器、重试、限流是分布式系统容错的三个核心手段,但它们的关注点和作用机制不同。以下从多个维度进行对比:
| 对比维度 | 熔断器 | 重试 | 限流 |
|---|---|---|---|
| 核心目标 | 防止级联故障,保护调用方 | 补偿临时性失败,提高成功率 | 控制请求速率,保护被调方 |
| 触发条件 | 失败率超过阈值 | 特定异常类型(如超时、网络抖动) | 请求速率超过预设配额 |
| 动作 | 切断调用链路,返回降级响应 | 重新发送请求(可能带退避) | 拒绝或排队超出配额的请求 |
| 状态持久性 | 有状态(Closed/Open/Half-Open) | 无状态(每次独立判断) | 有状态(令牌桶/漏桶计数器) |
| 恢复机制 | 超时后试探恢复 | 重试成功即恢复 | 速率降低后自动恢复 |
| 典型场景 | 下游服务宕机、慢查询、连接池满 | 网络闪断、临时超时、主从切换 | 突发流量、爬虫攻击、热点 Key |
常见误区:熔断器与重试不能简单叠加使用。在熔断器打开期间执行重试,会加剧资源消耗并延迟恢复。正确做法是:熔断器打开时直接降级,熔断器关闭时按策略重试。
三者在实际系统中通常组合使用,形成完整的容错体系:
- 限流 在最外层,防止流量洪峰冲垮服务。
- 熔断器 在中间层,防止下游故障向上游扩散。
- 重试 在最内层,补偿偶发的临时性失败。
关键原则:熔断器关注的是 调用结果的质量(失败率),限流关注的是 调用量的多少(速率),重试关注的是 调用过程的可靠性(补偿)。三者各司其职,不可相互替代。