跳轉到

C.5 網站與服務營運失敗案例#

當軟體從「交付為止」變成「持續營運為止」,失敗的模式也跟著改變:問題往往不是程式「算錯一次」,而是整個服務在真實流量下崩潰、部署過程出錯、或幾行程式碼牽動全球依賴鏈。本節案例對應第 6 章(CI/CD、DevOps、監控)與第 12 章(協作流程):Healthcare.gov 的水瀑式災難、Knight Capital 的部署失誤、left-pad 的依賴鏈崩潰,以及 500 哩 Email 的有趣偵錯故事。

案例一:Healthcare.gov——水瀑式開發的國家級崩潰#

背景:2013 年,美國聯邦政府推出全民健保註冊網站 Healthcare.gov,預算數億美元、數十家承包商協作,目標引進數百萬人註冊。上線第一天系統幾乎全面癱瘓,前幾週註冊成功率不到 1%。

技術真相:

  • 巨型水瀑式流程:所有承包商各自開發,直到最後一刻才做全系統整合與壓力測試
  • 註冊牆:使用者先填極繁瑣的個資與驗證才能看方案,資料庫瞬間被沖爆
  • 溝通脫節:前端、後端、身分驗證由不同廠商承包,介面標準不一,出事互相推諉

救援:白宮緊急徵召 Google、Twitter 等矽谷頂尖工程師組成特攻隊,改採敏捷開發、重構核心 API、移除註冊牆,數個月內才救活網站。

啟示(連結本書):大型系統最晚到「最後一刻才第一次整合」是注定失敗的(見 12.1 節)。正確做法是 CI/CD 的持續整合、分階段壓力測試(見 5.3、6.1)與小步迭代交付。對照 AI 時代,這也提醒我們:不要把所有 Agent 的產出在最後一刻才拼在一起——整合與驗證必須早早開始(見 4.4、12 章)。

案例二:Knight Capital——一次部署失誤,4.6 億美元蒸發#

背景:2012 年 8 月,美國做市商 Knight Capital 的演算法交易軟體在開盤 45 分鐘內高買低賣執行數百萬筆錯單,暴虧 4.6 億美元,公司數日內瀕臨破產而被迫出售。

技術真相:

  • 部署不一致:團隊更新 8 台正式伺服器中的 7 台,漏了 1 台未更新
  • 死碼復活:新軟體沿用舊程式碼中的一個標記位(Flag)。市場開盤時,那台舊伺服器收到含該標記的訊息,觸發一段已棄用 8 年卻從未刪除的測試用死碼,進入無限下單迴圈

啟示(連結本書):部署的一致性與可重現性是現代維運的底線——必須用自動化與不可變部署(Immutable Infrastructure,見 6.2 節 IaC)取代人工作業,並定期清除死碼與舊邏輯(呼應 4.2 節重構)。更值得深思的是:「一人漏一台機器」的微小疏失,在沒有自動化黃金管線(Golden Path)的系統裡,可以大到擊垮整間公司。這正是 AI 時代需要把 Harness 化為自動管線的理由——把對的事交給程序,而不是交給偏偏會漏掉一台的記憶力。

案例三:left-pad——11 行程式碼崩潰整個網際網路生態#

背景:2016 年,由於一次 npm 命名爭議,作者 Azer Koçulu 一怒之下刪除了自己發布的所有套件,其中包含 left-pad——一個只有 11 行、功能是「在字串左側補空格」的極小模組。

連鎖反應:left-pad 被 React、Babel 等幾乎所有主流前端框架間接依賴。一夕之間,全球數以百萬計的建置與 CI/CD 流程崩潰,無數工程師無法編譯程式碼。

啟示(連結本書):微小依賴的過度使用,等同把整個供應鏈的安全外包給一顆螺絲(見 6.1、第 13 章)。現代解法包括:鎖定檔(lockfile)、私有套件快取、以及軟體物料清單(SBOM)。這在 AI 時代尤其關鍵——當 AI 自動為你「推薦並安裝」套件時,你(或你的 Harness)必須知道每一層依賴來自哪裡、更新由誰控制(見 13.2 節工具安全、B.5 節 MCP)。

案例四:500 哩以外的信永遠送不到?#

背景:一位大學教授抱怨:「只要收件者離我們超過 500 哩,Email 就送不出去;500 哩以內一切都正常。」系統管理員 Trey Harris 起初當這是都市傳說,實測後卻發現屬實。

技術真相:學校伺服器日前升級,mail 程式(Sendmail)回到預設的連線逾時設定值。光在光纖中傳播速度約為真空中光速的 2/3——計算下來,「訊號來回走 500 哩」正好等於該逾時值。超過 500 哩,封包在到達對方前就已超過逾時而被判定失敗,於是「距離超過 500 哩必寄不到」。

啟示(連結本書):最「玄學」的錯誤報告背後,往往是最硬的物理與系統底層邏輯(見 6.3 節觀測性、9.4 節糾正)。偵錯要像這個案例一樣:從假設推演到驗證,一步一步把「不可能」的現象,簡化成「一種剛好發生的可能」——這正是工程師橫向思考能力的體現。

想一想#

  1. Healthcare.gov 的失敗主因是「最後一刻才整合」。你認為在 AI 協作開發(4.4 節)裡,「太晚整合」的風險會因為 AI 加速而變大還是變小?為什麼?
  2. Knight Capital 告訴我們「部署一致性命關公司存亡」。試著回顧 6.2 節 IaC:如果那 8 台伺服器都是用程式碼定義、由管線自動部署,災難是否可能被避免?
  3. left-pad 讓我們正視供應鏈風險。想想你專案裡最常用到的第三方套件:一旦它被作者刪除或植入惡意碼,你的建置與產品會發生什麼?

本章小結#

網路服務時代的失敗,多半不是「單一 Bug」,而是「流程的漏洞在真實世界放大」:沒整合、漏部署、依賴失控、或是被忽略的底層參數。C.5 的四個故事共用一句話——服務品質的關鍵不在把程式寫好,而在把從開發到營運的整條管線設計得可重現、可驗證、可觀測(見第 6 章)。這個結論在 AI 加速交付的時代只會更重要,不會更不重要。