重试与退避

对可重试的瞬时故障按延迟递增策略再次尝试;指数退避叠加随机抖动可避免同步重试风暴,必须配合超时、次数上限与幂等设计。

算法

算法
delay = min(cap, base * 2^attempt)
delay = random(0, delay)   # 抖动,避免同步重试

可重试:网络错误、超时、幂等写冲突;
不重试:参数错误、鉴权失败、业务规则拒绝。
层次叠加:客户端、网关、服务各层都重试时,放大倍数相乘,下游可能被重试流量压垮。

易错点

  • 重试无次数上限,故障恢复后又被重试流量击穿
  • 非幂等接口盲目重试,产生重复扣款或重复下单

数据来源与参考

  • AWS 架构博客:Timeouts, Retries, and Backoff with Jitter
  • Google SRE Book:Handling Overload
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