标准答案
- 指数退避让第 N 次重试的等待时间逐渐增加,避免客户端在服务刚恢复前高频重复请求。
- 随机抖动在退避时间上加入随机性,防止大量请求因为相同算法和相同失败时刻而形成整齐的重试波峰。
- 重试次数、最大等待、总 deadline 和最大并发都要限制;超过预算后应快速失败、降级或转入异步补偿。
- 只对明确的瞬时失败重试,例如短暂连接失败、部分 5xx 或可重试的限流响应;业务错误和非幂等写入不能盲目重试。
- 服务端应通过错误率、重试次数、请求放大倍数和恢复时间观察策略是否真正降低了故障压力。
题目解析
没有抖动的指数退避仍可能形成“惊群”:大量客户端在 1 秒、2 秒、4 秒后同时醒来,继续压垮刚恢复的依赖。
重试策略要由调用方和被调用方协同。服务端返回 Retry-After、429 或可重试错误类别,客户端才能做出更准确的等待。
常见误区
- 每次失败都立刻重试,甚至无限循环。
- 对所有状态码使用同一套重试策略。
- 只加随机等待,却没有次数和总时间预算。