批量任务 50 并发,一半请求 429。

我的退避写的是固定 1 秒重试,结果重试的请求又把上游打满,雪崩。

正确的退避:

  1. 指数退避:1s、2s、4s、8s
  2. 加随机抖动,避免所有请求同时重试
  3. 有上限,比如最多 5 次
  4. 优先看 Retry-After 头,上游说等多久就等多久

另外:并发数本身要控制。50 并发对很多上游都太高,10-20 更安全。

改完之后 429 降到 2% 以下,整体完成时间反而短了。

教训:越快不代表越早完成,撞墙重试最慢。

主楼