解析阿里開源混沌工程工具ChaosBlade是什么?


微信公眾號:內核小王子
關注可了解更多關於數據庫,JVM內核相關的知識;
如果你有任何疑問也可以加我pigpdong[1]

高可用架構是保障服務穩定性的核心。

混沌工程

我們可以把混沌工程看作揭示分布式系統中未知的弱點而進行的實驗。混沌工程師通過應用一些經驗探索的原則,來學習觀察系統是如何反應的。這就跟科學家做實驗去學習物理定律一樣,混沌工程師通過做實驗去了解系統。

混沌工程是在分布式系統上進行實驗的學科, 目的是建立對系統抵御生產環境中失控條件的能力以及信心,最早由Netflix及相關團隊提出。

monkey.png

現在大部分的混沌工程項目都叫做 Monkey,也就是這只討厭的猴子,在你的系統里面上蹦下竄,不停搗亂,直到搞掛你的系統。通過混沌實驗,我們可以了解到系統脆弱的一面,在還沒出現對用戶造成傷害之前,我們就能主動發現這些問題,提升整個系統的彈性。

hundun.png

和故障注入以及故障測試的區別

混沌工程、故障注入和故障測試在關注點和工具中都有很大的重疊。但前者主要側重通過實踐產生無法預知的信息,幫助我們更好的認識系統,有更多的不確定性,而后者更偏重於是否達到預期,就像程序里的Assert斷言一樣,如果不符合預期就拋出異常。故障測試以某種預想的方式破壞系統,但沒有探索更多可能發生的奇怪場景。本質上是實驗和測試的區別,后者主要用來驗證,前者用來發現新知識。

餛飩實驗的輸入示例:

  • 模擬整個 IDC 全部宕機
  • 針對某個接口調用延遲5秒返回
  • 讓某個 CPU 全負載
  • 讓某個函數拋出某個異常或返回某個固定的值
  • 強制讓 NTP 時間不同步
  • 生產 IO 錯誤

混沌工程的原則

cs.png

下圖為可能的故障分類,我們可以通過Java字節碼技術和操作系統層面的工具來分別模擬進程內和進程外的故障。隨着Serverless、Docker等新架構、新技術的出現,故障實現機制和承接載體也將會有一些新的變化。

env.png

混沌工程的應用場景

  • 提升系統容錯能力以及穩定性
  • 評估系統榮災紅線
  • 驗證雲服務的動態擴展能力
  • 驗證監控和告警的有效性以及指標是否全面
  • 故障突襲,提升相關人員定位,故障問題的能力

ChaosBlade簡單介紹

ChaosBlade 是一款遵循混沌工程實驗原理,提供豐富故障場景實現,幫助分布式系統提升容錯性和可恢復性的混沌工程工具,可實現底層故障的注入,特點是操作簡潔、無侵入、擴展性強。
Github 地址為 (https://github.com/chaosblade-io/) 和其他阿里開源的工具不同,不在 /alibaba 下,而是放在 chaosblade-io 下

chaos [ˈkeɪɒs] 意思為餛飩的,混亂的 blade [bleɪd] 意思為 刀片 刀身 刀刃 連起來讀就是 cosplay

logo.png

下圖為ChaosBlade發展歷程,其中 ahas 為基於 ChaosBlade 的一個雲上故障演練的產品。

blade.png

ChaosBlade 組件和生態

c1.png

ChaosBlade提供命令行的方式對實驗進行管理,例如 create 創建一個實驗, destroy 銷毀一個實驗,以及查詢等。目前針對進程內的實驗,針對JAVA環境主要通過javaagent字節碼注入的方式進行 (這一點和另一款故障排查工具arthas一樣) ,針對機器層面主要通過shell(包括docket 和 k8s)

c2.png

ChaosBlade 特點

  • 場景豐富度高
  • 使用簡單,易於理解
  • 動態加載,無侵入
  • 場景擴展方便
  • 支持運行時長設置

ChaosBlade 支持的實驗

  • CPU 滿載
  • 網絡丟包 延遲 屏蔽
  • 域名屏蔽
  • 磁盤填充,磁盤 IO 讀寫負載
  • 殺進程
  • 刪容器,POD
  • RPC 調用延遲
  • JAVA 方法注入指定異常和設置返回值

使用舉例

docker pull registry.cn-hangzhou.aliyuncs.com/chaosblade/chaosblade-demo:latest
docker run -it registry.cn-hangzhou.aliyuncs.com/chaosblade/chaosblade-demo:latest

1.gif


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM