它必須解決的問題
Netflix 的串流服務跑在 AWS 上,而在那裡執行個體故障司空見慣,停機更曾重創整個產業;工程團隊不願坐等意外上門,決定主動給自己製造意外。
構想
刻意破壞正式環境:Chaos Monkey 隨機關閉線上的 AWS 執行個體,迫使工程師打造出即使個別執行個體消失、客戶也察覺不到的服務。
運作方式
這個小工具會從每個叢集中隨機挑選一個執行個體,並在工作日的工作時間內無預警將其關閉,同時讓工程師在旁觀察服務如何反應。Netflix 於 2012 年 7 月將 Chaos Monkey 開源,隨後又加入 Janitor Monkey 與 Security Monkey,組成「Simian Army」;其明訂原則是:「對抗重大意外故障的最佳防禦,就是經常失敗。」
它帶來的成果
Chaos Monkey 迫使 Netflix 的架構必須能容忍執行個體流失而不影響客戶,並讓故障演練成為日常;這套開源工具獲得 TechCrunch 與 Wired 報導,Stack Exchange 的 Jeff Atwood 也將自家停機問題的解決歸功於同樣的構想,而這套做法後來發展成混沌工程這門學科。
背景
Netflix 的串流服務跑在 AWS 上,而在雲端,執行個體會故障——主機掛掉、網路瞬斷、負載平衡器出錯。工程團隊不願等到停機才暴露弱點,於是打造了 Chaos Monkey:這套軟體會在工作時間隨機停用正式環境的執行個體,並由工程師在旁觀察。
這個名字源自「在你的資料中心放出一隻拿著武器的野猴子,隨機擊落執行個體、咬斷纜線——而我們仍能不中斷地繼續服務客戶」。重點不在工具本身,而在心態的轉變:如果你的系統必須挺過每天隨機的攻擊,你就會建立自動復原機制,而不是祈禱什麼都別壞。
2012 年 7 月,Netflix 將 Chaos Monkey 開源,這個構想隨之擴散。TechCrunch 與 Wired 的報導讓「經常失敗」成為知名的工程格言;Stack Exchange 的 Jeff Atwood 表示,他的團隊是在「Chaos Monkey 選上他們」之後才解決了停機問題。這套做法後來被正式化為混沌工程——在正式系統上進行實驗,以建立系統能承受動盪環境的信心。
為何奏效
在工作時間進行隨機、無人值守的故障,把罕見而可怕的停機,轉變成工程師隨時待命的例行演練。
經常失敗會逼出自動復原機制,於是凌晨三點的故障不再是危機。
開源讓這個構想得以延續——其他公司紛紛採用,最終成為一門學科。
這個名字讓概念令人難忘,這也是這套做法能如此迅速傳播的原因。
你可以學到什麼
別等到無法預測的停機才行動:在白天、有工程師在場時製造小型故障,讓系統——以及團隊——在凌晨三點的災難教訓他們之前,先學會韌性。
後續發展
Netflix 持續擴展這個構想:Latency Monkey、Doctor Monkey、針對整個可用區的 Chaos Kong,以及後來的 Chaos Automation Platform,並於 2015 年成立專責的混沌工程團隊。最初的 Simian Army 儲存庫已於 2021 年退役,改由獨立工具取代,但這套做法早已超越 Netflix——混沌工程成為一門產業學科,有專書、研討會、商業工具,以及 Capital One 等採用者。
追溯依據
參考來源
- Netflix/SimianArmy — Tools for keeping your cloud operating in top form Netflix (GitHub) · github.com
- Netflix Open Sources Chaos Monkey — A Tool Designed To Cause Failure So You Can Make A Stronger Cloud TechCrunch · beta.techcrunch.com ·
- Netflix Abuses Amazon With Monkeys. Now You Can Too Wired · wired.com ·
- What is Chaos Monkey? Chaos engineering explained InfoWorld · infoworld.com ·