微信公衆號:內核小王子
關注可瞭解更多關於數據庫,JVM內核相關的知識;
若是你有任何疑問也能夠加我pigpdong[1]java
高可用架構是保障服務穩定性的核心。git
咱們能夠把混沌工程看做揭示分佈式系統中未知的弱點而進行的實驗。混沌工程師經過應用一些經驗探索的原則,來學習觀察系統是如何反應的。這就跟科學家作實驗去學習物理定律同樣,混沌工程師經過作實驗去了解系統。github
混沌工程是在分佈式系統上進行實驗的學科, 目的是創建對系統抵禦生產環境中失控條件的能力以及信心,最先由Netflix及相關團隊提出。docker
如今大部分的混沌工程項目都叫作 Monkey,也就是這隻討厭的猴子,在你的系統裏面上蹦下竄,不停搗亂,直到搞掛你的系統。經過混沌實驗,咱們能夠了解到系統脆弱的一面,在還沒出現對用戶形成傷害以前,咱們就能主動發現這些問題,提高整個系統的彈性。shell
混沌工程、故障注入和故障測試在關注點和工具中都有很大的重疊。但前者主要側重經過實踐產生沒法預知的信息,幫助咱們更好的認識系統,有更多的不肯定性,然後者更偏重因而否達到預期,就像程序裏的Assert斷言同樣,若是不符合預期就拋出異常。故障測試以某種預想的方式破壞系統,但沒有探索更多可能發生的奇怪場景。本質上是實驗和測試的區別,後者主要用來驗證,前者用來發現新知識。數據庫
餛飩實驗的輸入示例:微信
下圖爲可能的故障分類,咱們能夠經過Java字節碼技術和操做系統層面的工具來分別模擬進程內和進程外的故障。隨着Serverless、Docker等新架構、新技術的出現,故障實現機制和承接載體也將會有一些新的變化。網絡
ChaosBlade 是一款遵循混沌工程實驗原理,提供豐富故障場景實現,幫助分佈式系統提高容錯性和可恢復性的混沌工程工具,可實現底層故障的注入,特色是操做簡潔、無侵入、擴展性強。
Github 地址爲 (https://github.com/chaosblade-io/) 和其餘阿里開源的工具不一樣,不在 /alibaba 下,而是放在 chaosblade-io 下架構
chaos [ˈkeɪɒs] 意思爲餛飩的,混亂的 blade [bleɪd] 意思爲 刀片 刀身 刀刃 連起來讀就是 cosplayless
下圖爲ChaosBlade發展歷程,其中 ahas 爲基於 ChaosBlade 的一個雲上故障演練的產品。
ChaosBlade提供命令行的方式對實驗進行管理,例如 create 建立一個實驗, destroy 銷燬一個實驗,以及查詢等。目前針對進程內的實驗,針對JAVA環境主要經過javaagent字節碼注入的方式進行 (這一點和另外一款故障排查工具arthas同樣) ,針對機器層面主要經過shell(包括docket 和 k8s)
docker pull registry.cn-hangzhou.aliyuncs.com/chaosblade/chaosblade-demo:latest docker run -it registry.cn-hangzhou.aliyuncs.com/chaosblade/chaosblade-demo:latest