歡迎光臨
每天分享高質量文章

架構師口中的混沌工程,究竟用來解決什麼問題

導讀:混沌工程,翻譯自國外的 Chaos Engineering,在 Netflix 以及最近的一些技術大會得到了廣泛關註,本文介紹了混沌工程的一些基本原理。

Netflix不僅是一家互聯網視頻平臺, 它也提出了一系列混沌工程的基本原則。

混沌工程這個詞可能聽起來不是那麼清晰,但它實際上是一種提高技術架構彈性能力的複雜技術手段。

這篇文章旨在解釋混沌工程是什麼以及它是如何使用的。 我們先簡單瞭解混沌工程的歷史。

擁抱”混沌”

為了支持支持日益複雜的業務,Netflix 一直都發力基礎設施。現在Netflix擁有分佈在190多個國家的1億用戶。早期公司的服務器運行在自己機房,但這會造成單點故障和其他問題。在2008年8月,資料庫的問題導致了三天宕機,在此期間在Netflix無法看任何視頻。Netflix工程師在2011年將服務遷移到Amazon Web Services。

這種由數百個微服務組成的新型分佈式架構消除了單點故障。但它也引入了新的複雜性問題,需要更加可靠和容錯性更強的系統。正是在這一點上,Netflix的工程團隊學到了重要的教訓:通過不斷失敗避免失敗。

“混沌”新用法

為此,Netflix工程師創建了Chaos Monkey,使用該工具可以在整個系統中在隨機位置引發故障。正如GitHub上的工具維護者所說,“Chaos Monkey會隨機終止在生產環境中運行的虛擬機實體和容器。”通過Chaos Monkey,工程師可以快速瞭解他們正在構建的服務是否健壯,是否可以彈性擴容,是否可以處理計劃外的故障。

隨著Chaos Monkey的出現,一門新學科誕生了:混沌工程,被描述為“在分佈式系統上進行實驗的學科,目的是建立對系統承受生產環境中湍流條件能力的信心。”。

2012年,Netflix開源了Chaos Monkey。今天,許多公司(包括谷歌,亞馬遜,IBM,耐克等),都採用某種形式的混沌工程來提高現代架構的可靠性。 Netflix甚至將其混沌工程工具集擴展到包括整個“Simian Army(中文可以譯為猿軍)”,用它攻擊自己的系統。

混沌工程:不是那麼混亂

混沌工程創業公司Gremlin的首席執行官Kolton Andrus曾在Google和Netflix工作過,他建議將混沌工程視為流感疫苗。 Andrus說,故意將有害物質註入體內以防止未來疾病,這似乎很瘋狂,但這種方法也適用於分佈式雲系統。混沌工程會將故障註入系統以測試系統對其的響應。這使公司能夠為宕機做準備,併在宕機發生之前將其影響降至最低。

將混沌工程視為實際混亂是一種誤解。事實上,大量測試是非隨機的。相反,混沌工程會在實施前進行深入思考,組織有計劃和受控制的實驗,旨在揭示系統在失敗時的表現。 

“在我去年與客戶進行的所有混亂工程實驗中,一般只有很少的隨機測試,”歐洲混沌ChaosIQ.io的創始人兼首席執行官Russ Miles在接受採訪時說。 “他們中的大多數都非常謹慎。它實際上與隨機性無關,除非隨機性是你想要測試的東西。“

儘量減少雷區

Amalgam Insights的研究員Tom Petrocelli在接受採訪時說,混沌工程最佳實踐的關鍵是“儘量減少雷區。 這意味著最大限度地減少對業務的影響。“

“是的,你想發現技術上的漏洞,”Petrocelli說,“但不想損害業務運營。”

為了確保不會破壞業務,Petrocelli建議工程團隊“精心策劃”混亂工程。

Petrocelli說,確保你有合適的團隊來解決任何可能的故障是至關重要的。 “如果所有的Kubernetes工程師都不在場,請不要把Kubernetes容器全部宕機,”他警告說。

不只是測試,也是生成知識的實驗

Netflix混沌團隊前工程經理Casey Rosenthal在DZone Q&A中明確指出,混沌工程不僅僅是測試系統的一種方法。另一方面,也是一種產生新知識的正確方法。正是因為現代軟體系統往往太複雜,任何人都無法完全理解它們,所以工程師會進行實驗以揭示有關係統的更多信息。Rosenthal在問答環節中表示,傳統測試仍然至關重要,但混沌工程應該是傳統測試的補充。

