指数退避(Exponential Backoff) 安全与工程
别名:
退避重试
面对 429 限流与 5xx 等可重试错误时的重试策略:重试间隔随尝试次数指数增长(100ms → 200ms → 400ms …),并加入随机抖动(jitter),防止多个客户端同步重试造成「重试风暴」。429 是「你太快了」,必须退避等待而不是立即重试。
它是什么
指数退避(Exponential Backoff)是面对 429 限流与 5xx 临时故障时的重试策略:重试间隔随尝试次数指数增长(100ms → 200ms → 400ms …),并加入随机抖动(jitter)防止多个客户端同步重试造成「重试风暴」。429 不是「失败」而是「你太快了」,必须退避等待而不是立即重试。
为什么指数 + 为什么 jitter
等得越来越久给服务端喘气的空间,比固定间隔更稳;而几十个客户端同时失败、同时重试、间隔还一样,会在同一刻一起打进来——等于人为制造一波新的 429,jitter 就是用来打破这种同步的。另外响应里的 Retry-After 头是服务端给的明确指示,优先尊重它。
与其它错误的区分
只有「改代码或配置修不好、等一等就能好」的错误(429 / 5xx)才重试;400 / 401 重试一万次也不会好。超时则是另一类失败,用 AbortSignal.timeout 兜底。第 02 章把失败分成三类讲;后续章节(如第 04 章)把超时与重试作为独立关注点,不堆进最小 Provider 接口。