止血、降級與回復策略的核心責任是讓事故處理有明確節奏:先停止擴散,再維持最小可用,最後回到可驗證穩態。

概念定位

止血、降級與回復是事故處理中不同時間尺度的三種策略。止血的責任是先把擴散停住,降級的責任是讓服務在功能變少的情況下仍能活著,回復的責任則是把系統帶回正常狀態。三者如果混在一起,現場就會失去優先序。

這個節點先處理 containment,再處理完整回復。先問現在應不應該砍功能、切流量、停寫入、關入口,然後再問何時恢復、恢復後怎麼驗證。這樣讀,才會知道事故處理是先讓局勢可控,一下子把所有東西修好的思路反而會失序。

大綱

  • containment priority
  • degradation path
  • rollback checkpoints
  • recovery validation

判讀訊號

  • 止血優先級跟回復優先級衝突、現場臨時做選擇
  • rollback checkpoint 沒測、按下去才知道掛了
  • degradation 路徑沒設計、事故時臨時砍功能
  • recovery 完成判讀無客觀標準、靠 incident command system 主觀宣告
  • containment 後驗證關閉缺步驟、同事故反覆再起

核心判讀

止血的責任是把擴散先停住。當事故正在擴大時,最重要的是先讓影響面停止擴張,恢復所有功能是後續階段的事。這可能意味著切流量、停寫入、暫時關閉某些入口,或把高風險功能降級。止血做得越早,後面的回復成本通常越低。

降級的責任是讓服務保持最小可用狀態。不是所有事故都能立即回復,有些事故需要先讓部分功能退場,再用 degraded mode 撐住核心路徑。回復的責任則是把系統帶回完整狀態,並在回來之後做驗證,確認事故沒有再起。

判讀止血策略時,先看擴散速度,再看回復可行性。當 error rate、impact scope 或依賴失效還在擴大,優先目標是停止擴散;當擴散停止且穩態訊號開始回線,才進入回復節奏。

階段決策問題最小門檻常見動作
Containment影響面還在擴大嗎error rate 不再上升、impact scope 不再擴張限流、停寫入、隔離 tenant、停入口
Degradation能否保住核心旅程核心成功率維持門檻、次要功能可暫停read-only、fallback、load shedding
Recovery是否可逐步回到完整服務依賴穩定、資料一致性可驗證、回復步驟可重播分批恢復、回放驗證、解除降級
Validation是否可宣告恢復與關閉事故steady state 回線、關鍵指標連續達標宣告恢復、進入 post-incident review

止血決策的重點不是「修好」,而是「先不要更壞」。回復決策的重點不是「盡快全開」,而是「按可驗證順序回線」。

案例對照

AWS S3 和 Cloudflare 很適合看止血,因為這兩類事故最容易出現配置推送後的快速擴散,必須先切開傳播路徑。GitHub 與 Azure AD 適合看回復順序,因為 replication 與 identity 問題都會讓回復比止血慢得多。Slack、Discord 與 Datadog 則適合看降級,因為通訊平台和觀測平台在事故中都可能需要先維持部分能力,再逐步恢復完整服務。

Atlassian、Roblox 與 Heroku 也能提供不同視角。Atlassian 告訴我們多租戶誤刪後,降級與恢復要和客戶通訊一起走;Roblox 告訴我們 prolonged recovery 需要長尾驗證;Heroku 告訴我們入口路由出問題時,先止血比硬修單一應用更重要。這些案例放在一起,會讓 containment 成為一條具體的操作路線,而不是抽象口號。

回復步驟

步驟目的常見驗證
stop the bleed先讓影響面停止擴散流量下降、錯誤率不再上升
degrade safely保住核心功能,放掉非必要功能核心路徑可用、次要功能關閉
recover service把服務帶回正常功能恢復、依賴穩定、指標回穩
validate again確認事故沒有反覆重放失敗情境、觀察是否再起

這些步驟的價值在於順序。事故處理常見的錯誤,是把 recover service 當成第一步,結果在局勢還沒穩定前就把風險重新打開。

案例回扣

Cloudflare 2019 的教訓是規則推送錯誤會在秒級擴散,containment 必須先切傳播路徑,再處理規則內容。AWS S3 2017 的教訓是共享子系統恢復有順序,對外通訊要清楚分開「哪些操作已恢復、哪些仍在回復中」。

這兩個案例都指向同一件事:回復順序與驗證門檻必須早於「全面恢復」承諾,否則會產生二次失信與反覆事故。

常見反模式

反模式表面現象修正方向
止血與回復同時全開還在擴散就開始大規模回復先完成 containment,再進 recovery
回復無分批一次全開導致次生異常用 staged recovery + checkpoint
宣告恢復靠主觀感覺指標短暫回穩就關閉事故以 6.22 steady state 的連續門檻判斷
通訊與狀態不同步對外說已恢復,內部仍在手動修復對外更新必須引用 8.19 decision log
只修功能不修流程下次遇到同型事故仍無路由回寫 8.22 evidence write-back

交接路由