1、什麼是ChaosBlade java
ChaosBlade是阿里巴巴在其自身故障測試和演練實踐基礎上,結合自身業務場景而開發的故障注入工具。git
該工具目前已經開源,項目地址:github
https://github.com/chaosblade...web
2、爲何須要故障演練 redis
ChaosBlade是一款故障注入工具,是整個故障演練的一個小環節,那爲何要作故障演練呢? sql
在我看來,主要是爲了驗證在故障場景程序的可靠性和可用性,由於大部分人寫代碼都有慣性,只喜歡寫正向流程,對於一些異常處理每每是很是簡單和粗暴的,因此頗有可能出如今系統發生故障時可能出現各類問題:如數據丟失、數據對不上等。網絡
故障演練主要是經過模擬一個個故障場景來驗證程序的可靠性和可用性,這樣也反過來提高系統架構,爲後續開發、設計提供一些指導。架構
3、安裝 jvm
若是不想本身修改代碼,能夠用官方版本:工具
https://github.com/chaosblade...
我選擇的是v0.6.0,解壓後在根目錄下有個blade的二進制文件。
若是想本身編譯,則須要如下軟件,如下是個人環境相關軟件版本:
Java:1.8.1
Maven:3.6.3
Go>=1.13
Git>=1.8.5
編譯步驟:
git clone https://github.com/chaosblade...
git checkout v0.6.0
make
4、使用
官方文檔已經介紹的很是詳細了,建議仔細閱讀:
https://chaosblade-io.gitbook...
這裏介紹一個模擬CPU Load高的命令如何使用:
blade create cpu load
其中result至關於一個實驗,若是想中止試驗,執行命令:
blade destroy 0496e31d8c619016
功能大概分幾大塊:
一、模擬CPU負載高
blade create cpu load
二、模擬磁盤IO壓力
blade create disk fill
三、內存負載
四、模塊網絡負載
有模塊延遲、丟包、重複等場景,這裏就不一一詳述了
五、模擬進程宕掉
六、JVM
能夠指定類,方法注入延遲、返回值、異常故障場景,也能夠編寫 groovy 和 java 腳原本實現複雜的場景。
七、WEB服務
後臺啓動 blade,會暴露出 web 服務,上層可經過 http 調用。
請求格式是 chaosblade?cmd=具體命令,例如執行 CPU 滿載,則請求是 chaosblade?cmd=create%20cpu%20fullload
這個是重點,由於前面講的這些功能都是單機命令行的,實際的場景是但願在一個控制檯集中操做全部場景,有了這個遠程通訊能力,上述需求落地纔有了可能。
5、總體感覺
ChaosBlade的功能很是強大,常見的故障場景都能覆蓋到,另外還提供了遠程控制的能力,美中不足的是目前沒有開源相應的控制檯,若是須要最終落地而且產品化還須要作進一步開發,不過阿里 的AHAS已經集成了ChaosBlade,若是隻是用了一個雲廠商能夠不用本身開發了,若是使用多個雲廠商,像國內阿里雲,海外AWS的這種狀況,就須要本身作進一步的開發了。
真的須要作控制檯,細節不少,如何自動化發現ChaosBlade,而且和本身的業務結合,仍是須要本身作進一步的開發,如我在Mysql和Redis上都部署了ChaosBlade,若是識別本身操控的是Mysql仍是Redis,這就涉及到ChaosBlade的管理了,這個能夠參考下ServiceMesh的設計。