Netflix正在搞的混沌工程到底是什么?终于有人讲明白了
導讀:與任何新概念一樣,混沌工程時常被誤解。本文會探討混沌工程是什么以及不是什么。
作者:Casey Rosenthal, Nora Jones
來源:大數據DT(ID:hzdashuju)
在Netflix的混沌工程實踐之初,大家實際上并不明確這門學科究竟是什么。關于如何讓服務更可靠存在著許多誤解。比如那時經常聽到這樣一些口號——拔掉電纜、在生產環境搞破壞或在生產環境進行測試。另外,也幾乎不存在混沌工程實際工具的例子。
Netflix成立混沌工程團隊就是要創建一門有意義的學科。該學科能夠借助工具主動提高可靠性。我們花了幾個月的時間研究韌性工程和其他學科,并提出混沌工程的定義和藍圖以造福他人。
混沌工程的定義已經以宣言的形式上線,稱為“混沌工程原則”。
https://principlesofchaos.org
01 混沌工程是什么
混沌工程原則定義了混沌工程學科,以便大家了解何時該進行、該如何進行以及該如何做好混沌工程。如今,混沌工程的通用定義是“促進發現系統弱點的實驗”。混沌工程原則的網站概述了如下實驗步驟:
首先定義“穩態”(steady state,穩定狀態),以表示系統正常行為的某些可測量的輸出。
建立如下假說—對照組和實驗組都將持續這種穩態。
引入反映真實事件的變量,例如崩潰的服務器、發生故障的硬盤驅動器、斷開的網絡連接等。
試圖通過在對照組和實驗組之間尋找穩態差異來推翻這一假說。
該實驗構成了混沌工程的基本原則,并為實驗的實施提供了很大的自由度。
1. 實驗與測試
在Netflix,我們發現首先必須要做出的澄清是,混沌工程是一種實驗而非測試。可以說,“質量保證”涵蓋了兩者,但該詞在軟件行業通常具有負面含義。
最初,Netflix的某些團隊會問混沌工程團隊:“難道你們就不能編寫一堆集成測試來發現同樣的問題嗎?”從理論上講,這種觀點是務實的。但實際上,不可能從集成測試中獲得理想的結果。
嚴格來說,測試不會創造新知識。測試要求編寫測試的工程師知道要驗證的系統的特定屬性。復雜系統對于這種類型的分析是不透明的。對于復雜系統中各個部件所有的潛在相互作用所帶來的所有潛在副作用,人類根本就無法理解。這使我們得出了測試的下述關鍵特性。
測試會根據現有知識做出一個斷言,然后執行測試,并給出該斷言的結果(通常為真或假)。測試是關于系統已知屬性的聲明。
另一方面,實驗創造了新知識。實驗提出了一個假說,只要假說不被推翻,對該假說的信心就會增強。而如果假說被推翻了,那就會學到一些新東西。這就能啟動一個調查,以弄清楚假說為什么是錯的。
在復雜系統中所發生的事情的原因通常都不會是顯而易見的。實驗可以建立信心,也可以讓我們學到系統的新屬性。這是對未知的探索。
因為測試需要有人提前提出斷言,所以僅憑測試是無法取得通過實驗而收獲的洞察的。實驗引入了一種發現新屬性的正規方法。而當發現了系統的新屬性后,完全可以將其轉換為測試。
實驗還有助于將有關系統的新設想編碼為新的假說,從而創建類似“回歸實驗”的實踐,以便隨著時間的推移而對系統做進一步探索。
由于混沌工程誕生于應對復雜系統問題,因此該學科必須體現實驗性而非測試性。
2. 驗證與清查
在運維管理和物流規劃領域,驗證(verification)和清查(validation)的定義是不同的。而混沌工程更偏重于驗證。
驗證
復雜系統的驗證是在系統邊界分析輸出的過程。比如房主可以通過測試水槽(系統邊界)中的污染物,來驗證水(輸出)的質量,而無須了解管道或市政供水系統(系統部件)的功能。
清查
復雜系統的清查是分析系統的各個部件并建立反映部件之間的相互作用的思維模型的過程。房主可以通過檢查所有管道和基礎設施(系統部件)來清查水質。這些管道和基礎設施會采集、清潔和輸送水(功能部件的思維模型),并將水輸送到居民區中的千家萬戶。
這兩種做法都是有用的,并且都可以建立對系統輸出的信心。作為軟件工程師,我們經常會偏向于強迫自己去深入研究代碼,并驗證代碼是否反映了我們關于代碼應如何工作的思維模型。與這種偏好相反,混沌工程極力主張進行驗證而不是清查。混沌工程所關心的是某事是否有效,而不是如何工作。
請注意,在上面有關管道的隱喻中,雖然可以清查用于提供清潔飲用水的所有組件,但由于某些未曾想到的原因,最終水龍頭里流出來的仍是被污染的水。在復雜系統中總是存在不可預測的交互。但是,如果驗證水龍頭流出的水是干凈的,那么就不必操心水是如何來的。
在大多數業務案例中,比起考慮系統的實現是否符合我們的思維模型,系統的輸出要重要得多。混沌工程更關心業務和輸出,而不是正在互動的各個部件的實現或思維模型。
02 混沌工程不是什么
有兩個概念經常和混沌工程混淆——在生產環境中搞破壞和反脆弱。
1. 在生產環境中搞破壞
在博客文章或會議演講中,人們時常會將混沌工程描述為“在生產環境中搞破壞”。對于能從混沌工程中獲益良多的大型企業以及其他復雜系統的運營者來說,盡管這句話聽起來很酷,但對他們并沒有吸引力。
有關混沌工程的一個更好的說法是:修復生產環境中的漏洞。?“搞破壞”很容易,但完成下述事情很難:減小爆炸半徑,對安全性進行批判性思考,確定漏洞是否值得修復,決定是否應該進行實驗,等等。
“搞破壞”可以用無數的方式來完成,且花費的時間也很少。但更大的問題是,在不知道系統部件已被破壞的情況下,該如何推測出哪些部件已經被破壞?
“修復生產環境中的漏洞”能更好地體現混沌工程的價值,因為整個混沌工程實踐的重點是主動提高復雜系統的可用性和安全性。現在已經有很多對事故做出應急反應的學科和工具,比如告警工具、事故響應管理、可觀測性工具、災難恢復計劃等。其目的是當事故發生后能縮短檢測時間和修復時間。
有人可能會說,SRE(Site Reliability Engineering,網站可靠性工程)是一門兼具被動性和主動性的學科,可以通過從過去的事故中獲得知識,并將知識進行社交化來防止將來發生類似的事故。而混沌工程是軟件行業中唯一專注于主動提高復雜系統安全性的學科。
2. 反脆弱
熟悉納西姆·塔勒布(Nassim Taleb)所提出的反脆弱性概念的人,經常會認為混沌工程本質上是反脆弱的軟件版。塔勒布認為,諸如“低劑量毒物興奮效應”之類的詞,已不足以表達復雜系統的適應能力。因此他發明了“反脆弱”一詞,指系統當受到隨機壓力時能變得更強的特性。
混沌工程和反脆弱之間一個重要的關鍵區別是混沌工程能教育系統維護人員,讓他們認識到混沌為系統所固有,從而使他們成為一支更具韌性的團隊。而相比之下,反脆弱卻給系統加入混沌,并希望系統在響應混沌時能變得更強大,而不是屈服于混沌。
作為框架,反脆弱的觀點與學術界所研究的韌性工程、人因學和安全系統都不一致。例如對于提高系統健壯性而言,反脆弱建議的第一步是尋找并消除弱點。這項建議看似直觀,但韌性工程告訴我們,對于安全性而言,尋找做對的地方要比尋找做錯的地方提供的信息要多得多。
反脆弱的下一步是添加冗余。這似乎也很直觀,但是添加冗余既可以緩解故障,也可以導致故障。在有關韌性工程的文獻中有眾多冗余所導致的安全性故障案例。
這兩種思想流派之間還存在許多其他分歧。韌性工程是一個有著數十年歷史,并正不斷發展的研究領域。而反脆弱則游離于學術界之外,且缺乏同行評審。因為兩者都是要應對混沌和復雜系統,所以很容易就產生兩者可以融合在一起的感覺。
但反脆弱實際上并不具備混沌工程所擁有的經驗主義和理論基礎。由此,兩者在根本追求上就已分道揚鑣。
關于作者:Casey Rosenthal,Verica公司的首席執行官兼聯合創始人。他曾是Netflix公司混沌工程團隊的工程經理,在使用分布式系統、人工智能以及將新穎的算法和學術界知識轉化為能落地的模型方面擁有豐富的經驗。
Nora Jones,Jeli公司的首席執行官兼聯合創始人。她是一位敬業且充滿自驅力的技術領導者和軟件工程師,對分布式系統中人與軟件的協同工作充滿熱情。她在2017年AWS re:Invent大會的主題演講中為混沌工程運動的發起做出了貢獻。
本文摘編自《混沌工程:復雜系統韌性實現之道》,經出版方授權發布。
延伸閱讀《混沌工程:復雜系統韌性實現之道》
點擊上圖了解及購買
轉載請聯系微信:DoctorData
推薦語:混沌工程開創者撰寫,通過谷歌、微軟等行業專家的真實故事,系統闡釋混沌工程的核心實踐,提供實踐建議。
劃重點????
干貨直達????
終于有人把用戶畫像的流程、方法講明白了
終于有人把數據安全講明白了
35歲的程序員,真的要轉管理嗎?
數據中臺、標簽、數據資產相關的15個名詞解釋
更多精彩????
在公眾號對話框輸入以下關鍵詞
查看更多優質內容!
PPT?|?讀書?|?書單?|?硬核?|?干貨?|?講明白?|?神操作
大數據?|?云計算?|?數據庫?|?Python?|?爬蟲?|?可視化
AI?|?人工智能?|?機器學習?|?深度學習?|?NLP
5G?|?中臺?|?用戶畫像?|?1024?|?數學?|?算法?|?數字孿生
據統計,99%的大咖都關注了這個公眾號
????
總結
以上是生活随笔為你收集整理的Netflix正在搞的混沌工程到底是什么?终于有人讲明白了的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python高能小技巧:不要在for与w
- 下一篇: 终于有人把SaaS讲明白了