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