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

微信公衆號:內核小王子
關注可瞭解更多關於數據庫,JVM內核相關的知識;
若是你有任何疑問也能夠加我pigpdong[1]java

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

混沌工程

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

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

monkey.png

如今大部分的混沌工程項目都叫作 Monkey,也就是這隻討厭的猴子,在你的系統裏面上蹦下竄,不停搗亂,直到搞掛你的系統。經過混沌實驗,咱們能夠了解到系統脆弱的一面,在還沒出現對用戶形成傷害以前,咱們就能主動發現這些問題,提高整個系統的彈性。shell

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] 意思爲 刀片 刀身 刀刃 連起來讀就是 cosplayless

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

相關文章
相關標籤/搜索