連鎖故障(Cascading Failures)

★★★★★Draft

FromSRE

📚 From the Books

連鎖故障(Cascading Failures)Reliability Patterns

連鎖故障不是「某個東西壞了」,而是因正向回饋而隨時間擴大的故障:一個 replica 過載失敗,剩下的 replica 負載增加、更可能失敗,一路骨牌下去。局部問題被系統自己的迴路放大成全站崩潰——重點不是單一元件,而是那條會自我餵食的迴圈。

🧠 Intuition

IMPORTANT

最典型的引信是伺服器過載:cluster B 掛掉後它的流量全湧向 cluster A,A 從 1,000 QPS 突然要扛 1,200 QPS → 資源耗盡 → 崩潰 → load balancer 再把流量送去別處 → 全服務級過載。放大迴圈一旦轉起來,就會自己把自己推深。

⚖️ Tradeoffs

硬撐所有請求 vs 讓部分讓步
  • 系統過載時必須有東西讓步。超過斷裂點後,硬撐每一個請求只會讓放大迴圈把整台拖垮。
  • 更好的選擇是讓部分使用者看到錯誤或較差品質:進入降級模式、丟非重要流量、關掉 batch 作業(索引更新、資料複製、統計蒐集),把資源留給撐得住的份量。
  • 代價:降級路徑平常不走就等於平常壞了沒人知道——要定期演練,並監控「進入降級的伺服器數量」。
穩態最佳化 vs 連鎖故障韌性
  • 許多「改善穩態」的改動——retry、shift load、kill unhealthy server、加一層 cache——反而會放大連鎖故障的風險。
  • 例如「容量快取」(空 cache 就扛不住預期負載)是危險的隱性依賴:一次 task restart 或叢集 turn-up 帶來冷快取,就可能點火。
  • 準則:評估每個變更時留意別「用一場故障換另一場故障」;穩態更漂亮,不代表過載時更安全。

🔑 Takeaways

✍️ My Notes

No notes yet — jot your takeaways or Q&A here.

📖 Further Reading

🔗 Dive Deeper