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