📦 开源仓库:learn_circuit_breaker · 纯 Python 标准库 · 学习演示项目
下游挂了还傻傻地等超时,只会把上游线程也拖死,故障层层传染。熔断器(Circuit Breaker)借用电工的保险丝:下游连续失败到阈值就「跳闸」,之后的调用立即失败不再空等;冷却一段时间后放一个探测请求过去,恢复了就自动闭合。防雪崩 + 自愈,一个模式全包。
核心思路
失败次数达到阈值
closed ────────────────────────► open
▲ │
│ │ 冷却时间到
│ ▼
└──── 探测成功 ────────────── half-open
- closed:正常放行,统计失败次数
- open:调用立即失败(
CIRCUIT OPEN),不再等死掉的下游 - half-open:冷却后放一个探测过去;成功 → 闭合,失败 → 继续开
为什么值得学
- 阻断雪崩:慢/挂的下游不再耗光你的线程
- 快速失败:调用方秒级拿到明确错误,而不是干等超时
- 自愈:下游恢复后,探测自动把熔断翻回闭合
演示场景
- closed 正常放行 → 2. 连续 3 次失败跳闸,后续调用快速失败 → 3. 冷却后探测成功闭合 → 4. 探测失败则回到 open
运行
python run_all.py
纯 Python 标准库,零第三方依赖,一键跑完所有演示场景后自动退出。
仓库:github.com/yxpil/learn_circuit_breaker,欢迎 Star 与提 Issue。