六年打磨!阿里开源混沌工程工具 ChaosBlade
阿里妹導(dǎo)讀:減少故障的最好方法就是讓故障經(jīng)常性的發(fā)生。通過不斷重復(fù)失敗過程,持續(xù)提升系統(tǒng)的容錯和彈性能力。今天,阿里巴巴把六年來在故障演練領(lǐng)域的創(chuàng)意和實踐匯濃縮而成的工具進行開源,它就是 “ChaosBlade”。如果你想要提升開發(fā)效率,不妨來了解一下。
高可用架構(gòu)是保障服務(wù)穩(wěn)定性的核心。
阿里巴巴在海量互聯(lián)網(wǎng)服務(wù)以及歷年雙11場景的實踐過程中,沉淀出了包括全鏈路壓測、線上流量管控、故障演練等高可用核心技術(shù),并通過開源和云上服務(wù)的形式對外輸出,以幫助企業(yè)用戶和開發(fā)者享受阿里巴巴的技術(shù)紅利,提高開發(fā)效率,縮短業(yè)務(wù)的構(gòu)建流程。
例如,借助阿里云性能測試 PTS,高效率構(gòu)建全鏈路壓測體系,通過開源組件 Sentinel 實現(xiàn)限流和降級功能。這一次,經(jīng)歷了 6 年時間的改進和實踐,累計在線上執(zhí)行演練場景達數(shù)萬次,我們將阿里巴巴在故障演練領(lǐng)域的創(chuàng)意和實踐,濃縮成一個混沌工程工具,并將其開源,命名為 ChaosBlade。
ChaosBlade 是什么
ChaosBlade 是一款遵循混沌工程實驗原理,提供豐富故障場景實現(xiàn),幫助分布式系統(tǒng)提升容錯性和可恢復(fù)性的混沌工程工具,可實現(xiàn)底層故障的注入,特點是操作簡潔、無侵入、擴展性強。
ChaosBlade 基于 Apache License v2.0 開源協(xié)議,目前有 chaosblade 和 chaosblade-exe-jvm 兩個倉庫。
chaosblade 包含 CLI 和使用 Golang 實現(xiàn)的基礎(chǔ)資源、容器相關(guān)的混沌實驗實施執(zhí)行模塊。chaosblade-exe-jvm 是對運行在 JVM 上的應(yīng)用實施混沌實驗的執(zhí)行器。
ChaosBlade 社區(qū)后續(xù)還會添加 C++、Node.js 等其他語言的混沌實驗執(zhí)行器。
為什么要開源
很多公司已經(jīng)開始關(guān)注并探索混沌工程,漸漸成為測試系統(tǒng)高可用,構(gòu)建對系統(tǒng)信息不可缺少的工具。但混沌工程領(lǐng)域目前還處于一個快速演進的階段,最佳實踐和工具框架沒有統(tǒng)一標準。實施混沌工程可能會帶來一些潛在的業(yè)務(wù)風(fēng)險,經(jīng)驗和工具的缺失也將進一步阻止 DevOps 人員實施混沌工程。
混沌工程領(lǐng)域目前也有很多優(yōu)秀的開源工具,分別覆蓋某個領(lǐng)域,但這些工具的使用方式千差萬別,其中有些工具上手難度大,學(xué)習(xí)成本高,混沌實驗?zāi)芰我?#xff0c;使很多人對混沌工程領(lǐng)域望而卻步。
阿里巴巴集團在混沌工程領(lǐng)域已經(jīng)實踐多年,將混沌實驗工具 ChaosBlade 開源目的,是為了:
- 讓更多人了解并加入到混沌工程領(lǐng)域;
- 縮短構(gòu)建混沌工程的路徑;
- 同時依靠社區(qū)的力量,完善更多的混沌實驗場景,共同推進混沌工程領(lǐng)域的發(fā)展。
ChaosBlade 能解決哪些問題
衡量微服務(wù)的容錯能力
通過模擬調(diào)用延遲、服務(wù)不可用、機器資源滿載等,查看發(fā)生故障的節(jié)點或?qū)嵗欠癖蛔詣痈綦x、下線,流量調(diào)度是否正確,預(yù)案是否有效,同時觀察系統(tǒng)整體的 QPS 或 RT 是否受影響。在此基礎(chǔ)上可以緩慢增加故障節(jié)點范圍,驗證上游服務(wù)限流降級、熔斷等是否有效。最終故障節(jié)點增加到請求服務(wù)超時,估算系統(tǒng)容錯紅線,衡量系統(tǒng)容錯能力。
驗證容器編排配置是否合理
通過模擬殺服務(wù) Pod、殺節(jié)點、增大 Pod 資源負載,觀察系統(tǒng)服務(wù)可用性,驗證副本配置、資源限制配置以及 Pod 下部署的容器是否合理。
測試 PaaS 層是否健壯
通過模擬上層資源負載,驗證調(diào)度系統(tǒng)的有效性;模擬依賴的分布式存儲不可用,驗證系統(tǒng)的容錯能力;模擬調(diào)度節(jié)點不可用,測試調(diào)度任務(wù)是否自動遷移到可用節(jié)點;模擬主備節(jié)點故障,測試主備切換是否正常。
驗證監(jiān)控告警的時效性
通過對系統(tǒng)注入故障,驗證監(jiān)控指標是否準確,監(jiān)控維度是否完善,告警閾值是否合理,告警是否快速,告警接收人是否正確,通知渠道是否可用等,提升監(jiān)控告警的準確和時效性。
定位與解決問題的應(yīng)急能力
通過故障突襲,隨機對系統(tǒng)注入故障,考察相關(guān)人員對問題的應(yīng)急能力,以及問題上報、處理流程是否合理,達到以戰(zhàn)養(yǎng)戰(zhàn),鍛煉人定位與解決問題的能力。
功能和特點
場景豐富度高
ChaosBlade 支持的混沌實驗場景不僅覆蓋基礎(chǔ)資源,如 CPU 滿載、磁盤 IO 高、網(wǎng)絡(luò)延遲等,還包括運行在 JVM 上的應(yīng)用實驗場景,如 Dubbo 調(diào)用超時和調(diào)用異常、指定方法延遲或拋異常以及返回特定值等,同時涉及容器相關(guān)的實驗,如殺容器、殺 Pod。后續(xù)會持續(xù)的增加實驗場景。
使用簡潔,易于理解
ChaosBlade 通過 CLI 方式執(zhí)行,具有友好的命令提示功能,可以簡單快速的上手使用。命令的書寫遵循阿里巴巴集團內(nèi)多年故障測試和演練實踐抽象出的故障注入模型,層次清晰,易于閱讀和理解,降低了混沌工程實施的門檻。
場景擴展方便
所有的 ChaosBlade 實驗執(zhí)行器同樣遵循上述提到的故障注入模型,使實驗場景模型統(tǒng)一,便于開發(fā)和維護。模型本身通俗易懂,學(xué)習(xí)成本低,可以依據(jù)模型方便快捷的擴展更多的混沌實驗場景。
ChaosBlade 的演進史
EOS(2012-2015):
故障演練平臺的早期版本,故障注入能力通過字節(jié)碼增強方式實現(xiàn),模擬常見的 RPC 故障,解決微服務(wù)的強弱依賴治理問題。
MonkeyKing(2016-2018):
故障演練平臺的升級版本,豐富了故障場景(如:資源、容器層場景),開始在生產(chǎn)環(huán)境進行一些規(guī)模化的演練。
AHAS(2018.9-至今):
阿里云應(yīng)用高可用服務(wù),內(nèi)置演練平臺的全部功能,支持可編排演練、演練插件擴展等能力,并整合了架構(gòu)感知和限流降級的功能。
ChaosBlade(2019.3):
是 MonkeyKing 平臺底層故障注入的實現(xiàn)工具,通過對演練平臺底層的故障注入能力進行抽象,定義了一套故障模型。配合用戶友好的 CLI 工具進行開源,幫助云原生用戶進行混沌工程測試。
近期規(guī)劃
功能迭代:
- 增強 JVM 演練場景,支持更多的 Java 主流框架,如 Redis,GRPC
- 增強 Kubernetes 演練場景
- 增加對 C++、Node.js 等應(yīng)用的支持
社區(qū)共建:
1、歡迎訪問 ChaosBlade@GitHub,參與社區(qū)共建,包括但不限于:
- 架構(gòu)設(shè)計
- 模塊設(shè)計
- 代碼實現(xiàn)
- Bug Fix
- Demo樣例
- 文檔、網(wǎng)站和翻譯
?
原文鏈接
本文為云棲社區(qū)原創(chuàng)內(nèi)容,未經(jīng)允許不得轉(zhuǎn)載。
總結(jié)
以上是生活随笔為你收集整理的六年打磨!阿里开源混沌工程工具 ChaosBlade的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Javascript 模块化指北
- 下一篇: 蚂蚁金服CTO程立:做工程要有“拧螺丝”