← [ BACK_TO_NOTES ]

云原生弹性设计

把 Timeout、Retry、Backoff、Idempotency、Circuit Breaker、Bulkhead、Rate Limit、Backpressure 与 Fallback 放在同一条故障控制链中理解。

#synthesis #growing #ops #reliability

[!info] related notes

云原生弹性设计

[!abstract] 核心结论 弹性设计默认网络、节点和依赖都会失败,通过 Timeout、Cancellation、Retry、Idempotency、Circuit Breaker、Bulkhead、Rate Limit、Backpressure、Fallback 和生命周期管理,把故障限制在可接受范围内。

模式必须按故障链组合

请求进入:认证/授权、入口容量与总 Deadline
→ 每次尝试前:检查剩余预算、Breaker 和资源配额
→ 执行:副作用具备幂等边界,传播 Timeout / Cancellation
→ 返回后:分类结果;未知副作用先确认状态
→ 可安全重试:Backoff + Jitter,重新经过尝试前检查
→ 无法重试:选择获准且兼容的 Fallback 或明确失败
→ 全程观测;必要时恢复与核对状态

这是职责时序示意,不是固定 middleware 嵌套顺序。具体组合还需说明重试期间是否占用并发槽位、Breaker 统计每次尝试还是最终结果,以及排队等待是否计入 Deadline。

模式职责

模式主要问题常见误区
Timeout等待无限增长超时后底层工作仍继续
Cancellation停止无用工作、释放资源只在最外层取消
Retry瞬时故障对 4xx、业务拒绝也重试
Backoff + Jitter重试风暴和同步恢复所有客户端固定间隔重试
Idempotency重复执行副作用只在前端防重复点击
Circuit Breaker持续故障拖垮调用方把所有错误都计入熔断
Bulkhead单一依赖耗尽共享资源所有依赖共用同一线程/连接池
Rate Limit限制入口负载当成下游背压
BackpressureConsumer 处理不过来使用无界队列“先接再说”
Fallback保留最低可用能力静默输出低质量或错误结果

三个最重要的组合

Timeout + Cancellation

Timeout 判断“超过预算”,Cancellation 传递停止请求;是否真正停止仍取决于下游是否支持并响应取消。无法终止的工作需要隔离与状态核对,不能把停止等待等同于副作用已回滚。

Retry + Idempotency

request succeeds
→ response lost
→ client retries

这是正常网络故障窗口。写操作必须用 Idempotency Key、唯一约束或状态机让重复请求安全。

Circuit Breaker + Bulkhead

Circuit Breaker 减少对持续故障依赖的调用;Bulkhead 防止该依赖耗尽所有线程、连接、队列或并发槽位。一个控制请求,一个控制资源故障域。

Rate Limit 与 Backpressure

Rate Limit
→ 决定多少新请求可以进入

Backpressure
→ 下游处理不过来时,限制在途、排队、拒绝或降速

两者常同时存在,但信号来源和治理对象不同。

Fallback 必须保留契约

错误示例:RAG 失败后直接让模型自由回答,却仍把结果标记为“基于专业证据”。

更稳妥:

retrieval failed
→ clearly mark evidence unavailable
→ restrict answer scope
→ ask user / defer / escalate

Fallback 需要独立 Eval 和可观测标记。

Health Check 与 Graceful Shutdown

Liveness  → 进程是否需要重启
Readiness → 是否应该继续接新流量
Business Health → 核心依赖/能力是否满足服务条件

关闭时先撤销 Readiness、停止接收新任务,再按协议排空或取消在途工作。只有处理结果达到持久化承诺后才能 ACK;未完成任务应保留恢复或重投路径。随后关闭连接,并设置硬 Deadline,记录强制退出后可能未知的副作用。

Liveness 不宜因共享下游短暂故障就失败,否则可能引发集体重启;Readiness 是否依赖某项外部能力,应按该实例仍能服务的请求范围决定。

Agent 场景

故障弹性策略
Model 429 / 5xxRetry Budget、Backoff、Provider Fallback
Tool 超时Deadline、Cancellation、幂等与状态确认
SSE 断线Event ID、Resume / Replay、明确失败状态
RAG 无结果Abstain、Ask User、受限 Fallback
Run 积压Concurrency Quota、Queue、Backpressure
Checkpoint 失败Fail Closed、Recovery / Reconciliation

常见反模式

  • 每一层都各自重试三次,形成 Retry Amplification;
  • 无界 Queue 隐藏过载,直到内存耗尽;
  • Fallback 后不记录使用了哪个模型/能力;
  • Health Check 只返回进程存活;
  • Shutdown 立即杀进程,留下未 ACK 消息和半完成副作用;
  • 只测正常路径,不做故障注入和恢复验证。

设计检查表

  • 端到端 Deadline 可传播并被下游尊重。
  • Error Classification、Retry Budget 和 Jitter 明确。
  • 所有可重试副作用具备幂等边界。
  • 线程池、连接池、队列和 Agent 并发有隔离与上限。
  • Fallback 的能力、质量和用户提示明确。
  • Readiness、Liveness、Shutdown 和恢复经过测试。
  • Metrics / Trace 能证明策略确实生效。
创建于 2026/7/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
关闭浮层 / 取消命令;输入框内清空文本