當所有能出錯的事情同時出錯#
Joel 在這篇文章中記錄了一段特別悲慘的經歷——在短短一週之內,幾乎所有能出問題的東西都出了問題。伺服器當機、硬體故障、連鎖反應接踵而至。這不是理論探討,而是一個真實的災難紀錄。
連鎖崩潰的過程#
墨菲定律(Murphy’s Law)說的是「任何可能出錯的事情,最終都會出錯」。但這一週的經歷讓 Joel 意識到,現實比墨菲定律更殘酷:
- 伺服器崩潰:最先出問題的是伺服器。在最不方便的時間點、以最不方便的方式壞掉
- 硬體接連故障:一個硬體出問題之後,連帶影響了其他系統,引發了一連串的故障
- 備份不完整:發現備份系統沒有正確運作,或者備份的資料不如預期中完整
- 恢復過程比想像中困難:即使有備份,從災難中恢復也比計畫中耗費更多時間和精力
問題從來不會單獨出現。一個故障往往會暴露出系統中其他你從未注意到的弱點,導致問題像滾雪球一樣越來越大。
從災難中學到的教訓#
冗餘是必要的,不是奢侈的#
- 單點故障(Single Point of Failure)是定時炸彈。不是「會不會」出問題,而是「什麼時候」出問題
- 關鍵系統需要備援方案,而且備援方案需要經常測試,確認它真的能用
備份必須被驗證#
- 光有備份程序是不夠的。你必須定期測試恢復流程
- 一個從未被測試過的備份,等於沒有備份
- 備份恢復的速度和完整性同樣重要——如果恢復需要三天,那在這三天裡你的業務就是停擺的
災難復原計畫要事先準備#
- 當災難真的發生時,你不會有時間從零開始規劃恢復流程
- 事先寫好 disaster recovery plan,並確保團隊中不只一個人知道怎麼執行
- 考慮最壞的情況:如果同時失去兩個以上的系統,你的計畫還能運作嗎?
防禦性基礎設施的實務清單
從 Joel 的經歷中歸納出的實務建議:
- 所有關鍵資料至少有兩份備份,其中一份在不同的物理位置
- 定期(至少每季一次)做一次完整的備份恢復演練
- 監控系統必須在問題發生時主動通知,而不是等人手動檢查才發現
- 重要系統的硬體要有備品,不要等壞了才去採購
- 記錄所有系統的設定和架構,確保不是只有一個人知道怎麼維護
- 在壓力最小的時段做維護和更新,而不是拖到不得不做的時候
在一切正常運作的時候,投資在冗餘和備份上感覺像是浪費錢。但當災難發生時,你會發現之前每一分投資在防禦性基礎設施上的錢,都是你做過的最好的決定。
核心訊息#
這篇文章的核心訊息很簡單但很重要:
- 不要問「災難會不會發生」,要問「災難發生時我準備好了沒有」
- 防禦性基礎設施的價值在平時看不出來,但它的缺失會在最關鍵的時刻讓你付出慘痛的代價
- 每一次災難都是一次學習的機會——前提是你要在事後認真檢討並改善