微信公眾號:內(nèi)核小王子
關(guān)注可了解更多關(guān)于數(shù)據(jù)庫妖枚,JVM內(nèi)核相關(guān)的知識;
如果你有任何疑問也可以加我pigpdong[1]
高可用架構(gòu)是保障服務(wù)穩(wěn)定性的核心。
混沌工程
我們可以把混沌工程看作揭示分布式系統(tǒng)中未知的弱點(diǎn)而進(jìn)行的實(shí)驗(yàn)蝗柔。混沌工程師通過應(yīng)用一些經(jīng)驗(yàn)探索的原則民泵,來學(xué)習(xí)觀察系統(tǒng)是如何反應(yīng)的癣丧。這就跟科學(xué)家做實(shí)驗(yàn)去學(xué)習(xí)物理定律一樣,混沌工程師通過做實(shí)驗(yàn)去了解系統(tǒng)栈妆。
混沌工程是在分布式系統(tǒng)上進(jìn)行實(shí)驗(yàn)的學(xué)科, 目的是建立對系統(tǒng)抵御生產(chǎn)環(huán)境中失控條件的能力以及信心胁编,最早由Netflix及相關(guān)團(tuán)隊(duì)提出。
現(xiàn)在大部分的混沌工程項(xiàng)目都叫做 Monkey鳞尔,也就是這只討厭的猴子掏呼,在你的系統(tǒng)里面上蹦下竄,不停搗亂铅檩,直到搞掛你的系統(tǒng)憎夷。通過混沌實(shí)驗(yàn),我們可以了解到系統(tǒng)脆弱的一面昧旨,在還沒出現(xiàn)對用戶造成傷害之前拾给,我們就能主動發(fā)現(xiàn)這些問題,提升整個系統(tǒng)的彈性兔沃。
和故障注入以及故障測試的區(qū)別
混沌工程蒋得、故障注入和故障測試在關(guān)注點(diǎn)和工具中都有很大的重疊。但前者主要側(cè)重通過實(shí)踐產(chǎn)生無法預(yù)知的信息乒疏,幫助我們更好的認(rèn)識系統(tǒng)额衙,有更多的不確定性,而后者更偏重于是否達(dá)到預(yù)期怕吴,就像程序里的Assert斷言一樣窍侧,如果不符合預(yù)期就拋出異常。故障測試以某種預(yù)想的方式破壞系統(tǒng)转绷,但沒有探索更多可能發(fā)生的奇怪場景伟件。本質(zhì)上是實(shí)驗(yàn)和測試的區(qū)別,后者主要用來驗(yàn)證议经,前者用來發(fā)現(xiàn)新知識斧账。
餛飩實(shí)驗(yàn)的輸入示例:
- 模擬整個 IDC 全部宕機(jī)
- 針對某個接口調(diào)用延遲5秒返回
- 讓某個 CPU 全負(fù)載
- 讓某個函數(shù)拋出某個異常或返回某個固定的值
- 強(qiáng)制讓 NTP 時間不同步
- 生產(chǎn) IO 錯誤
混沌工程的原則
下圖為可能的故障分類煞肾,我們可以通過Java字節(jié)碼技術(shù)和操作系統(tǒng)層面的工具來分別模擬進(jìn)程內(nèi)和進(jìn)程外的故障咧织。隨著Serverless、Docker等新架構(gòu)籍救、新技術(shù)的出現(xiàn)习绢,故障實(shí)現(xiàn)機(jī)制和承接載體也將會有一些新的變化。
混沌工程的應(yīng)用場景
- 提升系統(tǒng)容錯能力以及穩(wěn)定性
- 評估系統(tǒng)榮災(zāi)紅線
- 驗(yàn)證云服務(wù)的動態(tài)擴(kuò)展能力
- 驗(yàn)證監(jiān)控和告警的有效性以及指標(biāo)是否全面
- 故障突襲钧忽,提升相關(guān)人員定位毯炮,故障問題的能力
ChaosBlade簡單介紹
ChaosBlade 是一款遵循混沌工程實(shí)驗(yàn)原理逼肯,提供豐富故障場景實(shí)現(xiàn),幫助分布式系統(tǒng)提升容錯性和可恢復(fù)性的混沌工程工具桃煎,可實(shí)現(xiàn)底層故障的注入篮幢,特點(diǎn)是操作簡潔、無侵入为迈、擴(kuò)展性強(qiáng)三椿。
Github 地址為 (https://github.com/chaosblade-io/) 和其他阿里開源的工具不同,不在 /alibaba 下葫辐,而是放在 chaosblade-io 下
chaos [?ke??s] 意思為餛飩的搜锰,混亂的 blade [ble?d] 意思為 刀片 刀身 刀刃 連起來讀就是 cosplay
下圖為ChaosBlade發(fā)展歷程,其中 ahas 為基于 ChaosBlade 的一個云上故障演練的產(chǎn)品耿战。
ChaosBlade 組件和生態(tài)
ChaosBlade提供命令行的方式對實(shí)驗(yàn)進(jìn)行管理蛋叼,例如 create 創(chuàng)建一個實(shí)驗(yàn), destroy 銷毀一個實(shí)驗(yàn)剂陡,以及查詢等狈涮。目前針對進(jìn)程內(nèi)的實(shí)驗(yàn),針對JAVA環(huán)境主要通過javaagent字節(jié)碼注入的方式進(jìn)行 (這一點(diǎn)和另一款故障排查工具arthas一樣) 鸭栖,針對機(jī)器層面主要通過shell(包括docket 和 k8s)
ChaosBlade 特點(diǎn)
- 場景豐富度高
- 使用簡單歌馍,易于理解
- 動態(tài)加載,無侵入
- 場景擴(kuò)展方便
- 支持運(yùn)行時長設(shè)置
ChaosBlade 支持的實(shí)驗(yàn)
- CPU 滿載
- 網(wǎng)絡(luò)丟包 延遲 屏蔽
- 域名屏蔽
- 磁盤填充晕鹊,磁盤 IO 讀寫負(fù)載
- 殺進(jìn)程
- 刪容器松却,POD
- RPC 調(diào)用延遲
- JAVA 方法注入指定異常和設(shè)置返回值
使用舉例
docker pull registry.cn-hangzhou.aliyuncs.com/chaosblade/chaosblade-demo:latest
docker run -it registry.cn-hangzhou.aliyuncs.com/chaosblade/chaosblade-demo:latest