云原生弹性设计

云原生弹性设计模式:Timeout、Retry、Idempotency、Circuit Breaker、Rate Limit、Backpressure、Graceful Degradation。

#type / concept #status / growing #tech / ops

[!info] related notes

云原生弹性设计

一句话定义

云原生应用要默认接受一个事实:任何东西都会失败。 弹性设计就是在故障发生时,系统能继续提供核心能力,而不是整体崩溃。


为什么需要弹性设计?

服务会挂、网络会抖、数据库会慢、模型 API 会超时、消息会重复、Pod 会被重启、节点会下线、用户会刷新页面、SSE 会断开。

对 AI Agent 应用尤其重要:LLM 调用慢、贵、不稳定,而且工具调用链路很长。


七种弹性模式

1. Timeout(超时)

定义: 所有远程调用都必须设置最大等待时间。不设超时 = 一个慢服务拖死整个系统。

实践:

  • HTTP 调用:连接超时 5s,读取超时 30s
  • LLM 调用:根据模型和任务复杂度设 30-120s
  • 数据库查询:设合理的 statement_timeout
  • SSE 连接:设最大连接时长

2. Retry(重试)

定义: 短暂失败可以重试,但必须控制次数和退避策略。

实践:

  • 最大重试 3 次
  • 指数退避(exponential backoff):1s → 2s → 4s
  • 加随机抖动(jitter),避免雷群效应
  • 只对可重试的错误重试(5xx、超时),不对 4xx 重试
  • 重试必须配合幂等设计

3. Idempotency(幂等)

定义: 重复请求不能导致重复扣费、重复创建任务、重复写脏数据。

实践:

  • 请求携带唯一 idempotency_key
  • 服务端先查 key 是否已处理
  • 数据库用唯一约束防重复
  • AI Agent 的 Run 用 run_id 做幂等

4. Circuit Breaker(熔断)

定义: 某个依赖持续失败时,暂时停止调用,避免拖垮整个系统。

三状态:

  • Closed(正常):正常放行请求
  • Open(熔断):直接返回降级结果,不调用下游
  • Half-Open(半开):放少量请求试探,成功则恢复,失败则继续熔断

适用场景: LLM API 持续超时、数据库连接池耗尽、第三方服务不可用。

5. Rate Limit(限流)

定义: 防止单个用户或异常流量打爆服务。

策略:

  • 令牌桶(Token Bucket):允许突发流量
  • 漏桶(Leaky Bucket):平滑流量
  • 滑动窗口(Sliding Window):精确控制时间窗口内的请求数

AI Agent 场景: 限制单用户 LLM 调用频率、限制并发 Run 数量。

6. Backpressure(背压)

定义: 下游处理不过来时,上游要减速或排队。

实践:

  • 消息队列满时,生产者阻塞或丢弃
  • SSE 推送速度超过消费者处理速度时,缓冲或丢弃
  • LLM 流式输出时,控制背压避免内存暴涨

7. Graceful Degradation(优雅降级)

定义: 核心功能优先,非核心功能可以临时关闭。

AI Agent 降级策略:

  • LLM 不可用 → 使用缓存的回复或预设话术
  • RAG 检索失败 → 跳过知识增强,直接用 LLM 回答
  • 图片 OCR 失败 → 提示用户手动输入
  • 非核心工具调用失败 → 跳过该工具,继续流程

AI Agent 弹性设计要点

环节风险弹性手段
LLM 调用超时、限流、返回错误超时 + 重试 + 熔断 + 降级
工具调用执行失败、返回异常幂等 + 重试 + 跳过
SSE 流式连接断开断线恢复 + 事件重放
向量检索超时、无结果超时 + 降级到关键词检索
任务队列消费慢、积压背压 + 限流 + 扩容

相关 MOC

创建于 2026/7/4 更新于 2026/7/15