美團(tuán)外賣(mài):日訂單量超過(guò)1600萬(wàn)的自動(dòng)化業(yè)務(wù)運(yùn)維之路
背景
美團(tuán)外賣(mài)業(yè)務(wù)在互聯(lián)網(wǎng)行業(yè)是非常獨(dú)特的,不僅流程復(fù)雜——從用戶下單、商家接單到配送員接單、交付,而且壓力和流量在午、晚高峰時(shí)段非常集中。同時(shí),外賣(mài)業(yè)務(wù)的增長(zhǎng)非常迅猛,自2013年11月上線到最近峰值突破1600萬(wàn),還不到4年。在這種情況下,一旦出現(xiàn)事故,單純靠人工排查解決問(wèn)題,存在較多的局限性。本文將詳細(xì)解析問(wèn)題發(fā)現(xiàn)、根因分析、問(wèn)題解決等自動(dòng)化運(yùn)維體系的建設(shè)歷程與相關(guān)設(shè)計(jì)原則。
外賣(mài)業(yè)務(wù)特點(diǎn)
首先從業(yè)務(wù)本身具有的一些特點(diǎn)來(lái)講一下自動(dòng)化業(yè)務(wù)運(yùn)維的必要性。
業(yè)務(wù)流程復(fù)雜
圖1 用戶角度的美團(tuán)外賣(mài)技術(shù)體系
美團(tuán)外賣(mài)的定位是“圍繞在線商品交易與及時(shí)送達(dá)的O2O電商交易平臺(tái)”。圖1就是用戶在使用美團(tuán)外賣(mài)App過(guò)程中涉及到的技術(shù)模塊,歷經(jīng)用戶下單-->系統(tǒng)發(fā)給商家-->商家準(zhǔn)備外賣(mài)-->配送,到最后用戶收到商品比如熱乎乎的盒飯,整個(gè)過(guò)程的時(shí)間需要控制在半小時(shí)之內(nèi)。在這背后,整個(gè)產(chǎn)品線上還會(huì)涉及很多數(shù)據(jù)分析、統(tǒng)計(jì)、結(jié)算、合同等各個(gè)端的交互,因此,對(duì)一致性的要求高,同時(shí)并發(fā)量也很高。
每日流量徒增明顯
圖2 美團(tuán)外賣(mài)常規(guī)業(yè)務(wù)監(jiān)控圖
外賣(mài)業(yè)務(wù)每天在特定時(shí)刻流量陡增明顯,有時(shí)候與第三方做的一些活動(dòng)會(huì)造成系統(tǒng)流量瞬間達(dá)到午高峰的2~3倍,如圖2所示。
業(yè)務(wù)增長(zhǎng)迅猛
圖3 美團(tuán)外賣(mài)重要成長(zhǎng)里程碑
美團(tuán)外賣(mài)自2013年上線至2017年10月份,在不到4年的時(shí)間里,日提單已達(dá)2000萬(wàn),日完成訂單突破1600萬(wàn),如圖3所示。這期間,業(yè)務(wù)產(chǎn)品一直處在高速迭代的過(guò)程中,某些數(shù)據(jù)訪問(wèn)的服務(wù)量會(huì)達(dá)到日均120億+次,QPS近40萬(wàn)。現(xiàn)在如果在午高峰出現(xiàn)一個(gè)小小的事故,就會(huì)造成比較大的損失。
綜上所述,我們需要幫助開(kāi)發(fā)人員準(zhǔn)確地定位問(wèn)題和快速解決問(wèn)題。
需要解決問(wèn)題
圖4 開(kāi)發(fā)人員日常監(jiān)控痛點(diǎn)
我們?cè)谌粘5臉I(yè)務(wù)運(yùn)維工作中經(jīng)常會(huì)碰到一些問(wèn)題困擾著開(kāi)發(fā)人員,如圖4所示,主要有四大痛點(diǎn):
① 各種維度的事件通知、報(bào)警事件充斥著開(kāi)發(fā)人員的IM,我們需要花很多精力去配置和優(yōu)化報(bào)警閾值、報(bào)警等級(jí)才不會(huì)出現(xiàn)很多誤報(bào)。我們希望可以將各種服務(wù)的報(bào)警指標(biāo)和閾值標(biāo)準(zhǔn)化、自動(dòng)化,然后自動(dòng)收集這些事件進(jìn)行統(tǒng)計(jì)。一方面可以幫助開(kāi)發(fā)人員提前發(fā)現(xiàn)問(wèn)題潛在的風(fēng)險(xiǎn),另一方面為我們找出問(wèn)題的根本原因提供有力的數(shù)據(jù)支持。
② 公司有多套監(jiān)控系統(tǒng),它們有各自的職責(zé)定位,但是互相沒(méi)有關(guān)聯(lián),所以開(kāi)發(fā)人員在排查問(wèn)題時(shí)需要帶著參數(shù)在不同的系統(tǒng)之間切換,這就降低了定位問(wèn)題的效率。
③ 我們的代碼中會(huì)有大量的降級(jí)限流開(kāi)關(guān),在服務(wù)異常時(shí)進(jìn)行相應(yīng)的保護(hù)操作。這些開(kāi)關(guān)隨著產(chǎn)品快速地迭代,我們并不能確定它們是否還有效。另外,我們需要較準(zhǔn)確地進(jìn)行容量規(guī)劃以應(yīng)對(duì)快速增長(zhǎng)的業(yè)務(wù)量。這些都需要通過(guò)全鏈路壓測(cè)幫我們不斷地驗(yàn)證,并發(fā)現(xiàn)性能瓶頸,有效地評(píng)估服務(wù)容量。
④ 開(kāi)發(fā)人員收到各種報(bào)警之后,通常都會(huì)根據(jù)自己的經(jīng)驗(yàn)進(jìn)行問(wèn)題的排查,這些排查經(jīng)驗(yàn)完全可以標(biāo)準(zhǔn)化(比如對(duì)某個(gè)服務(wù)的TP99異常,需要進(jìn)行的排查操作),問(wèn)題排查流程標(biāo)準(zhǔn)化之后,就可以通過(guò)計(jì)算機(jī)自動(dòng)化。我們提高診斷的準(zhǔn)確度,就需要將這個(gè)流程更加智能化,減少人為參與。
核心目標(biāo)
我們希望通過(guò)一些自動(dòng)化措施提升運(yùn)維效率,從而將開(kāi)發(fā)人員從日常的業(yè)務(wù)運(yùn)維工作中解放出來(lái),先來(lái)看一個(gè)用戶使用場(chǎng)景:
如圖5所示,觸發(fā)服務(wù)保護(hù)有兩條路徑。
① 第一條,當(dāng)用戶在前期接收到我們的診斷報(bào)警后,直接被引導(dǎo)進(jìn)入該報(bào)警可能會(huì)影響到業(yè)務(wù)大盤(pán)。這時(shí)我們要查看業(yè)務(wù)圖表,如果影響到業(yè)務(wù),引導(dǎo)用戶直接進(jìn)入該業(yè)務(wù)圖表對(duì)應(yīng)的核心鏈路,定位出問(wèn)題的根本原因,進(jìn)而再判斷是否要觸發(fā)該核心鏈路上對(duì)應(yīng)的服務(wù)保護(hù)開(kāi)關(guān)或預(yù)案。
圖5 自動(dòng)化業(yè)務(wù)運(yùn)維系統(tǒng)核心建設(shè)目標(biāo)
② 第二條,用戶也可以直接通過(guò)診斷報(bào)警進(jìn)入對(duì)應(yīng)的核心鏈路,查看最終引起異常的根本原因,引導(dǎo)用戶判斷是否需要觸發(fā)相應(yīng)的服務(wù)保護(hù)預(yù)案。
發(fā)現(xiàn)問(wèn)題-->診斷問(wèn)題-->解決問(wèn)題,這個(gè)過(guò)程每一步都需要不斷地提升準(zhǔn)確度,整個(gè)流程需要通過(guò)全鏈路壓測(cè)不斷驗(yàn)證,當(dāng)某些場(chǎng)景準(zhǔn)確度非常高的時(shí)候,就可以變?yōu)樽詣?dòng)化方案。
因此,我們的核心目標(biāo)是,當(dāng)整個(gè)方案可以自動(dòng)化進(jìn)行下去之后,對(duì)于用戶來(lái)說(shuō)的使用場(chǎng)景就變成了:收到異常報(bào)警->收到業(yè)務(wù)服務(wù)恢復(fù)通知。隨著自動(dòng)化方案越來(lái)越完備,開(kāi)發(fā)人員可以更加關(guān)注業(yè)務(wù)邏輯的開(kāi)發(fā)。
重點(diǎn)系統(tǒng)體系建設(shè)
確定了核心目標(biāo),我們開(kāi)始著手開(kāi)發(fā)產(chǎn)品。接下來(lái)就介紹一下我們建設(shè)這套系統(tǒng)的核心產(chǎn)品以及各個(gè)產(chǎn)品模塊之間的關(guān)聯(lián),其它設(shè)計(jì)細(xì)節(jié)與我們碰到的坑,本文不著重描述了,之后會(huì)有更加針對(duì)性的文章分享出來(lái)。
體系架構(gòu)
如圖6所示,在自動(dòng)化業(yè)務(wù)運(yùn)維系統(tǒng)中,業(yè)務(wù)大盤(pán)與核心鏈路作為用戶使用的入口,一旦用戶查看業(yè)務(wù)指標(biāo)出現(xiàn)問(wèn)題,我們就需要快速定位該業(yè)務(wù)指標(biāo)異常的根本原因。我們通過(guò)對(duì)核心鏈路上服務(wù)狀態(tài)的分析,幫助開(kāi)發(fā)人員定位最終的問(wèn)題節(jié)點(diǎn),并建議開(kāi)發(fā)人員需要觸發(fā)哪些服務(wù)保護(hù)預(yù)案。業(yè)務(wù)大盤(pán)的預(yù)測(cè)報(bào)警、核心鏈路的紅盤(pán)診斷報(bào)警以及已經(jīng)收集到各個(gè)維度的報(bào)警事件,如果能對(duì)它們做進(jìn)一步的統(tǒng)計(jì)分析,可以幫助開(kāi)發(fā)人員從更加宏觀的角度提前發(fā)現(xiàn)服務(wù)可能潛在問(wèn)題,相當(dāng)于提前對(duì)服務(wù)做健康檢查。我們需要定期通過(guò)全鏈路壓測(cè)來(lái)不斷驗(yàn)證問(wèn)題診斷和服務(wù)保護(hù)是否有效,在壓測(cè)時(shí)可以看到各個(gè)場(chǎng)景下的服務(wù)健康狀態(tài),對(duì)服務(wù)節(jié)點(diǎn)做到有效的容量規(guī)劃。
圖6 業(yè)務(wù)監(jiān)控運(yùn)維體系架構(gòu)
業(yè)務(wù)大盤(pán)
外賣(mài)業(yè)務(wù)會(huì)有非常多的業(yè)務(wù)指標(biāo)進(jìn)行監(jiān)控,業(yè)務(wù)指標(biāo)和系統(tǒng)指標(biāo)、服務(wù)指標(biāo)不同,需要業(yè)務(wù)方根據(jù)不同的業(yè)務(wù)自行上報(bào)監(jiān)控?cái)?shù)據(jù)。業(yè)務(wù)大盤(pán)作為業(yè)務(wù)運(yùn)維系統(tǒng)的使用入口,可以讓開(kāi)發(fā)人員快速查看自己關(guān)心的業(yè)務(wù)指標(biāo)的實(shí)時(shí)狀態(tài)以及最近幾天的走勢(shì)。
圖7 業(yè)務(wù)監(jiān)控大盤(pán)及拓展能力
如圖7所示,業(yè)務(wù)大盤(pán)不光需要展示業(yè)務(wù)監(jiān)控指標(biāo),還需要有很強(qiáng)的對(duì)外擴(kuò)展能力,比如:
① 當(dāng)出現(xiàn)業(yè)務(wù)指標(biāo)異常時(shí),根據(jù)后臺(tái)的監(jiān)控?cái)?shù)據(jù)分析,可以手動(dòng)或者自動(dòng)進(jìn)行事件標(biāo)記,告知開(kāi)發(fā)人員是什么原因引起了業(yè)務(wù)指標(biāo)的波動(dòng),做到用戶信息量的快速同步。
② 可以帶著時(shí)間戳與類(lèi)型快速引導(dǎo)開(kāi)發(fā)人員進(jìn)入其它監(jiān)控系統(tǒng),提高開(kāi)發(fā)人排查問(wèn)題的效率。
我們會(huì)定期對(duì)生產(chǎn)系統(tǒng)進(jìn)行全鏈路壓測(cè),同時(shí)為了壓測(cè)數(shù)據(jù)不污染真實(shí)的業(yè)務(wù)數(shù)據(jù),會(huì)對(duì)壓測(cè)流量監(jiān)控進(jìn)行隔離。
外賣(mài)業(yè)務(wù)場(chǎng)景,使我們大多數(shù)業(yè)務(wù)監(jiān)控?cái)?shù)據(jù)都呈現(xiàn)出很強(qiáng)的周期性,針對(duì)業(yè)務(wù)數(shù)據(jù)我們可以利用歷史數(shù)據(jù)使用Holt-Winters等模型進(jìn)行業(yè)務(wù)數(shù)據(jù)預(yù)測(cè),當(dāng)我們的實(shí)際值與預(yù)測(cè)值不在置信區(qū)間內(nèi)將直接進(jìn)行告警。
因?yàn)槭歉悠驑I(yè)務(wù)的運(yùn)維系統(tǒng),我們針對(duì)敏感的業(yè)務(wù)指標(biāo)進(jìn)行了相應(yīng)的權(quán)限管理。
為了增加系統(tǒng)使用場(chǎng)景,我們需要支持移動(dòng)端,使用戶可以在任何地方通過(guò)手機(jī)就可以查看自己關(guān)心的監(jiān)控大盤(pán)并觸發(fā)服務(wù)保護(hù)預(yù)案。
核心鏈路
核心鏈路也是系統(tǒng)主要的使用入口,用戶可以通過(guò)核心鏈路快速定位是哪一個(gè)調(diào)用鏈出現(xiàn)了問(wèn)題。如圖8所示,這里會(huì)涉及兩個(gè)步驟:
① 我們需要給核心鏈路上的服務(wù)節(jié)點(diǎn)進(jìn)行健康評(píng)分,根據(jù)評(píng)分模型來(lái)界定問(wèn)題嚴(yán)重的鏈路。這里我們會(huì)根據(jù)服務(wù)的各個(gè)指標(biāo)來(lái)描繪一個(gè)服務(wù)的問(wèn)題畫(huà)像,問(wèn)題畫(huà)像中的指標(biāo)也會(huì)有權(quán)重劃分,比如:當(dāng)服務(wù)出現(xiàn)了失敗率報(bào)警、TP99報(bào)警,大量異常日志則會(huì)進(jìn)行高權(quán)重的加分。
② 當(dāng)我們確認(rèn)完某條鏈路出現(xiàn)了問(wèn)題,在鏈路上越往后的節(jié)點(diǎn)可能是引起問(wèn)題的根節(jié)點(diǎn),我們會(huì)實(shí)時(shí)獲取該節(jié)點(diǎn)更多相關(guān)監(jiān)控指標(biāo)來(lái)進(jìn)行分析診斷,這里會(huì)融合開(kāi)發(fā)人員日常排查問(wèn)題的SOP,最終可能定位到是這個(gè)服務(wù)節(jié)點(diǎn)某些服務(wù)器的磁盤(pán)或者CPU等問(wèn)題。
圖8 核心鏈路產(chǎn)品建設(shè)路徑
我們最終會(huì)發(fā)出問(wèn)題診斷結(jié)果,這個(gè)結(jié)果在發(fā)出之后,還需要收集用戶的反饋,判斷診斷結(jié)果是否準(zhǔn)確,為我們后續(xù)優(yōu)化評(píng)分定位模型與診斷模型提供有力的數(shù)據(jù)支持。在核心鏈路建設(shè)前期,我們會(huì)建議開(kāi)發(fā)人員進(jìn)行相應(yīng)的服務(wù)保護(hù)預(yù)案觸發(fā),當(dāng)我們的診斷結(jié)果足夠準(zhǔn)確之后,可以針對(duì)固定問(wèn)題場(chǎng)景自動(dòng)化觸發(fā)服務(wù)保護(hù)預(yù)案,以縮短解決問(wèn)題的時(shí)間。
服務(wù)保護(hù)&故障演練
圖9 服務(wù)保護(hù)&故障演練模塊的核心功能
服務(wù)保護(hù)&故障演練模塊是讓我們的業(yè)務(wù)運(yùn)維體系形成閉環(huán)的重要部分,該模塊需要具備的核心功能如圖9所示。針對(duì)不同的保護(hù)需求,我們會(huì)有不同類(lèi)型的服務(wù)保護(hù)開(kāi)關(guān),這里主要有如下幾種:
① 降級(jí)開(kāi)關(guān):由于業(yè)務(wù)快速發(fā)展,在代碼中會(huì)有成百上千的降級(jí)開(kāi)關(guān)。在業(yè)務(wù)出現(xiàn)異常時(shí)需要手動(dòng)進(jìn)行降級(jí)操作。
② 限流開(kāi)關(guān):有些針對(duì)特定業(yè)務(wù)場(chǎng)景需要有相應(yīng)的限流保護(hù)措施。比如:針對(duì)單機(jī)限流主要是對(duì)自身服務(wù)器的資源保護(hù),針對(duì)集群限流主要是針對(duì)底層的DB或者Cache等存儲(chǔ)資源進(jìn)行資源保護(hù),還有一些其他限流需求都是希望可以在系統(tǒng)出現(xiàn)流量異常時(shí)有效地進(jìn)行保護(hù)。
③ Hystrix自動(dòng)熔斷:可以通過(guò)監(jiān)控異常數(shù)、線程數(shù)等簡(jiǎn)單指標(biāo),快速保護(hù)我們的服務(wù)健康狀態(tài)不會(huì)急劇惡化。
根據(jù)我們的運(yùn)維經(jīng)驗(yàn),在出現(xiàn)生產(chǎn)事故時(shí)可能會(huì)涉及到多個(gè)開(kāi)關(guān)的切換,這里就需要針對(duì)不同的故障場(chǎng)景預(yù)先設(shè)置服務(wù)保護(hù)預(yù)案,可以在出現(xiàn)問(wèn)題時(shí)通過(guò)一鍵操作對(duì)多個(gè)服務(wù)保護(hù)開(kāi)關(guān)進(jìn)行預(yù)設(shè)狀態(tài)的變更。我們既然有了應(yīng)對(duì)不同故障場(chǎng)景的服務(wù)保護(hù)預(yù)案,就需要時(shí)不時(shí)來(lái)驗(yàn)證這些服務(wù)保護(hù)預(yù)案是否真的可以起到預(yù)期的效果。
生產(chǎn)對(duì)應(yīng)的事故不常有,肯定也不能只指望生產(chǎn)真的出現(xiàn)問(wèn)題才進(jìn)行預(yù)案的驗(yàn)證,還需要針對(duì)不同的故障進(jìn)行模擬。當(dāng)我們生產(chǎn)服務(wù)出現(xiàn)問(wèn)題時(shí),不管是因?yàn)榫W(wǎng)絡(luò)原因還是硬件故障,大多數(shù)表現(xiàn)在服務(wù)上的可能是服務(wù)超時(shí)或者變慢、拋出異常。我們前期主要針對(duì)這幾點(diǎn)做到可以對(duì)核心鏈路上任一服務(wù)節(jié)點(diǎn)進(jìn)行故障演練,生產(chǎn)故障可能會(huì)同時(shí)多個(gè)節(jié)點(diǎn)出現(xiàn)故障,這里就需要我們的故障演練也需要支持預(yù)案管理。
服務(wù)保護(hù)是業(yè)務(wù)運(yùn)維終端措施,我們需要在軟件上可以讓用戶很方便地直達(dá)對(duì)應(yīng)的服務(wù)保護(hù),這里我們需要將服務(wù)保護(hù)與業(yè)務(wù)大盤(pán)、核心鏈路進(jìn)行整合,在開(kāi)發(fā)人員發(fā)現(xiàn)問(wèn)題時(shí)可以方便地進(jìn)入對(duì)應(yīng)的服務(wù)保護(hù)預(yù)案。有了這些保護(hù)措施與故障演練功能,結(jié)合與核心鏈路的關(guān)系,就可以結(jié)合故障診斷與全鏈路壓測(cè)進(jìn)行自動(dòng)化方面的建設(shè)了。
整合全鏈路壓測(cè)
我們現(xiàn)在定期會(huì)組織外賣(mài)全鏈路壓測(cè),每次壓測(cè)都會(huì)涉及很多人的配合,如果可以針對(duì)單一壓測(cè)場(chǎng)景進(jìn)行壓測(cè)將會(huì)大大縮短我們組織壓測(cè)的成本。如圖10所示,我們現(xiàn)在主要在全鏈路壓測(cè)的時(shí)候,針對(duì)壓測(cè)流量進(jìn)行不同場(chǎng)景的故障演練,在制造故障的同時(shí),驗(yàn)證服務(wù)保護(hù)預(yù)案是否可以像預(yù)期那樣啟動(dòng)保護(hù)服務(wù)的目的。后面會(huì)講一下我們針對(duì)全鏈路壓測(cè)自動(dòng)化建設(shè)思路。
圖10 提升全鏈路壓測(cè)給我們帶來(lái)的收益
自動(dòng)化路程
前面主要介紹了我們?cè)谧龌跇I(yè)務(wù)的運(yùn)維系統(tǒng)時(shí)需要的各個(gè)核心功能,下面重點(diǎn)介紹一下,我們?cè)谡麄€(gè)系統(tǒng)建設(shè)中,自動(dòng)化方面的建設(shè)主要集中在什么地方。
異常點(diǎn)自動(dòng)檢測(cè)
圖11 異常點(diǎn)自動(dòng)檢測(cè)
我們?cè)谧龊诵逆溌方ㄔO(shè)的時(shí)候,需要收集各個(gè)服務(wù)節(jié)點(diǎn)的報(bào)警事件,這些報(bào)警事件有服務(wù)調(diào)用時(shí)端到端的監(jiān)控指標(biāo),還有服務(wù)自身SLA的監(jiān)控指標(biāo)。在和開(kāi)發(fā)人員進(jìn)行溝通的時(shí)候了解到他們平時(shí)配置這些監(jiān)控指標(biāo)的時(shí)候耗費(fèi)了大量的人力,每個(gè)指標(biāo)的報(bào)警閾值都需要反復(fù)調(diào)整才能達(dá)到一個(gè)理想狀態(tài),基于這些監(jiān)控痛點(diǎn),我們希望可以通過(guò)分析歷史數(shù)據(jù)來(lái)自動(dòng)的檢測(cè)出異常點(diǎn),并自動(dòng)計(jì)算出應(yīng)有的報(bào)警閾值并設(shè)置。如圖11所示,我們根據(jù)不同監(jiān)控指標(biāo)的特點(diǎn),選擇不同的基線算法,并計(jì)算出其置信區(qū)間,用來(lái)幫助我們更加準(zhǔn)確的檢測(cè)異常點(diǎn)。比如我們的業(yè)務(wù)周期性比較強(qiáng),大多數(shù)監(jiān)控指標(biāo)都是在歷史同期呈現(xiàn)出正太分布,這個(gè)時(shí)候可以拿真實(shí)值與均值進(jìn)行比較,其差值在N倍標(biāo)準(zhǔn)差之外,則認(rèn)為該真實(shí)值是異常點(diǎn)。
自動(dòng)觸發(fā)服務(wù)保護(hù)
圖12 異常檢測(cè)與服務(wù)保護(hù)聯(lián)動(dòng)
我們的服務(wù)保護(hù)措施有一部分是通過(guò)Hystrix進(jìn)行自動(dòng)熔斷,另外一部分是我們已經(jīng)存在的上千個(gè)降級(jí)、限流開(kāi)關(guān),這部分開(kāi)關(guān)平時(shí)需要開(kāi)發(fā)人員根據(jù)自己的運(yùn)維經(jīng)驗(yàn)來(lái)手動(dòng)觸發(fā)。我們?nèi)绻軌蚋鶕?jù)各種監(jiān)控指標(biāo)準(zhǔn)確的診斷出異常點(diǎn),并事先將已經(jīng)確定的異常場(chǎng)景與我們的服務(wù)保護(hù)預(yù)案進(jìn)行關(guān)聯(lián),就可以自動(dòng)化的進(jìn)行服務(wù)保護(hù)預(yù)案的觸發(fā),如圖12所示。
壓測(cè)計(jì)劃自動(dòng)化
圖13 壓測(cè)計(jì)劃自動(dòng)化
我們定期進(jìn)行的外賣(mài)全鏈路壓測(cè),需要召集相關(guān)業(yè)務(wù)方進(jìn)行準(zhǔn)備和跟進(jìn),這其中涉及的數(shù)據(jù)構(gòu)造部分會(huì)關(guān)聯(lián)到很多業(yè)務(wù)方的改造、驗(yàn)證、準(zhǔn)備工作。如圖13所示,我們需要通過(guò)壓測(cè)計(jì)劃串聯(lián)整個(gè)準(zhǔn)備、驗(yàn)證過(guò)程,盡量少的有人為活動(dòng)參與到整個(gè)過(guò)程中。這其中我們需要進(jìn)行如下工作的準(zhǔn)備:
針對(duì)真實(shí)流量的改造,基礎(chǔ)數(shù)據(jù)構(gòu)造、數(shù)據(jù)脫敏、數(shù)據(jù)校驗(yàn)等盡可能通過(guò)任務(wù)提前進(jìn)行。
進(jìn)入到流量回放階段,我們可以針對(duì)典型的故障場(chǎng)景進(jìn)行故障預(yù)案的觸發(fā)(比如:Tair故障等)。
在故障演練的同時(shí),我們可以結(jié)合核心鏈路的關(guān)系數(shù)據(jù)準(zhǔn)確定位出與故障場(chǎng)景強(qiáng)相關(guān)的問(wèn)題節(jié)點(diǎn)。
結(jié)合我們針對(duì)典型故障場(chǎng)景事先建立的服務(wù)保護(hù)關(guān)系,自動(dòng)觸發(fā)對(duì)應(yīng)的服務(wù)保護(hù)預(yù)案。
在整個(gè)流程中,我們需要最終確認(rèn)各個(gè)環(huán)境的運(yùn)行效果是否達(dá)到了我們的預(yù)期,就需要每個(gè)環(huán)節(jié)都有相應(yīng)的監(jiān)控日志輸出,最終自動(dòng)化產(chǎn)出最終的壓測(cè)報(bào)告。
整個(gè)壓測(cè)計(jì)劃的自動(dòng)化進(jìn)程中,將逐漸減少系統(tǒng)運(yùn)行中人為參與的部分,逐步提升全鏈路壓測(cè)效率。我們希望,用戶點(diǎn)擊一個(gè)開(kāi)關(guān)開(kāi)始?jí)簻y(cè)計(jì)劃,然后等待壓測(cè)結(jié)果就可以了。
結(jié)語(yǔ)
圖14 自動(dòng)化建設(shè)后期發(fā)力點(diǎn)
在整個(gè)業(yè)務(wù)運(yùn)維系統(tǒng)建設(shè)中,只有更加準(zhǔn)確定位問(wèn)題根節(jié)點(diǎn),診斷出問(wèn)題根本原因才能逐步自動(dòng)化去做一些運(yùn)維動(dòng)作(比如:觸發(fā)降級(jí)開(kāi)關(guān),擴(kuò)容集群等)。如圖14所示,我們會(huì)在這些環(huán)節(jié)的精細(xì)化建設(shè)上進(jìn)行持續(xù)投入,希望檢測(cè)到任意維度的異常點(diǎn),向上推測(cè)出可能會(huì)影響哪些業(yè)務(wù)指標(biāo),影響哪些用戶體驗(yàn);向下依托于全鏈路壓測(cè)可以非常準(zhǔn)確的進(jìn)行容量規(guī)劃,節(jié)省資源。