阿里云马劲:保证云产品持续拥有稳定性的实践和思考
對(duì)所有的技術(shù)人員來(lái)說(shuō),業(yè)務(wù)可靠性提升是一個(gè)系統(tǒng)工程,涉及網(wǎng)絡(luò)管理、IDC管理、服務(wù)器管理、交付管理、變更管理、故障管理、監(jiān)控管理、預(yù)案管理、根因分析、容量規(guī)劃、容災(zāi)演練、標(biāo)準(zhǔn)化建設(shè)、集成測(cè)試、泛操作管理、權(quán)限管理、數(shù)據(jù)安全管理等方方面面,隨著先進(jìn)技術(shù)的應(yīng)用、業(yè)務(wù)云化、微服務(wù)化等,業(yè)務(wù)架構(gòu)變得更加復(fù)雜,任何一個(gè)環(huán)節(jié)出現(xiàn)問(wèn)題,哪怕是一個(gè)小問(wèn)題都可能演變成大故障,我們更加迫切需要一種新的方式提升業(yè)務(wù)可靠性。
業(yè)界做法和阿里云的探索
先跟大家聊聊業(yè)界是怎么多的?諸如Netflix探索通過(guò)異常注入的方式提升其視頻服務(wù)的可靠性[1],已經(jīng)演進(jìn)成獨(dú)立的“混沌自動(dòng)化平臺(tái)”(ChAP,Chaos Automation Platform);Microsoft Azure 在Netflix之后也研發(fā)了自己的異常注入平臺(tái);Google通過(guò)研發(fā)自動(dòng)化平臺(tái)來(lái)替代傳統(tǒng)模型中的人工操作,在業(yè)務(wù)可靠性提升的重要方向都有對(duì)應(yīng)的平臺(tái)實(shí)現(xiàn),參考《Site. Reliability. Engineering》;在阿里云已經(jīng)有了Monkey King 平臺(tái),實(shí)現(xiàn)系統(tǒng)級(jí)別諸如宕機(jī)、磁盤(pán)掉盤(pán)、網(wǎng)卡丟包等異常注入。Netflix ChAP關(guān)注的是業(yè)務(wù)自身可靠性提升,不太適合專(zhuān)有云以及公共云這種模式;Google很多平臺(tái)基于其強(qiáng)大的研發(fā)能力,在產(chǎn)品內(nèi)部實(shí)現(xiàn)大量可靠性設(shè)計(jì)與代碼嵌入,我們現(xiàn)在還比較難直接照搬;Monkey King已經(jīng)能很好的實(shí)現(xiàn)異常注入的功能,但該注入哪些異常,該如何評(píng)估云產(chǎn)品的可靠性還在探索中。結(jié)合綜上實(shí)踐和思考,我們?cè)跇I(yè)界經(jīng)驗(yàn)的基礎(chǔ)上,結(jié)合云特點(diǎn)正在探索通過(guò)混沌工程理念[2]提升系統(tǒng)可靠性。
混沌工程理念:指在系統(tǒng)可靠性設(shè)計(jì)范圍內(nèi)實(shí)踐一些可在系統(tǒng)(對(duì)專(zhuān)有云是在仿真系統(tǒng))內(nèi)引發(fā)失效的實(shí)驗(yàn),在進(jìn)行每個(gè)實(shí)驗(yàn)之前工程師會(huì)提出一個(gè)導(dǎo)致系統(tǒng)失效的假設(shè)場(chǎng)景,進(jìn)而設(shè)計(jì)一個(gè)實(shí)驗(yàn)去引發(fā)或模擬該場(chǎng)景,并以受控、自動(dòng)化的方式開(kāi)展實(shí)驗(yàn)。通過(guò)觀測(cè)系統(tǒng)的反饋,對(duì)不符合預(yù)期的結(jié)果進(jìn)行深入分析并持續(xù)改進(jìn)。在我們的實(shí)踐中重點(diǎn)關(guān)注系統(tǒng)可靠性提升的三個(gè)問(wèn)題:
**1. 該如何降低故障頻度、重復(fù)故障比例、提升監(jiān)控有效性與故障處理效率
通過(guò)混沌工程提升可靠性包括如下圖示幾大部分:
1、SSRD設(shè)計(jì)
和對(duì)應(yīng)產(chǎn)品的負(fù)責(zé)人一起確定用哪些指標(biāo)來(lái)描述服務(wù)的穩(wěn)定狀態(tài),常見(jiàn)的指標(biāo)可以參考服務(wù)的SLA、SLO設(shè)計(jì)。這些指標(biāo)主要用來(lái)描述系統(tǒng)的可靠性設(shè)計(jì)以及衡量的指標(biāo)。在這個(gè)過(guò)程中,我們會(huì)和云產(chǎn)品的負(fù)責(zé)人一起通過(guò)歷史故障分析討論我們的云產(chǎn)品可靠性該如何設(shè)計(jì),是否需要增加進(jìn)而逐漸完善云產(chǎn)品的可靠性體系。
2、FMEA分析
針對(duì)云產(chǎn)品的特性、所運(yùn)行的環(huán)境、強(qiáng)弱依賴(lài)分析、故障頻次、發(fā)生后影響、歷史故障等因素建立故障關(guān)聯(lián)模型,諸如系統(tǒng)是否可冗余單點(diǎn)異常、發(fā)生頻率是什么、如果發(fā)生對(duì)用戶(hù)影響有多大等等。
3、ACP(Apsara Chaos Platform)?
實(shí)現(xiàn)基礎(chǔ)異常注入、復(fù)雜任務(wù)編排以及異常任務(wù)自動(dòng)調(diào)度功能
本文將重點(diǎn)介紹FMEA分析以及ACP平臺(tái)
FMEA分析和ACP平臺(tái)介紹
為了發(fā)現(xiàn)業(yè)務(wù)存在的隱患,我們首先需要想清楚需要構(gòu)建哪些異常,為此我們從公共云以及專(zhuān)有云海量故障入手,通過(guò)對(duì)這些故障的分析、聚類(lèi),我們抽取了第一版云平臺(tái)下的105種故障模式,通過(guò)這些基礎(chǔ)故障及其組合我們可以構(gòu)建超萬(wàn)種異常場(chǎng)景。
另外20%左右故障基于現(xiàn)有技術(shù)無(wú)法有效的模擬,比如第三方依賴(lài)引入的問(wèn)題、程序BUG以及特殊機(jī)型硬件等異常。
回顧這些基于上千種CASE抽取的故障模式,感慨萬(wàn)深,每一次故障都是血的教訓(xùn),我們努力的避免并預(yù)防故障的發(fā)生。而如今恰恰也是這些寶貴的經(jīng)驗(yàn)與知識(shí)再一次指引我們未來(lái)的方向。在一期我們還是大量依靠人工來(lái)分析和提煉這些異常模式,難免有遺漏和不準(zhǔn)確,目前在進(jìn)行中的二期我們正探索通過(guò)AI方式抽取更復(fù)雜的故障模式進(jìn)而覆蓋更廣的異常場(chǎng)景,未來(lái)有了新成果也會(huì)和各位讀者共同探討
在ACP設(shè)計(jì)中,Scene用來(lái)描述異常場(chǎng)景,每個(gè)異常Pattern可以創(chuàng)建一個(gè)單一的異常場(chǎng)景。也可以由一個(gè)或幾個(gè)基礎(chǔ)異常組合而成,組合的方式見(jiàn)下文異常立方體模型。任務(wù)調(diào)度引擎實(shí)現(xiàn)對(duì)Scene的調(diào)度,每次異常注入對(duì)應(yīng)一個(gè)JOB(任務(wù)),當(dāng)前系統(tǒng)為了保證Scene不會(huì)被反復(fù)調(diào)度,全局控制保證一個(gè)Scene只能被調(diào)度一次。每個(gè)JOB提供若干操作原語(yǔ)(CREATE、DELETE、START、STOP、SUSPEND)提供人工干預(yù)接口。同步后臺(tái)會(huì)有Service Check模塊,主動(dòng)關(guān)注SSRD中涉及的核心指標(biāo),如果發(fā)現(xiàn)異常會(huì)自動(dòng)觸發(fā)JOB暫停。我們嘗試進(jìn)行一場(chǎng)場(chǎng)景的仿真,比如 Gray failures異常,它是諸如服務(wù)器假死、網(wǎng)絡(luò)抖動(dòng)、IO hang、某個(gè)硬件設(shè)備單核CPU被打滿(mǎn)、流量陡增等異常。這些看似小問(wèn)題系統(tǒng)稍微處理不當(dāng)便可能演變成大故障。
如下圖我們預(yù)期隨著業(yè)務(wù)量增漲資源消耗是線(xiàn)性增漲,但實(shí)際上可能是業(yè)務(wù)量增漲到某個(gè)節(jié)點(diǎn),資源還沒(méi)有達(dá)到瓶頸的時(shí)候,性能確急劇下降而出現(xiàn)嚴(yán)重的雪崩點(diǎn)。如果我們不能及時(shí)發(fā)現(xiàn)這些隱患點(diǎn),那么在生產(chǎn)系統(tǒng)高峰期發(fā)生的時(shí)候會(huì)是非常可怕的。
因此在ACP平臺(tái)上,我們?cè)诩杉瘓F(tuán)Monkey King平臺(tái)第一、二大類(lèi)異常仿真的基礎(chǔ)上開(kāi)發(fā)了Gray failures異常仿真引擎,支持諸如通過(guò)線(xiàn)性方式模擬CPU消耗自然增長(zhǎng)、通過(guò)正弦方式模擬網(wǎng)絡(luò)抖動(dòng)式丟包、通過(guò)高斯方式模擬流量陡增等異常仿真,如下圖所示:
為了能支持更復(fù)雜的組合類(lèi)異常場(chǎng)景,我們調(diào)研了Airflow[3]以及Jenkins[4]等工作流引擎,都能滿(mǎn)足需求,但Jenkins偏重,每次流創(chuàng)建和生成都需要分鐘以上,難以滿(mǎn)足時(shí)效性要求。Airflow依賴(lài)第三方庫(kù)非常多,會(huì)偶爾出現(xiàn)流夯住的問(wèn)題,雖然是開(kāi)源的,但代碼量巨大,出現(xiàn)問(wèn)題定位和修復(fù)成本非常高。為此我們實(shí)現(xiàn)了類(lèi)似Airflow一樣的輕量級(jí)流編排引擎,可以滿(mǎn)足簡(jiǎn)單任務(wù)的編排需求。但從長(zhǎng)期來(lái)看,我們更傾向于切換到Airflow進(jìn)而支持更高并發(fā)量、更復(fù)雜的流描述能力。
除此之外,為了能支撐超萬(wàn)種異常場(chǎng)景自動(dòng)調(diào)度,我們自研了分布式任務(wù)調(diào)度框架,消除單點(diǎn)隱患以及解決未來(lái)高吞吐場(chǎng)景的需求。當(dāng)前在任務(wù)調(diào)度引擎中已經(jīng)引入優(yōu)先級(jí)的概念,支持三種任務(wù)級(jí)別,同級(jí)別中的任務(wù)無(wú)優(yōu)先級(jí),采用FIFO的方式調(diào)度,支持并發(fā)度控制。
ACP 交互界面展示分享
為了更好管理異常組合,我們引入了數(shù)據(jù)立方體概念,每個(gè)小方塊代表一類(lèi)基礎(chǔ)異常,對(duì)于數(shù)據(jù)立方體,我們可以通過(guò)切片、切塊、上卷(roll-up)、下鉆(drill-down)等方式生成更復(fù)雜的組合類(lèi)異常。異常立方體中我們會(huì)對(duì)異常進(jìn)行分級(jí):
Low級(jí)別:系統(tǒng)對(duì)于這些異常可以?xún)?yōu)雅自動(dòng)恢復(fù)無(wú)需人工干預(yù);
Medium級(jí)別:系統(tǒng)可以從這些異常中優(yōu)雅恢復(fù),但可能會(huì)導(dǎo)致一些業(yè)務(wù)降級(jí)或者服務(wù)可靠性的影響;
High級(jí)別:這個(gè)級(jí)別的異常注入對(duì)服務(wù)可靠性存在較大的影響,需要較多的人工干預(yù)才能恢復(fù)。
樣例:對(duì)任意一個(gè)異常事件 Ae =F(X=1,Y=1,Z=1) 表示RDS的Low程度的Hardware Failure(Low級(jí)別諸如宕機(jī)故障)
ACP任務(wù)創(chuàng)建PORTAL
通過(guò)如下多種隨機(jī)模式可以覆蓋盡可能多的異常模擬
Mode:Single:指定異常注入對(duì)象;Random One:隨機(jī)選擇一個(gè)操作對(duì)象;Sequence:順序選擇所有操作對(duì)象
Device:Single:指定操作設(shè)備;Random One:隨機(jī)選擇一個(gè)操作設(shè)備;
Pattern:Linear:線(xiàn)性模擬;Sine:正弦模擬;Gaussian:高斯模擬
ACP異常模式四象限
用來(lái)描述這些異常PATTERN對(duì)用戶(hù)的潛在影響,目標(biāo)不斷通過(guò)技術(shù)、管理、流程等手段將第一象限中高風(fēng)險(xiǎn)、高影響的隱患優(yōu)化到第三象限(更低的風(fēng)險(xiǎn)以及更小的影響)
云產(chǎn)品可靠性設(shè)計(jì)與隱患消除
專(zhuān)有云有它的特殊性,故障在專(zhuān)有云的環(huán)境下往往影響更大,一個(gè)單一的故障在幾百朵云內(nèi)可能就是幾百次故障.....更需要我們?cè)诋a(chǎn)品設(shè)計(jì)過(guò)程中消除隱患,而這個(gè)過(guò)程可行方式之一就是啟動(dòng)SSRD設(shè)計(jì),在產(chǎn)品構(gòu)建之初啟動(dòng)可靠性設(shè)計(jì)并通過(guò)FMEA分析以及ACP不斷挖掘潛在隱患并打磨故障處理的整個(gè)閉環(huán),如下圖:
在整個(gè)實(shí)驗(yàn)過(guò)程中,我們不斷觀測(cè)并采集系統(tǒng)的核心指標(biāo):
1、監(jiān)控是否能及時(shí)發(fā)現(xiàn),是否有報(bào)警
2、出現(xiàn)的故障,全鏈路監(jiān)控是否能及時(shí)發(fā)現(xiàn)
3、對(duì)應(yīng)的預(yù)案是否生效
4、系統(tǒng)的自愈能力是否符合設(shè)計(jì)預(yù)期
5、如果系統(tǒng)沒(méi)有達(dá)到預(yù)期,該如何優(yōu)化
對(duì)任何環(huán)節(jié)存在缺失或者不完善的隱患,持續(xù)推動(dòng)優(yōu)化
云產(chǎn)品的可靠性量化評(píng)估一直比較棘手,傳統(tǒng)方式更多依靠經(jīng)驗(yàn)來(lái)評(píng)估。有了ACP以及不斷積累的異常場(chǎng)景知識(shí)庫(kù),我們便可以在仿真環(huán)境下驗(yàn)證并給出量化的評(píng)估結(jié)果,而這些不但可以提早幫云產(chǎn)品發(fā)現(xiàn)潛在的隱患而且可以給出優(yōu)化的建議和方向。有一個(gè)很重要的場(chǎng)景就是業(yè)務(wù)上云以后其所在的運(yùn)行環(huán)境已經(jīng)發(fā)生了巨變,而用戶(hù)的業(yè)務(wù)需要提早適應(yīng)新的環(huán)境以及應(yīng)對(duì)新的挑戰(zhàn),最有效的方式之一就是通過(guò)容災(zāi)演練在業(yè)務(wù)無(wú)流量或仿真環(huán)境下模擬異常發(fā)生并觀測(cè)業(yè)務(wù)的應(yīng)激能力,對(duì)發(fā)現(xiàn)的問(wèn)題及早推動(dòng)改進(jìn)和優(yōu)化,提前消除隱患。
現(xiàn)在還有一個(gè)難點(diǎn)就是針對(duì)不同的云產(chǎn)品我們?cè)摻⒛男┊惓?chǎng)景?這還需要繼續(xù)實(shí)踐。非常歡迎各位云產(chǎn)品的負(fù)責(zé)人和技術(shù)同學(xué)一起參與進(jìn)來(lái)共建,一同攜手提升產(chǎn)品的可靠性。
?
原文鏈接
本文為云棲社區(qū)原創(chuàng)內(nèi)容,未經(jīng)允許不得轉(zhuǎn)載。
總結(jié)
以上是生活随笔為你收集整理的阿里云马劲:保证云产品持续拥有稳定性的实践和思考的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 阿里云容器技术专家莫源:乘风踏雪归来,仍
- 下一篇: Nvidia GPU如何在Kuberne