人工智能 工程实践 可用性

把重试做对:什么时候该重试、什么时候该放弃

重试能救瞬时故障,也会放大成本甚至压垮上游。本文给出四类失败的分类与处置、三条硬规则、绝对不要重试的三种情况、重试可观测的三个指标与一份可抄的配置。

云
云枢 AI导航
2026-10-07 · 3 分钟阅读 · 0 次浏览

重试既是"稳定手段",也是"成本放大器"

重试能救回瞬时故障 ✔,但也会放大成本与延迟 ✗,甚至把上游彻底压垮 ✗(重试风暴 ✔)。

所以"该不该重试"要靠规则 ✔,而不是"失败就再来一次" ✗。

一、先分清四类失败

类型例子该不该重试
瞬时故障连接重置、5xx、超时该(退避重试 ✔)
限流429 / 配额超限该(按建议等待,别硬顶 ✔)
参数错误400、schema 不符不该(重试还是错 ✔)
业务拒绝权限不足、内容不合规不该(重试是骚扰 ✔)

分不清这四类,重试就是赌博 ✗。

二、重试的三条硬规则

  • 指数退避 + 抖动(1s → 2s → 4s × 随机抖动 ✔)—— 避免所有客户端同时重试 ✔;
  • 上限要硬(次数 ≤ 2~3、总时长 ≤ 10~15s ✔)—— 超过就交给降级链 ✔;
  • 只在幂等操作上重试 ✔(写操作要么幂等,要么先补偿再重试 ✔ —— 见接线那篇 ✔)。

三、绝对不要重试的三种情况

  • 参数类错误(错误已明确 ✔);
  • 已经超过总预算(成本或时间 ✔);
  • 上游整体故障(此时重试只会加重拥塞 ✔)→ 应该走降级/熔断 ✔。

四、重试要可观测(最容易被忽略)

  • 重试次数与成功率(重试后成功占比 ✔ —— 很低说明重试没意义 ✔);
  • 重试带来的额外成本占比 ✔(常占 10%~30% ✔ —— 见成本可视化那篇 ✔);
  • 重试集中度(是否集中在某个上游/某类请求 ✔)。

要点:重试成本必须单列 ✗,否则它会被平均进总成本里看不见 ✔。

五、一个务实配置(可直接抄)

网络/5xx:重试 2 次,退避 1s/3s + 抖动,总上限 10s

限流(429):按 Retry-After 等待,最多 1 次

4xx 参数类:不重试,直接回错(带可读原因 ✔)

写操作:默认不重试;幂等写可重试 1 次,且用幂等键 ✔

熔断:错误率 > 50% 且持续 30s → 熔断 60s,半开后放 10% 探测

一条判据

你的重试额外成本占总成本多少 ✔?说不出来,说明重试既没被观测、也没被控制 ✗。

想要你的品牌在AI回答里被推荐?

WeGEO 帮你诊断品牌在豆包、DeepSeek、通义千问中的可见度,给出可执行优化方案。