Skip to content

Exponential Backoff

指數退避

01你是不是遇到這個 / THE SYMPTOM

我的 API 偶爾會失敗(網路抖動、對方伺服器忙、被限速 429),我想自動重試。但如果失敗了就馬上一直重試、瘋狂連打,反而把對方打得更死。我想讓「重試的間隔越來越長」,第一次等 1 秒、再來 2 秒、4 秒…不知道這招叫什麼。

↑ 如果你點頭了,你要的關鍵字就是 Exponential Backoff

02這是什麼 / DEFINITION

Exponential Backoff(指數退避)是一種重試策略:每次失敗後等待的時間以倍數成長(1s → 2s → 4s → 8s…),通常再加一點隨機抖動(jitter),避免一失敗就猛烈重試、也避免大量客戶端同時重試把伺服器打垮。

03什麼時候用 / WHEN TO USE

呼叫第三方 API、遇到 429(被限速)/ 5xx(伺服器暫時錯誤)、上傳重試、連線斷線重連、訊息佇列消費失敗——任何「失敗可能是暫時的、值得重試、但不能猛打」的場景。

04怎麼跟 AI 說 / HOW TO ASK

直接複製這句、貼進 Claude Code / Cursor / Copilot / ChatGPT:

幫我給這個 API 呼叫加上帶 exponential backoff 的重試機制:失敗後等 1 秒重試,每次間隔加倍並加上隨機 jitter,最多重試 5 次,遇到 4xx(除了 429)就直接放棄不重試。
05常見坑 / WATCH OUT

別對「不該重試的錯誤」重試——像 400 參數錯、401 沒授權、404 找不到,重試幾次都一樣,只會浪費資源;通常只對 429 和 5xx 退避重試。另外一定要設「最大重試次數」和「總時間上限」,否則會無限退避卡住。搭配 idempotency 一起用才安全,避免重試造成重複操作。

06相關的詞 / RELATED