标准答案

  1. 指数退避让第 N 次重试的等待时间逐渐增加,避免客户端在服务刚恢复前高频重复请求。
  2. 随机抖动在退避时间上加入随机性,防止大量请求因为相同算法和相同失败时刻而形成整齐的重试波峰。
  3. 重试次数、最大等待、总 deadline 和最大并发都要限制;超过预算后应快速失败、降级或转入异步补偿。
  4. 只对明确的瞬时失败重试,例如短暂连接失败、部分 5xx 或可重试的限流响应;业务错误和非幂等写入不能盲目重试。
  5. 服务端应通过错误率、重试次数、请求放大倍数和恢复时间观察策略是否真正降低了故障压力。

题目解析

没有抖动的指数退避仍可能形成“惊群”:大量客户端在 1 秒、2 秒、4 秒后同时醒来,继续压垮刚恢复的依赖。

重试策略要由调用方和被调用方协同。服务端返回 Retry-After、429 或可重试错误类别,客户端才能做出更准确的等待。

常见误区

  • 每次失败都立刻重试,甚至无限循环。
  • 对所有状态码使用同一套重试策略。
  • 只加随机等待,却没有次数和总时间预算。

作者信息