他們的問法
不是「怎麼讓機器不要壞」,而是:
兩種問法導向的行動完全不同:
| 常見問法 | 他們的問法 | |
|---|---|---|
| 問題 | 怎麼讓電腦不要壞? | 壞掉時怎麼讓使用者感覺不到? |
| 力氣花在 | 硬體、合約、災難手冊 | 讓服務之間不要互相牽連 |
| 怎麼算成功 | 壞了幾次 | 壞的時候有沒有人被影響 |
| 改變的對象 | 機器(改不了) | 自己的架構(改得了) |
他們的分類
租來的機器會壞
一台壞了,會拖垮全部
放左邊的理由:要改變它,唯一辦法是自己蓋回全球規模的機房 ─ 代價大到不合理,而且本業不是蓋機房。
他們的動作
2011 年,工程師 Greg Orzell 提出一個叫 Chaos Monkey 的程式。它做的事只有一件:
而且是上班時間關。
三個看似瘋狂的設計,各有理由:
只在測試環境殺主機,你證明的只是測試環境有韌性。
半夜壞掉沒人在,痛感被拖延;白天壞掉,工程師立刻痛。而痛必須即時,否則「把系統改得更耐壞」永遠會被排在新功能後面。
可預測的演練會被準備。知道下週二要演練,你會先偷偷把系統調好。
而是讓「做不好」這件事馬上會痛。
驗收拆成三關,規模由小到大
先在小規模證明可以安全模擬、建立信心,才敢做更大的演練。
點子從哪來:類比
主動施加小劑量、可控的壓力來建立抵抗力(所以從殺一台開始,不是一上來就關整個地區)。
不等火災才知道逃生動線有問題,而且有效的演習不會事先公布時間。
名字本身就是一個類比。
但是 ─ 2012 年 12 月 24 日,聖誕夜
工具建好了,三個層級的演練也都在跑了。然後:
供應商那邊負責「把客人的連線分配到各台電腦」的系統出了問題。從下午 12:30 左右開始,影響持續擴大。
他們自己的電腦全都好好的、正常運轉。
但沒有任何客人能連進來。
- 美、加、拉美的電視連網裝置看不到服務
- 遊戲主機等裝置受影響約 7 小時,當晚 10:30 才大致恢復
- 他們的架構本來設計成能承受「單一地區內部分或全部機房故障」 ─ 跨三個機房運行,掉兩個仍能運作
- 關鍵細節:英國、愛爾蘭與北歐完全沒事,因為那些地區跑在不同的系統上
這是執行問題,還是問題定義問題?
是定義問題。他們那張「改不了 / 改得動」的分類表,漏掉了一格:「整個地區的入口一起出事」從來不在驗收範圍裡。
他們怎麼回應
他們沒有花力氣讓供應商不要再出包 ─ 那是限制條件。他們回到第一步,重新問一次:
新解法:把服務同時開在好幾個地區、平常就都在跑;一個地區出事,流量整批搬走。而且真的做了一次大規模切換測試:
零遺失
比對討論
補充:後來模仿的人大多失敗了
Chaos Monkey 2012 年開源,被大量模仿。多數失敗的樣子是:
- ✓導入工具
- ✓排定每季演練
- ✓產出報告
- ✓把「每季 N 次演練」寫進 KPI
- ✕系統韌性沒有提升
兩層原因:
這份參考路徑的完整敘事、資料來源與更多脈絡,都在長文版。