混沌工程以實驗發現系統性弱點。這些實驗通常遵循四個步驟:

1.定義並測量系統的“穩定狀態”。首先精確定義指標,表明您的系統按照應有的方式運行。 Netflix使用客戶點擊視頻流設備上播放按鈕的速率作為指標,稱為“每秒流量”。請註意,這更像是商業指標而非技術指標;事實上,在混沌工程中,業務指標通常比技術指標更有用,因為它們更適合衡量用戶體驗或運營。

2.創建假設。與任何實驗一樣,您需要一個假設來進行測試。因為你試圖破壞系統正常運行時的穩定狀態,你的假設將是這樣的,“當我們做X時,這個系統的穩定狀態應該沒有變化。”為什麼用這種方式表達?如果你的期望是你的動作會破壞系統的穩定狀態,那麼你會做的第一件事會是修複問題。混沌工程應該包括真正的實驗,涉及真正的未知數。

DevOps解決方案策略師、New Relic SRE Beth Long認為:“混沌工程不適用於那些可預測的、被運行手冊改寫的、你知道必須自動化但還沒有開始的事件。”“你需要它來處理由複雜性本身產生的各種因素。因為不知道該怎麼介入,所以每個人覺得老虎吃天,無從下爪。”

3.模擬現實世界中可能發生的事情。在《混沌工程:通過實驗建立對系統行為的信心》一書中,Netflix架構師,Casey Rosenthal,Lorin Hochstein,Aaron Blohowiak,Nora Jones和Ali Basiri,提出了許多混沌工程實踐方法:

  • 模擬資料中心的故障
  • 強制系統時鐘不同步
  • 在驅動程式代碼中模擬I/O異常
  • 模擬服務之間的延遲
  • 隨機引發函式拋異常

通常,您希望模擬可能導致系統不可用或導致其性能降低的場景。首先考慮可能出現什麼問題,然後進行模擬。一定要優先考慮潛在的錯誤。 “當你擁有非常複雜的系統時,很容易引起出乎意料的下游效應,這是混沌工程尋找的結果之一,”Petrocelli說。 “因此,系統越複雜,越重要,它就越有可能成為混沌工程的候選物件。”

4.證明或反駁你的假設。將穩態指標與干擾註入系統後收集的指標進行比較。如果您發現測量結果存在差異,那麼您的混沌工程實驗已經成功 – 您現在可以繼續加固系統,以便現實世界中的類似事件不會導致大問題。或者,如果您發現穩定狀態可以保持,那麼你對該系統的穩定性大可放心。

不要破壞你的系統 – 瞭解它並改進它

Miles認為:“混沌工程本身並不是要破壞系統。它從來就不是破壞系統的工具,而是學習系統的路徑。” “你正試圖將團隊引入學習迴圈,總結經驗是最好地吸取信息的方式。”

你當然可以從實際問題中學習經驗,但這非常痛苦。 “混沌工程讓你有機會把問題提前,並將一切置於你的掌控之中。”

混沌工程也可以利用對系統最為瞭解的工程師。根據Long的說法,“更有趣的混沌工程實驗不應該基於重要並且明顯的假設,例如’如果這個機架出現故障,該服務延遲會增大但仍然可用’,而應是基於對系統深入理解後作出的假設。混沌工程的實施過程有助於將專家直覺轉化為明確的,可測試的假設,暴露出有價值的信息,這些信息不僅僅是以局外人的角度來看待系統本身“。

這個網頁上https://github.com/dastergon/awesome-chaos-engineering列出了許多混沌工程工具包可供選擇。 

 

原文地址:https://blog.newrelic.com/engineering/chaos-engineering-explained/

本文作者Fredric Paul,由方圓翻譯。轉載本文請註明出處,歡迎更多小伙伴加入翻譯及投稿文章的行列,詳情請戳公眾號選單「聯繫我們」。GIAC全球互聯網架構大會深圳站將於2019年6月舉行,屆時將有混沌工程專題深入探討相關話題,敬請期待。

赞(0)

分享創造快樂