浩鲸科技基于ChaosBlade的混沌工程实践
作者介紹:
葉文宸,浩鯨科技云原生技術(shù)專家,開(kāi)源 chaosBlade 社區(qū)貢獻(xiàn)者,多年分布式系統(tǒng)架構(gòu)和穩(wěn)定性建設(shè)經(jīng)驗(yàn),致力于穩(wěn)定保障(SRE)、IT藍(lán)軍建設(shè)和運(yùn)維數(shù)字化提升。
前言
1、敏捷開(kāi)發(fā),DevOps 的穩(wěn)定性痛點(diǎn)
隨著業(yè)務(wù)規(guī)模的快速擴(kuò)張,敏捷開(kāi)發(fā)、DevOps 實(shí)踐、云原生架構(gòu)和治理的出現(xiàn),極大地提升了應(yīng)用交付的能力,縮短了業(yè)務(wù)上市周期。且與之帶來(lái)的微服務(wù)治理復(fù)雜度呈指數(shù)級(jí)擴(kuò)大,業(yè)務(wù)敏捷和技術(shù)迭代的難度也在不斷加大,同時(shí)還必須保證業(yè)務(wù)持續(xù)的高可用性和穩(wěn)定性,面對(duì)故障過(guò)去傳統(tǒng)的災(zāi)備方式已無(wú)法跟上這個(gè)節(jié)奏。
減少故障的最佳方法就是用反脆弱的思路來(lái)管理故障,將故障發(fā)生視為常態(tài),通過(guò)不斷重復(fù)異常過(guò)程,持續(xù)提升系統(tǒng)的容錯(cuò)和彈性能力。混沌工程正是因應(yīng)這個(gè)挑戰(zhàn),主動(dòng)注入故障,提前發(fā)現(xiàn)潛在問(wèn)題,迭代改進(jìn)架構(gòu)和運(yùn)維方式,最終實(shí)現(xiàn)業(yè)務(wù)韌性。
2、混沌工程需求
混沌工程是一套通過(guò)在分布式系統(tǒng)上進(jìn)行實(shí)驗(yàn),主動(dòng)找出系統(tǒng)中的脆弱環(huán)節(jié)的方法學(xué),最早由 Netflix 及相關(guān)團(tuán)隊(duì)提出。它旨在將故障扼殺在襁褓之中,也就是在故障造成中斷之前將它們識(shí)別出來(lái)。通過(guò)主動(dòng)制造故障,測(cè)試系統(tǒng)在各種壓力下的行為,識(shí)別并修復(fù)故障問(wèn)題,避免造成嚴(yán)重后果。2012年,Netflix 開(kāi)源了 Chaos Monkey。今天,許多公司(包括谷歌,亞馬遜,IBM,耐克等)都采用某種形式的混沌工程來(lái)提高現(xiàn)代架構(gòu)的可靠性。
浩鯨科技在海量互聯(lián)網(wǎng)服務(wù)以及當(dāng)前爆炸式增長(zhǎng)的流量場(chǎng)景實(shí)踐過(guò)程中,沉淀出了包括,鏈路壓測(cè),流控管理,動(dòng)態(tài)擴(kuò)縮容,故障演練等高可用核心技術(shù),并通過(guò)云上服務(wù)化、平臺(tái)化和工具化的形式,幫助內(nèi)部產(chǎn)品研發(fā)部門(mén)以及客戶,提高開(kāi)發(fā)效率,提升業(yè)務(wù)穩(wěn)定性。
為了打通故障發(fā)現(xiàn),故障管理,故障演練,應(yīng)急響應(yīng)等多方高可用措施,形成穩(wěn)定性建設(shè)的完整鏈路。浩鯨科技組建 IT 藍(lán)軍,實(shí)施演練突襲,質(zhì)量控制,聯(lián)合作訓(xùn)。自2019年開(kāi)始建設(shè) IT 藍(lán)軍隊(duì)伍,重點(diǎn)圍繞生產(chǎn)環(huán)境,開(kāi)展混沌工程實(shí)踐,以推動(dòng)代碼、基礎(chǔ)設(shè)施、流程、人員、監(jiān)控上的提升。自今年起,深化演練力度,演練常態(tài)化、周期化,不斷提高 SRE 單兵作戰(zhàn)能力。
故障演練平臺(tái)
1、搭建故障演練平臺(tái)
基于這個(gè)指導(dǎo)思想,浩鯨科技決定建立故障演練平臺(tái),基于工具化故障注入和平臺(tái)化故障演練管理來(lái)實(shí)現(xiàn)標(biāo)準(zhǔn)化,周期性的故障演練,從而提高產(chǎn)品韌性。
平臺(tái)目標(biāo):
- 提供自動(dòng)化,可視化,可編排,無(wú)侵入的故障注入能力;
- 作為高可用演練,故障測(cè)試的統(tǒng)一入口;
- 積累沉淀高可用測(cè)試用例,建立量化的穩(wěn)定性評(píng)估體系;
功能目標(biāo):
- 適配目前JVM、CPP、容器化、K8S等故障場(chǎng)景;
- 故障注入自動(dòng)化,具備故障生命周期管理能力;
- 故障爆炸范圍可控;
- 故障注入類型具備良好的擴(kuò)展性;
2、故障注入工具選型
目前業(yè)內(nèi)模擬故障的工具比較多樣化,支持的功能和場(chǎng)景也各有優(yōu)劣。通過(guò)對(duì)比來(lái)看,chaosblade 支持功能和場(chǎng)景比較豐富,同時(shí)社區(qū)也是比較活躍的。我們?cè)诔浞烛?yàn)證了大部分注入功能后,選擇了它作為底層注入的核心模塊。
混沌工程開(kāi)源工具對(duì)比
3、故障演練步驟
結(jié)合 chaosblade 的混沌工程模型,我們將整個(gè)故障注入標(biāo)準(zhǔn)化,劃分為五個(gè)步驟:
4、平臺(tái)模塊
作為故障演練的核心組件和故障注入引擎,平臺(tái)的模塊構(gòu)建圍繞服務(wù)業(yè)務(wù)演練展開(kāi)。
故障演練
1、演練過(guò)程詳解
我們實(shí)際實(shí)施故障演練時(shí),涉及環(huán)境準(zhǔn)備、故障注入任務(wù)編排、實(shí)施故障注入、故障復(fù)盤(pán)、問(wèn)題改進(jìn)等一系列操作。
- 演練方案確認(rèn)
實(shí)施故障演練之前,確認(rèn)實(shí)施故障注入的目標(biāo)服務(wù)/節(jié)點(diǎn),并確認(rèn)納入故障演練平臺(tái)管理。確認(rèn)故障實(shí)施的時(shí)間,地點(diǎn),干系人,服務(wù)穩(wěn)態(tài),演練預(yù)期,觀測(cè)指標(biāo)及完整的演練執(zhí)行順序。
- 故障演練用例編排
基于高可用演練工具 HATT ,完成自動(dòng)化演練任務(wù)編排、并實(shí)施演練全流程操作。
- 演練實(shí)施
通過(guò)演練工具監(jiān)控演練全生命周期并獲取演練結(jié)果。演練過(guò)程中出現(xiàn)的告警、監(jiān)控異常,穩(wěn)定性指標(biāo)同步至演練執(zhí)行結(jié)果,驗(yàn)證穩(wěn)定性預(yù)期。
- 演練完結(jié)/復(fù)盤(pán)
基于故障演練平臺(tái)輸出當(dāng)次演練結(jié)果,演練報(bào)告,基于指標(biāo)分析輸出演練問(wèn)題復(fù)盤(pán)報(bào)告。
- 穩(wěn)定性改進(jìn)
基于演練復(fù)盤(pán)報(bào)告,確定穩(wěn)定性改進(jìn)建設(shè)方案,并跟蹤執(zhí)行。便于下次演練的故障回歸。
故障演練用例則作為當(dāng)前業(yè)務(wù)的建設(shè)資產(chǎn)沉淀在故障演練平臺(tái)內(nèi),通用的還可予以復(fù)用。
2、從1-100
穩(wěn)定性建設(shè)從不是一蹴而就的事,混沌工程旨在建設(shè)一個(gè)穩(wěn)固的 PDCA 循環(huán),促使 SRE 們?cè)诳焖俚漠a(chǎn)品研發(fā)周期中不停驗(yàn)證,優(yōu)化產(chǎn)品穩(wěn)定性,跟上產(chǎn)品 DevOps 的腳步。而面臨大量、反復(fù)、周期化的故障演練,標(biāo)準(zhǔn)化、自動(dòng)化執(zhí)行和演練過(guò)程固化沉淀成了提效利器。
在完成演練方案設(shè)計(jì)及對(duì)接后,利用平臺(tái),做到了單個(gè) IT 藍(lán)軍即可完成全部自動(dòng)化演練過(guò)程。
典型案例
驗(yàn)證消息隊(duì)列單節(jié)點(diǎn)假死 hang 住時(shí)服務(wù)的可用性。
- 演練場(chǎng)景:
消息隊(duì)列單個(gè) Broker 節(jié)點(diǎn) hang 住,驗(yàn)證消息收發(fā)是否正常。
- 穩(wěn)定性預(yù)期:
單個(gè) broker 異常不影響其他節(jié)點(diǎn)消息發(fā)送,故障節(jié)點(diǎn)將被排除出可用節(jié)點(diǎn)列表。短暫 tps 下降后,消息發(fā)送恢復(fù)正常 tps。
- 演練中穩(wěn)定性異常:
節(jié)點(diǎn) hang 住后,tps 驟降為 0,不符合預(yù)期;
- 改進(jìn)成果:
1. 客戶端引入熔斷機(jī)制,消息發(fā)送重試失敗后不再嘗試往故障節(jié)點(diǎn)發(fā)送消息,避免了持續(xù)不可用;
2. namesrv 路由服務(wù)主動(dòng)將 broker 失效信息推送至客戶端,減少故障恢復(fù)時(shí)長(zhǎng)。
浩鯨混沌工程實(shí)踐
基于混沌工程實(shí)踐,我們意識(shí)到,故障演練屬于穩(wěn)定性建設(shè)中的一環(huán),而要做到穩(wěn)定性提升,故障的應(yīng)急響應(yīng)處理是一個(gè)環(huán)環(huán)相扣的鏈條,任一環(huán)節(jié)的缺失,影響總體的穩(wěn)定性質(zhì)量。建立故障協(xié)同處理響應(yīng)鏈還是一個(gè)長(zhǎng)足發(fā)展的過(guò)程。
目前,我們?cè)?#xff1a;
- 規(guī)劃層面,推動(dòng)故障演練能力分層;
- 平臺(tái)層面,致力于打通架構(gòu)感知及運(yùn)維組件的聯(lián)動(dòng)協(xié)調(diào);
- 制度層面,建立故障應(yīng)急協(xié)同響應(yīng)鏈;
- 演練實(shí)施層面,將故障演練從測(cè)試預(yù)生產(chǎn)環(huán)境向生產(chǎn)環(huán)境邁進(jìn);
- 積極貢獻(xiàn)力量,回饋開(kāi)源社區(qū),隨著底層注入工具chaosblade的蓬勃發(fā)展,引入更豐富的故障類型和靈活的注入方式。
以浩鯨科技內(nèi)部混沌工程實(shí)踐為例,對(duì) 30+ 重要產(chǎn)品線編排實(shí)施各種類型的演練,形成 月/季度 周期性故障演練累計(jì) 200+ 用例,以確保整個(gè)產(chǎn)品線能應(yīng)對(duì)業(yè)務(wù)極端條件下的壓力。全面提升開(kāi)放平臺(tái)應(yīng)用服務(wù)水平,為浩鯨云系統(tǒng)架構(gòu)的持續(xù)優(yōu)化、產(chǎn)品的快速創(chuàng)新提供堅(jiān)實(shí)支撐。
原文鏈接:https://developer.aliyun.com/article/788867?
版權(quán)聲明:本文內(nèi)容由阿里云實(shí)名注冊(cè)用戶自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,阿里云開(kāi)發(fā)者社區(qū)不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。具體規(guī)則請(qǐng)查看《阿里云開(kāi)發(fā)者社區(qū)用戶服務(wù)協(xié)議》和《阿里云開(kāi)發(fā)者社區(qū)知識(shí)產(chǎn)權(quán)保護(hù)指引》。如果您發(fā)現(xiàn)本社區(qū)中有涉嫌抄襲的內(nèi)容,填寫(xiě)侵權(quán)投訴表單進(jìn)行舉報(bào),一經(jīng)查實(shí),本社區(qū)將立刻刪除涉嫌侵權(quán)內(nèi)容。總結(jié)
以上是生活随笔為你收集整理的浩鲸科技基于ChaosBlade的混沌工程实践的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 云原生编程挑战赛--Serverless
- 下一篇: 如何用 Nacos 构建服务网格生态?