這個案例的核心責任是給 retry 敘事一個必要的反向平衡:retry 不是純反派、circuit breaker 是它的閘門。

觀察

Slack 官方 postmortem(2021-01-04 事故):誘因是假期後第一個上班日「client caches are cold and clients pull down more data than usual on their first connection」、AWS Transit Gateway 未及時擴容而過載、造成「widespread packet loss」。雪上加霜:CPU 利用率下降「initially triggered some automated downscaling」(最需要容量時反而縮容);緊急擴容撞到 Linux open files limit 與 AWS quota。復原關鍵句:「This — plus retries and circuit breaking — got us back to serving」、加上 load balancer 的 panic mode;AWS 手動加 TGW 容量後 10:40am 恢復正常。

判讀

retry 的雙面性:底層網路恢復後、正是 retry 加 circuit breaking 讓系統爬回服務狀態。circuit breaker 是 retry 的閘門 —— 斷路時擋住無效重試保護 provider、半開時用少量探測請求驗證恢復、恢復後 retry 才轉為復原工具。責任判讀:consumer 的 retry 是否有害、取決於 provider 當下處於「過載中」還是「恢復中」—— 而 consumer 無法直接觀測這件事、所以需要 circuit breaker 這種本地推斷機制代替猜測。

對應大綱

11.11 接收方重試決策章「circuit breaker 作為 retry 閘門」段、「retry 的雙面性」收束。

下一步路由

模組十一案例庫

引用源

二手來源與狀態標注

事故主因是網路層(TGW)而非 API 契約層 —— 引用定位為「retry / circuit breaker 在復原期的角色」、不包裝成 API retry 風暴主案例(主案例是 C70)。