在雲時代,隨著大規模分布式系統和微服務架構技術的演進,你對你的系統健壯性還有多少信心?
沒人能全盤掌握這種分布式系統的複雜結構,也沒人能獲知系統所有的弱點。還有乙個現實我們必須清楚地認識到——網路狀態是複雜的,使用者行為是不可**的,許多事件也是不可預見的。當你的元件崩潰、降級或者失常,系統遇到惡意或者小白使用者,而你卻在睡夢中,那可真是災難。
系統故障無法避免,可災難恢復又貴又嬌弱,還只在必要的地方部署,如果我們能在問題發生之前,或者在沒有對使用者造成傷害之前,主動發現它並解決它,這可能嗎?
當然可能,為什麼不試試混沌工程呢?
想象一下,你的系統裡有乙隻猴子在四處亂竄,你無法抓住它,更無法控制它的行為,你不知道它什麼時候會搞掛你的系統。焦慮,無比焦慮。
如果這只猴子,就是你自己放進去的呢?你知道,它的目的就是搞掛你的系統,感覺是不是又不一樣了?刺激,真的刺激。
這只猴子名叫chaos monkey。
作為業界微服務和devops組織的楷模,netflix有大規模生產級微服務的成功實踐。他們大膽提出反脆弱架構的理念,以攻為守,組建混世猴子軍團,在工作日期間隨機虐殺生產例項,逼迫相關研發人員做好高可用。而隨著系統日益完善,chaos monkey的實力和攻擊範圍也在不斷提公升。酸爽,過於酸爽。
但是,在猴子軍團的蹂躪之下,整個netflix的服務穩定性不斷前進。所以說,為什麼netflix這麼牛?人家對自己夠狠。
言歸正傳,隨著chaos monkey的出現,一門新學科誕生了:混沌工程。
混沌工程,被描述為「在分布式系統上進行實驗的學科,目的是建立對系統承受生產環境中湍流條件能力的信心。」今天,包括谷歌、亞馬遜、ibm、阿里巴巴在內的許多公司都採用某種形式的混沌工程來提高現代架構的可靠性。
或許我們可以把混沌工程比作打疫苗,用以毒攻毒的辦法來提高系統的免疫力,比如有目的性地向系統注入故障,找出潛在的弱點。
有一些朋友覺得,這不就是故障注入和故障測試嗎?確實,三者在關注點和工具中都有很大的重疊。
混沌工程和其他方法之間的主要區別在於,混沌工程是一種生成新資訊的實踐,而故障注入是測試一種情況的一種特定方法。對於分布式系統來說,單元測試、整合測試或效能測試是遠遠不夠的,我們無法保證系統能夠應對生產環境所的各種不可**事件。我們遇到的問題,可能只是系統隱患的冰山一角。而混沌工程給予了一種方法,來模擬不可預知的故障,這就是我們需要的。所以,為了具體地解決分布式系統在規模上的不確定性,可以把混沌工程看作是為了揭示系統弱點而進行的實驗。
混沌工程屬於一門新興的技術學科,行業認知和實踐積累比較少,大多數it團隊對它的理解還沒有上公升到乙個領域概念。阿里電商域在2023年左右開始嘗試故障注入測試的工作,開始的目標是想解決微服務架構帶來的強弱依賴問題。後來經過多個階段的改進,最終演進到 monkeyking(線上故障演練平台)。從發展軌跡來看,阿里的技術演進和netflix的技術演進基本是同時間線的,每個階段方案的誕生都有其獨特的時代背景和業務難點,也可以看到當時技術的侷限性和突破。
參考 | 《阿里巴巴在混沌工程領域的實踐和思考》/阿里巴巴高階技術專家周洋(中亭)
網路環境如此複雜,故障的隨機性也相應增加,這些故障或將給企業造成巨大損失,給使用者帶來糟糕的體驗,甚至讓他們陷入麻煩之中。混沌工程通過有意識地「糟蹋」系統,將故障扼殺在襁褓裡,以達到提公升系統健壯性的目的。
所以,混沌工程不僅是一種新興的技術學科,更是一種服務態度,一種憂患意識。
為幫助開發團隊加深對混沌工程的理解,汲取業內先驅實踐經驗,qcon北京2019精心策劃了「混沌工程」專題,特邀阿里巴巴高階技術專家周洋(中亭)作為出品人,為各位開發人員策劃了一場饕餮盛宴。
本專題將聚焦在以下幾個方向:
在系統裡放乙隻「猴子」,阿里瘋了嗎?
在雲時代,隨著大規模分布式系統和微服務架構技術的演進,你對你的系統健壯性還有多少信心?n沒人能全盤掌握這種分布式系統的複雜結構,也沒人能獲知系統所有的弱點。還有乙個現實我們必須清楚地認識到 網路狀態是複雜的,使用者行為是不可 的,許多事件也是不可預見的。當你的元件崩潰 降級或者失常,系統遇到惡意或者...
在系統裡放乙隻「猴子」,阿里瘋了嗎?
在雲時代,隨著大規模分布式系統和微服務架構技術的演進,你對你的系統健壯性還有多少信心?沒人能全盤掌握這種分布式系統的複雜結構,也沒人能獲知系統所有的弱點。還有乙個現實我們必須清楚地認識到 網路狀態是複雜的,使用者行為是不可 的,許多事件也是不可預見的。當你的元件崩潰 降級或者失常,系統遇到惡意或者小...
在系統裡放乙隻「猴子」,阿里瘋了嗎?
在雲時代,隨著大規模分布式系統和微服務架構技術的演進,你對你的系統健壯性還有多少信心?沒人能全盤掌握這種分布式系統的複雜結構,也沒人能獲知系統所有的弱點。還有乙個現實我們必須清楚地認識到 網路狀態是複雜的,使用者行為是不可 的,許多事件也是不可預見的。當你的元件崩潰 降級或者失常,系統遇到惡意或者小...