企業(yè)網(wǎng)站的基本內(nèi)容騰訊第三季度營(yíng)收448億元
當(dāng)前,業(yè)界主流的混沌工程項(xiàng)目基本只關(guān)注如何制造故障的問(wèn)題,而經(jīng)常做演練相關(guān)工作的工程師應(yīng)該明白,每次演練時(shí)還會(huì)遇到以下痛點(diǎn):
-
檢測(cè)當(dāng)前環(huán)境是否符合演練預(yù)設(shè)條件(演練準(zhǔn)入);
-
業(yè)務(wù)流量是否滿足(流量注入);
-
注入后判斷故障效果是否符合預(yù)期(故障度量);
-
是否在預(yù)設(shè)時(shí)間內(nèi)恢復(fù)了業(yè)務(wù)服務(wù)(恢復(fù)度量);
-
復(fù)盤分析總結(jié)風(fēng)險(xiǎn)點(diǎn)。
這也是螞蟻集團(tuán)內(nèi)部混沌工程平臺(tái) XMonkey 在多年復(fù)雜故障演練場(chǎng)景中時(shí)常遇到的問(wèn)題。
作為螞蟻集團(tuán)研發(fā)、測(cè)試、質(zhì)量、SRE 等人員進(jìn)行歷史故障演練和挖掘系統(tǒng)潛在風(fēng)險(xiǎn)的重要平臺(tái),XMonkey 在公司級(jí)大規(guī)模紅藍(lán)攻防演練實(shí)踐中沉淀了豐富且專業(yè)的方法論,在業(yè)界有極高的分享價(jià)值?;诮?jīng)驗(yàn)共享與探討的角度,XMonkey 的對(duì)外開(kāi)源版本 ChaosMeta 在近日宣布正式開(kāi)源。同時(shí),ChaosMeta 也成為了 OceanBase 生態(tài)伙伴的新成員。
ChaosMeta 能做什么?
混沌工程生命周期
ChaosMeta 是一款面向云原生、自動(dòng)化演練而設(shè)計(jì)的混沌工程平臺(tái),基于業(yè)界現(xiàn)狀和攻防演練的常見(jiàn)痛點(diǎn),結(jié)合螞蟻集團(tuán)在混沌工程領(lǐng)域的多年經(jīng)驗(yàn),提出了混沌工程生命周期模型(見(jiàn)圖1)。該模型覆蓋了“準(zhǔn)入檢測(cè)”“流量注入”“故障注入”“故障度量”“恢復(fù)度量”“注入恢復(fù)”等各個(gè)階段的技術(shù)支撐,為自動(dòng)化混沌工程提供技術(shù)依據(jù)。
圖1 混沌工程生命周期模型
也就是說(shuō),ChaosMeta 提供了完整的混沌工程生命周期的一站式演練綜合解決方案,助力用戶快速挖掘業(yè)務(wù)應(yīng)用和系統(tǒng)的潛在風(fēng)險(xiǎn)。除此之外,ChaosMeta 還內(nèi)置了螞蟻集團(tuán)在技術(shù)風(fēng)險(xiǎn)領(lǐng)域多年沉淀的“風(fēng)險(xiǎn)目錄”,這是一份對(duì)各技術(shù)領(lǐng)域的基礎(chǔ)通用風(fēng)險(xiǎn)的匯總。
沉淀多年的“風(fēng)險(xiǎn)目錄”
螞蟻集團(tuán)內(nèi)部每年都會(huì)舉行公司級(jí)大規(guī)模紅藍(lán)攻防演練活動(dòng),面向公司全體業(yè)務(wù),并且也有不少業(yè)務(wù)進(jìn)行 7X24 小時(shí)演練以及月度常態(tài)演練。
演練對(duì)象類型覆蓋云產(chǎn)品、Kubernetes、Operator 應(yīng)用、數(shù)據(jù)庫(kù)( OceanBase、MySQL 等)、中間件(消息隊(duì)列、分布式調(diào)度、配置中心等)、業(yè)務(wù)應(yīng)用(交易系統(tǒng)、營(yíng)銷系統(tǒng)等)等。
以 OceanBase 的攻防演練為例,使用 ChaosMeta 對(duì) OceanBase 集群的任意節(jié)點(diǎn)注入磁盤 I/O 夯的故障,其底層原理是通過(guò)使用 cgroup 的 blkio 子系統(tǒng)對(duì) OBServer 進(jìn)程進(jìn)行 I/O 限制,考查 OceanBase 集群對(duì)磁盤 I/O 類故障的發(fā)現(xiàn)、定位、自愈的效率;還會(huì)隨機(jī)對(duì) OceanBase 集群中任意節(jié)點(diǎn)的 clog、ilog、slog 等日志目錄的磁盤填滿,考查能否快速定位哪個(gè)節(jié)點(diǎn)的哪個(gè)日志目錄被填滿并進(jìn)行相應(yīng)的應(yīng)急處理。
對(duì)于每種類型的應(yīng)用,都能抽象出一些比較通用的公共風(fēng)險(xiǎn):
-
比如消息隊(duì)列,會(huì)有消息堆積、消息丟失、消息順序混亂、依賴方網(wǎng)絡(luò)不穩(wěn)定等風(fēng)險(xiǎn);
-
比如交易系統(tǒng),會(huì)有分布式事務(wù)、金額一致性、并發(fā)沖突等風(fēng)險(xiǎn);
-
比如數(shù)據(jù)庫(kù),會(huì)有磁盤 I/O 故障、磁盤填滿、節(jié)點(diǎn)間網(wǎng)絡(luò)故障等風(fēng)險(xiǎn)。
“風(fēng)險(xiǎn)目錄”是螞蟻集團(tuán)在大型金融互聯(lián)網(wǎng)架構(gòu)環(huán)境下,多年打磨、沉淀而來(lái)的一份“風(fēng)險(xiǎn)百科全書(shū)”,其中,開(kāi)源界通用的風(fēng)險(xiǎn),將會(huì)內(nèi)置到 ChaosMeta 中,作為自動(dòng)化混沌工程的理論依據(jù)。
豐富的云原生故障注入能力
大規(guī)模高頻率的演練活動(dòng),推動(dòng)了各種各樣的故障注入能力建設(shè)。除了業(yè)界常見(jiàn)的系統(tǒng)資源故障、內(nèi)核故障、網(wǎng)絡(luò)故障、JVM 注入等,ChaosMeta 還提供了豐富的云原生故障注入能力。例如:
-
給 Kubernetes 集群堆積大量 pending 狀態(tài)的 pod,拖垮調(diào)度系統(tǒng);
-
給某個(gè)資源對(duì)象的創(chuàng)建流程注入動(dòng)態(tài)校驗(yàn) Webhook,延長(zhǎng)校驗(yàn)時(shí)間,影響創(chuàng)建效率;
-
注入動(dòng)態(tài)變更 Webhook 使特定字段變異;
-
建立大量 Watch&List 鏈接,加重 APIServer 回調(diào) Operator 的負(fù)擔(dān)等。
以混沌工程生命周期的平臺(tái)能力為技術(shù)支撐,“風(fēng)險(xiǎn)目錄”作為理論支撐,使 ChaosMeta 得以朝著自動(dòng)化混沌工程演進(jìn)。
ChaosMeta 是如何實(shí)現(xiàn)的?
ChaosMeta 的核心平臺(tái)能力是基于 Operator 開(kāi)發(fā)模式實(shí)現(xiàn)的,因此,其天然支持云原生。ChaosMeta 分為三層設(shè)計(jì)(見(jiàn)圖2 ),詳見(jiàn)官方文檔,地址👇
https://chaosmeta.gitbook.io/chaosmeta-cn
圖2? ChaosMeta 架構(gòu)設(shè)計(jì)
最上層的用戶層由 chaosmeta-platform 組件構(gòu)成,其主要任務(wù)是降低用戶的使用門檻,提供可視化界面,方便用戶使用計(jì)劃、編排、實(shí)驗(yàn)配置、實(shí)驗(yàn)記錄詳情等平臺(tái)功能。
中間的引擎層包含了 ChaosMeta 的遠(yuǎn)程注入、編排、度量等核心平臺(tái)能力以及部分云原生故障能力的實(shí)現(xiàn)。
作為底層的內(nèi)核層,主要為單機(jī)故障注入能力的實(shí)現(xiàn),包含了 chaosmetad 組件,提供了常駐 HTTP 服務(wù)的方式以及命令行執(zhí)行的方式,還封裝了對(duì)應(yīng)的 daemonset 組件(chaosmeta-daemonset),可靈活搭配不同需求的演練平臺(tái)。
ChaosMeta 的后續(xù)規(guī)劃
ChaosMeta 的規(guī)劃分為平臺(tái)能力和故障注入能力兩個(gè)主體路線,當(dāng)前主要任務(wù)是把架構(gòu)圖中的主體能力都完成對(duì)外版改造,并進(jìn)行開(kāi)放。
另外,ChaosMeta 會(huì)繼續(xù)加強(qiáng)與 OceanBase 社區(qū)的合作,支持 OceanBase 的故障演練能力。
平臺(tái)能力演進(jìn)
ChaosMeta 平臺(tái)能力的未來(lái)演進(jìn)分為三大階段。
第一階段,人工配置。此階段的目標(biāo)是將架構(gòu)圖中的組件都對(duì)外開(kāi)放,此時(shí),即可支撐完整的混沌工程生命周期,進(jìn)入初級(jí)自動(dòng)化混沌工程領(lǐng)域,以“風(fēng)險(xiǎn)目錄”作為理論參考,一次人工配置,多次自動(dòng)執(zhí)行。
第二階段,自動(dòng)化。此階段下,“風(fēng)險(xiǎn)目錄”會(huì)發(fā)揮更大的價(jià)值,它不僅能分析一類應(yīng)用會(huì)有什么風(fēng)險(xiǎn),作出風(fēng)險(xiǎn)評(píng)估,還會(huì)給出對(duì)應(yīng)的預(yù)防以及應(yīng)急建議。ChaosMeta 會(huì)將“風(fēng)險(xiǎn)目錄”集成為通用組件的風(fēng)險(xiǎn)體檢套餐,實(shí)現(xiàn)一鍵“體檢”能力,用戶輸入目標(biāo)應(yīng)用信息后,得到風(fēng)險(xiǎn)評(píng)分以及風(fēng)險(xiǎn)分析報(bào)告。
第三階段,智能化。探索結(jié)合人工智能的方向,自動(dòng)生成更多未知的風(fēng)險(xiǎn)場(chǎng)景。
故障注入能力演進(jìn)
圖3 僅為故障能力分類,具體提供的原子故障能力詳見(jiàn)官方文檔(歡迎提交 issue,提出新能力需求,需求較高的優(yōu)先提供):
圖3 故障能力分類
與 OceanBase 社區(qū)的后續(xù)合作
ChaosMeta 的內(nèi)部版本 XMonkey 近幾年持續(xù)支持 OceanBase 的常態(tài)攻防演練,達(dá)500+次,包含:磁盤 I/O 故障、磁盤填滿(日志盤/數(shù)據(jù)盤)、節(jié)點(diǎn)間網(wǎng)絡(luò)異常等場(chǎng)景,這些攻防演練經(jīng)驗(yàn)將分享到 OceanBase 開(kāi)源社區(qū)中。