什么是混沌工程?用一句簡單的話來解釋,就是使用科學方法,用做有對照組的實驗,來實證復雜的分布式軟件系統,能夠在生產環境抵御來自現實世界不可預知的各種狀況。
混沌工程在官網(PRINCIPLES OF CHAOS ENGINEERING)的正式定義,是一門對軟件系統進行實驗的學科,目的是建立對系統承受生產環境中動蕩條件的能力的信心。
根據InfoQ最近3年推出的DevOps和云技術趨勢鴻溝曲線顯示,在國外,混沌工程實踐已經在2022年跨過早期采納者和早期大眾之間的鴻溝,進入業界主流。因為國內業界對于創新工程實踐的采納相對滯后,估計混沌工程在國內應該有3~5年左右就能跨過鴻溝,進入主流。
混沌工程在Thoughtworks公司的技術雷達上的位置,也能從側面印證這一點。
技術雷達可視化了該公司以企業定制化軟件開發見長的開發人員所遠離和青睞的各種最新的軟件開發技術和過程。雷達從外到內,分為4個環。最外的暫緩環中的技術,是開發人員所遠離的。之后從外到內依次是評估環、試點環和采納環。越往圓心的環中的技術,開發人員越青睞。
混沌工程在2017年首次進入技術雷達,就進入了試點環。此后的兩年,就一直停留在這個環。與混沌工程相關的安全混沌工程,2018年首次進入技術雷達,是在評估環。同年晚些時候,又移動到了試點環。
技術雷達的評估環,可以對應鴻溝曲線的創新者(Innovators)區間;試點環對應早期采納者(Early Adopters)區間;采納環對應早期大眾(Early Majority)和后期大眾(Late Majority)區間。
喜歡應用新技術的Thoughtworks的開發人員,目前應該屬于鴻溝曲線的早期采納者,正向早期大眾轉化。
最近我在K+全球軟件研發行業創新峰會2023北京大會中,做“混沌工程應用”專題的出品人。在收集和篩選演講話題時,發現一些企業,不太愿意來分享。原因是前兩年在國內“混沌工程”早期試點階段,他們已經在大會上分享過這個話題了。最近也沒有什么新的內容可講。
具體來說,根據我在之前所參與的相關咨詢項目中的觀察,大部分企業實踐混沌工程,主要集中在兩個方面。
第一,構建工具平臺。包括工具平臺的建設過程,以及相關的系統架構。
第二,故障注入實驗。包括故障庫、故障注入編排和故障注入演練。其中故障庫中的原子故障,主要是針對基礎設施層和容器平臺層的虛擬機、容器、pod和node。如果是甲方購買了乙方的虛擬機和容器平臺,然后再在上面做相關的故障注入實驗,本質上是甲方再次花錢為乙方做回歸測試。
企業一旦在上面兩個方面開展混沌工程應用工作,過程就相對固化下來。自然在分享了一次之后,就沒有什么可再分享的新內容了。另外,這兩個方面,是不是給你一個在小池塘中蕩舟的四平八穩的感覺,而不是混沌工程本應有的面對大海般動蕩和不確定的生產環境事件的感覺。
混沌工程和軟件系統穩定性工程實踐,如何做得有好內容可講?
可以做下面兩類更有意思的實踐。
第一,人的協作相關的實踐。比如可以問自己下面的問題。
1 企業各個角色,如業務人員、開發人員、測試人員、運維人員、平臺團隊,在混沌工程應用中的協作機制是什么樣的?
2 你們用了什么機制,保障所注入的故障能反映多樣化的生產環境的現實世界的動蕩情況?比如是否歸納了以往生產系統停機的原因并將其納入故障庫?是否實踐了藍軍行動?藍軍小組由哪個部門牽頭領導?是公司級別的?還是部門級別的?還是開發組級別的?藍軍與紅軍是如何協作的?能否舉一個紅藍軍協作開展混沌工程實驗(從測試環境到生產環境)的整個過程的例子?
3 你們在實踐混沌工程時,遇到了什么阻力?你們是如何應對阻力的?
4 企業內的分布式系統一般會由多個開發團隊維護。即使分布式系統中的所有單個服務都正常運行,這些服務之間的交互也可能會導致不可預測的結果。這些結果,再加上影響生產環境的罕見但具有破壞性的現實世界的事件,使得這些分布式系統本質上是混沌的。你們的混沌工程實踐,是否主要是集中于單個團隊所維護的單個服務?如果涉及兩個團隊所維護的兩個服務之間的交互的故障注入實驗,你們是如何協調這兩個團隊進行實驗的?
第二,有挑戰的技術和過程相關的實踐。比如可以問自己下面的問題。
1 故障注入實驗是否經常在生產環境執行?還是只在測試或準生產環境執行?如果從未在生產環境執行,顧慮是什么?
2 你們所實踐的混沌工程應用,與傳統的測試團隊的軟件測試,以及與運維部門的傳統故障演練,有什么區別?差異化優勢在哪里?
3 如何保障故障注入后的最小化爆炸半徑?
4 你們所開展的故障注入實驗,是否主要針對基礎設施層或容器平臺層?是否有針對應用服務層做故障注入實驗?比如服務不可用時的后備設置不當,由于超時調整不當而導致用戶的重試風暴,當所依賴的服務接收過多流量時發生延時、服務中斷或返回錯誤碼,單點故障崩潰時的所導致的級聯故障等等。
5 你們向領導匯報混沌工程成效時,具體使用了哪些指標?成效數據前后是如何對比的?
你可以思考上面這9組問題。選出一個能啟發你把混沌工程和軟件系統穩定性工程實踐做得有意思的,并嘗試解決該問題。在這個過程中,相信你會有好內容可講。
我已經在知乎開設了“吾真本說軟件系統穩定運行”專欄,并建了相關的討論小組。如果你對混沌工程和軟件系統穩定性工程實踐感興趣,歡迎在知乎我的專欄里給我留言“混沌討論”,我會告訴你我的聯系方式,拉你進入討論小組,一起討論。
企業生意蒸蒸日上,軟件系統穩定運行。這就是“吾真本說軟件系統穩定運行”專欄所關注的。