← [ BACK_TO_NOTES ]

Circuit Breaker

解释下游持续失败时为什么要暂时停止真实调用,以及 Closed、Open、Half-Open 状态如何限制故障扩散并探测恢复。

#concept #growing #backend #reliability

[!info] related notes

Circuit Breaker

[!abstract] 一句话定义 Circuit Breaker 在下游持续失败或变慢时暂时停止真实调用,直接快速失败或降级,并在冷却后用少量探测请求判断是否恢复,避免调用方不断浪费资源并放大故障。

为什么 Retry 不够

Downstream unavailable
→ every request waits timeout
→ every request retries 3 times
→ traffic and resource use multiply
→ downstream recovery becomes harder

Circuit Breaker 的目的不是修复依赖,而是减少无意义调用和级联占用。

三个经典状态

Closed
→ normal calls pass
→ failures exceed threshold

Open
→ fail fast / fallback
→ after cooldown

Half-Open
→ allow limited probes
→ enough success: Closed
→ failure: Open again

实际实现可能使用滑动窗口、错误率、慢调用率、最小样本数和不同探测策略,但核心状态机一致。

什么错误应计入

通常计入:

  • 网络连接失败;
  • Timeout;
  • 5xx;
  • 依赖明确过载;
  • 超过慢调用阈值。

通常不应计入:

  • 当前用户输入非法;
  • 业务规则拒绝;
  • 认证/授权失败;
  • Client 主动取消;
  • 与依赖健康无关的本地 Bug。

分类错误会让一个健康下游因为大量 400 被错误熔断。429 也要区分单租户额度耗尽与共享 Provider 过载;前者不能直接触发所有租户的全局熔断。

Circuit Breaker 保护谁

它首先保护调用方的线程、连接和延迟预算,同时减少对故障下游的压力。它不保证:

  • 数据不会丢;
  • 副作用幂等;
  • 所有实例共享同一状态;
  • 下游真正恢复;
  • Fallback 输出满足质量要求。

因此仍需 Timeout、Bulkhead、Idempotency、Observability 和 Fallback。

Breaker 粒度

可按:

  • Provider / Host;
  • Endpoint / Capability;
  • Region;
  • Tenant;
  • Model;
  • Tool。

粒度太粗会让一个小故障关闭全部能力;太细则样本不足且状态复杂。应围绕共同故障域划分。

Half-Open 的风险

如果所有实例同时到期并大量探测,会产生恢复风暴。可采用:

  • 随机化冷却时间;
  • 限量 Probe;
  • 分布式状态或每实例错峰;
  • 逐步提升流量;
  • 与健康信号和 Canary 结合。

Agent / Model 场景

Provider 429 / timeout rate high
→ open breaker for that provider-capability
→ route compatible traffic to fallback
→ probe after cooldown
→ close only after success threshold

认证失败通常是配置错误,不应不断探测;模型输出质量下降也不应只靠 HTTP Breaker 判断,而要接 Eval / Quality Gate。Half-Open 探测若会产生写入或工具副作用,仍需授权与幂等约束,不能为了探活重复执行用户操作。

观测重点

state transitions
failure and slow-call rate
open duration
rejected calls
half-open probes
fallback rate
per-dependency latency and errors

设计检查表

  • 失败分类与最小样本量明确。
  • 慢调用和错误率阈值来自 SLO / 容量,而不是随意数字。
  • Open 时的错误/降级对调用方可理解。
  • Half-Open Probe 有严格上限并避免同步恢复风暴。
  • Breaker 与 Timeout、Bulkhead、Retry 顺序明确。
  • 状态转换和 Fallback 使用率可观测。
创建于 2026/9/4 更新于 2026/10/7
Digital Biome
Access

键盘导航

j / k / ↑ / ↓
选择对象
Enter / o
打开选择
/ 或 Ctrl+K
全站搜索
i / f / 1–4
筛选当前列表
g → h / l / p / t / a
首页 / 笔记 / 项目 / 工具 / About
r → 1–9
打开所选对象的关联
u
返回上一页
Esc
关闭浮层 / 取消命令;输入框内清空文本