Appearance
熔断器模式:状态、阈值与恢复验证
修订于 2026-10-12:原文的“双十一支付网关事故”和精确故障数据没有可核查材料,已删除。
熔断器在远程依赖持续失败时暂时阻止新调用,减少无效等待和额外负载。它不能修复下游故障,也不能代替超时、隔离和限流。是否采用要看故障模式与恢复要求。
三种状态
| 状态 | 行为 |
|---|---|
| 关闭 | 正常调用下游,同时在观察窗口内记录符合规则的失败。 |
| 打开 | 暂时拒绝调用,立即向上层返回明确错误或经过设计的降级结果。 |
| 半开 | 放行少量探测请求,根据结果决定恢复到关闭,或重新打开。 |
状态变化需要指定观察窗口、最小样本量、哪些结果算失败、打开时长和半开探测量。没有通用的“失败率达到 50% 就熔断”配置。样本量太少时,偶发错误可能触发不必要的打开;恢复探测过多则可能再次压垮下游。
与重试的关系
重试用于可能很快恢复的暂时错误;熔断器用于抑制持续失败的调用。两者可以组合,但重试逻辑必须识别熔断器已经打开,避免把“快速拒绝”当作可无限重试的错误。每一层都重试会放大流量,整体期限也应覆盖等待与尝试。
降级结果必须符合业务语义。订单状态、支付结果等不能随意返回“成功”或过期缓存;若无法保证正确性,应明确告诉调用方当前无法完成并提供查询或补偿路径。
上线前验证
- 用实际流量和故障记录确定失败分类、窗口和最小样本。
- 注入延迟、连接失败和部分失败,观察是否按预期进入各状态。
- 检查打开期间的错误响应、告警和用户界面,不要把故障隐藏成正常结果。
- 验证下游恢复后探测量受控,且最终能回到正常状态。
- 同时观察原始请求、被拒绝请求、重试量、延迟和下游负载。