API 重试与退避策略(指数退避、抖动、幂等键与错误分类)
概述
合理的重试可提升成功率,但不当重试会导致雪崩。本文给出参数化退避与幂等保障。
关键实践与参数
- 重试条件:
- 网络错误、超时、
5xx、429;避免对业务性4xx重试。 - 指数退避:
base=100ms、factor=2、max=5 重试;加入随机抖动±20%。- 幂等键:
- 在请求头/体传递
Idempotency-Key,服务端以窗口(如 24h)去重。 - 上限与超时:
- 设定单次请求超时(如 3s)与整体预算(如 10s)。
示例(伪代码)
retry:
attempts: 5
base_ms: 100
factor: 2
jitter_ratio: 0.2
retry_on: [5xx, 429, timeout, network]
idempotency:
key_header: Idempotency-Key
window_hours: 24
验证方法
- 压测模拟限流与间歇性故障,观察重试分布与成功率。
- 日志标记幂等键命中;统计重复提交与窗口命中率。
- 监控尾延迟与错误比重,评估退避参数对稳定性的影响。
注意事项
- 与网关限流协同;避免同步重试形成尖峰。
- 对非幂等操作必须要求幂等键;或通过锁/队列序列化。
- 客户端与服务端需要一致的超时与预算管理。

发表评论 取消回复