混沌和工程這兩個詞似乎并沒有聯系在一起過。在本文中,我們將探討它們為什么可以聯系在一起,并進一步討論這個工程規程在區塊鏈中的應用。這一部分的第2部分將著重于超級賬本Indy的混沌工程的具體實現。我們使用了一個在業界并不常見的縮寫——混沌實驗框架(chaos experimental framework, CEF)。在本文中,它作為一個簡短形式的使用純粹是為了方便。
這是一個由大規模分布式系統組成的微服務時代。Netflix, linkein, Medium, Amazon, Microsoft Azure, Uber, AirBnB等等。沒有一個人,甚至是整個團隊的架構師和程序員能夠希望將這種分布式系統的復雜架構牢記于心。甚至這樣一個系統的靜態配置也由運行在異構硬件或云上的多個服務組成,這些服務通過運行在許多邊緣設備上的具有多個sla和用戶界面(ui)的網絡進行連接。結合這種靜態復雜性,這種系統的實時行為引入了來自用戶的獨立輸入和驅動網絡系統組件進程的疊加。
組件可能會崩潰、降級或行為失常。惡意或不稱職的用戶無處不在?;煦绻こ陶窃谶@個時代發展起來的,最初是作為一種粗略的方法來測量這樣一個系統;通過實踐提煉成一種哲學和一種通過會議、工具和廣泛采用的被廣泛接受的方法。
你可能會說,比特幣和以太坊等不受許可的公共區塊鏈網絡存在于一個混亂的環境中。他們已經不知不覺地陷入混亂。節點連接網絡,惡意攻擊者不斷探查系統,網絡連接中斷。這種混亂和混沌工程是有區別的。混沌工程是一門利用實驗數據揭示系統缺陷的工程學科。
首先,我們介紹了混沌工程的一些基本歷史和原理,以及混沌工程在現有分布式系統中的應用。有一個用于混沌工程的開源存儲庫,稱為chaos toolkit。Chaos toolkit是開源的,使用一個用于表示實驗的開放API來推廣混沌工程交互。該工具包可以使用開放API進行擴展,Kubernetes、AWS、Azure等已經提供了一些驅動程序。它還可以用于在持續集成和構建中自動化混沌工程。
在本系列的第二篇文章中,我們將研究開放源碼的“混沌”工具包,并了解它是如何在Hyperledger Indy上用于這些實驗的。這將激勵人們密切關注他們自己的DLT平臺,并創建一個成熟的混亂實驗套件來強化他們自己的平臺。
縱觀歷史
自2008年Netflix開始將服務器從數據中心轉移到云端以來,他們的工程師一直在生產中進行某種形式的彈性測試。直到后來他們對它的研究才被稱為混沌工程。Chaos Monkey開始了這種實踐,以關閉生產環境中的服務而聞名?;煦缭硎惯@門學科形式化了。Netflix的Chaos自動化平臺24/7在其生產微服務架構上運行Chaos實驗。
對于那些對混沌工程作為一門學科感興趣的人來說,這里是一個精心整理的資源列表。O ‘Reilly發表了一篇關于混沌工程的優秀背景文章,可以免費獲得。因為O ’Reilly需要注冊才能下載鏈接,所以不提供鏈接。
混沌工程的實踐
為了在規模上解決分布式系統的弱點,混沌工程可以被看作是發現系統弱點實驗的創造和運行。這些表面上的弱點可以作為系統的限制加以解決??梢酝ㄟ^重復實驗來驗證這種弱點。
第一步是測量系統的穩態。這個系統通過它的輸出而為人所知。需要一個穩定的輕觸式監控系統來測量系統的穩態。輕觸意味著測量的行為不會顯著改變系統的行為。穩態的發現需要回答以下問題。
· 測量的是什么?系統變量(如cpu使用率、內存消耗)或業務變量(如響應時間和其他特定于應用程序的指標)。有時候度量標準涵蓋了這兩個方面。
· 穩態有時間相關的元素嗎?一天中不同時間或不同季節的使用和資源利用模式可能不同。
下面給出了設計實驗的指導,并建立了一個混沌工程框架(CEF)和一個運行在區塊鏈觀點下的過程。
· 一個已知的弱點不應該成為實驗的對象。如果一個1/3的攻擊破壞了共識(對于BFT),那么關閉一個致命的共識成員百分比就會產生已知的后果,并且無法從這類實驗中獲得洞見。在一些實驗中,數字可能會低于關鍵閾值。
· 對于區塊鏈,混沌工程實驗應該通過隨機組合的實驗,著眼于共識、網絡、存儲層以及身份、智能合約、治理、用戶交互等交叉元素。當我們在第二篇文章中討論Indy上現有的混沌實踐時,我們可以看到該實踐是如何應用的。隨機化實驗。了解穩態研究中資源利用和系統響應的周期,并密切關注實驗中應用的任何特殊情況。
· 當實驗揭示底層框架的弱點時,應該提供盡可能多的信息來隔離流程、api或系統行為的組合。這有助于修復系統,使其不會以同樣的方式失敗。
· 混沌工程不同于單元測試和集成測試。這與進行故障注入和故障測試也不一樣。CEF可以使用一些故障注入工具。故障注入和故障測試通常一次只針對一種故障模式。混沌工程旨在通過事件的隨機組合來揭示系統的新知識;包括良性或有益的場景,如客戶流量激增。除了常規的測試工具和實踐之外,還應該實現混沌工程實踐。
· 從開發和測試網絡的實驗開始,在通過修復未發現的問題來確保此類網絡的完整性之后,我們將逐步進行生產。只有在生產中才能觀察到小工序停產的非線性效應。
· 與整個團隊,尤其是devops工程師和開發團隊進行溝通和合作。強調混沌工程不是一種對抗性的情況;以及實驗是如何使整個系統變硬的。可以通過具體的示例討論開發活動的上層(包括體系結構、設計和工程實現)的優勢。此外,還需要與企業的業務端進行溝通。
· 從時間和實驗本身兩個方面使實驗隨機化。注意在穩態研究期間收獲的資源利用和系統響應的周期,同時要注意實驗期間適用的任何特殊情況。
· 自動化實驗的運行,包括快速關閉實驗的方法,特別是在生產環境中進行實驗時。當然,這意味著自動化監控,以及混沌框架和監控系統之間的某種形式的耦合。
· 避免半途而廢。實驗的結果不應該對生產造成很大的破壞。上面討論的各種步驟應該有助于實現這一點。人們可以把這個系統分成兩部分;一種不受實驗干擾的控制系統,一種處于混沌狀態的系統,也可以通過測量來觀察實驗的效果。這是混沌工程的高級實踐。
· 規模:在Netflix上,使用Chaos Monkey,只關閉單個進程或vm,逐步升級到Chaos Kong,關閉整個數據中心或區域。通過這種方式,他們可以看到整個地區的失敗的影響。
· 混亂成熟度模型;談到了混沌工程的各個成熟度級別。各種軸:開發系統到生產;實驗的多樣性和復雜性;混沌工程自動化水平研究團隊對實踐的熟悉程度是一個連續的過程;實驗的規模。DLT系統在每個軸上都處于不同的水平。成熟度模型有一些粗略和現成的名稱,這取決于系統在過程中的位置?;镜?,簡單的,復雜的,高級的等等。一個確定這一點的分類可以在前面引用的書中找到。
· 區塊鏈框架在公共區塊鏈或許可區塊鏈的多企業環境中最有效。在公共區塊鏈中,環境不受單一類型實體的控制。首要的挑戰是在多利益相關者的環境中創建、溝通和執行CEF。使用持續進修基金的好處應該非常清楚。如果CEF是在開發的初始階段建立的,這應該不會構成很大的挑戰,因為開發人員、業務用戶和操作人員對平臺的穩定性期望很低。然后,應允許持續進修基金與DLT框架的其他部分一起成長,并可成為生態系統的自然組成部分。有關持續進修基金實務的協議,應成為各方在獲批準的情況下就管理事宜進行的初步協議及討論的一部分。
· 對于公共區塊鏈,開發者社區的購買以及與其他參與者的清晰溝通是采用區塊鏈的必要條件;需要從建立良好的測試網絡到用于CEF部署的生產系統的路徑。這可能并不容易,因為公共區塊鏈的利益相關者和治理方面仍在不斷涌現和發展。存在危機,比如以太坊的DAO黑客事件,或者比特幣的規模之爭,都暴露了系統的脆弱性,并提出了一些特別的解決方案。一個良好的CEF和混沌成熟度模型的進展可能已經暴露了這些漏洞,并尋找更早開始的解決方案。在核心系統和邊緣系統中,還有許多其他的漏洞,一個發展良好的持續進修基金本可以針對這些漏洞。
· 在企業區塊鏈中,為了將CEF投入生產,聯邦測試網絡是必要的。大多數企業區塊鏈都是如此。
· 另一點是關于驅動CEF工程實踐的具體實現的知識。例如,在超分類結構中,背書策略指導共識的形成,因此在背書策略出現最少背書人之前刪除背書人可以揭示具體實施中的弱點。在Corda中,取出公證網絡的一部分,在部分網絡流量中引入延遲,干擾Corda防火墻等。
結論
回顧當前大規模分布式系統中的混沌工程實踐,揭示了混沌工程的潛力和作用。許多公司的采用,包括在飛機測試和醫院系統等在生產系統中進行實踐的領域,表明了它的實用性,甚至在敏感的應用程序中也是如此。
在區塊鏈框架中設計實驗需要結合框架中的專門知識、暴露于《綜合框架》背后的原則,以及組建一個在各個級別上開展工作的小組,以創建一種隨平臺發展的做法,從而增強對具體實施的信心,從而推動采用。
評論
查看更多