另外一點(diǎn),通過故障平臺(tái)我們對(duì)所有的故障進(jìn)行匯總,系統(tǒng)能根據(jù)匯總的信息對(duì)不同的故障進(jìn)行分類,也能總結(jié)出我們線上不同故障類型的占比,進(jìn)而做一些定點(diǎn)的突破。
在故障管理之后,我們又做了一些數(shù)據(jù)挖掘相關(guān)的工作,在初期,我們運(yùn)維的數(shù)據(jù)主要來自于監(jiān)控平臺(tái)或者是業(yè)務(wù)主動(dòng)上報(bào),而在現(xiàn)在這個(gè)階段,我們會(huì)主動(dòng)挖掘一些信息,比如線上服務(wù)的請(qǐng)求量、響應(yīng)時(shí)間等來做一些定向的分析。
職責(zé)&使命
如上圖所示,我們的使命從最開始的變更與救火,到現(xiàn)在已經(jīng)逐漸轉(zhuǎn)變?yōu)榉阑鹋c驅(qū)動(dòng)變革。通過數(shù)據(jù)運(yùn)營,我們能反向的驅(qū)動(dòng)業(yè)務(wù)。工作核心是穩(wěn)定性,這一點(diǎn)一直沒變。
我們可以把運(yùn)維理解為運(yùn)營維護(hù),運(yùn)營是指通過經(jīng)驗(yàn)積累、數(shù)據(jù)分析,推動(dòng)整體服務(wù)質(zhì)量的改進(jìn);維護(hù)是針對(duì)線上的服務(wù),還有業(yè)務(wù)的需求,我們能夠用專業(yè)的技術(shù)來滿足他們。
下面講一下在穩(wěn)定性保障方面的實(shí)踐。
業(yè)務(wù)穩(wěn)定性保障實(shí)踐 故障起因&實(shí)例
首先,我們來總結(jié)下故障的起因,同時(shí)舉一些例子來說明具體的情況。
① 變更。美團(tuán)點(diǎn)評(píng)線上服務(wù)的日常發(fā)版超過300次,另外還有一些運(yùn)維的基礎(chǔ)變更,包括網(wǎng)絡(luò)、服務(wù)組件等。舉個(gè)例子,線下做變更的時(shí)候,我們寫一個(gè)簡(jiǎn)單的Nginx配置,如下圖所示。
它和線上寫的配置,在紅色部分的順序發(fā)生了變化,如果rewrite的指令在set指令之后,可以生效,結(jié)果符合預(yù)期。當(dāng)我們把rewrite指令前置后,break指令會(huì)被先執(zhí)行,會(huì)結(jié)束整個(gè)重寫過程,rewrite之后的set就不執(zhí)行了,導(dǎo)致配置上線之后,Nginx找不到后端的服務(wù),整個(gè)線上的服務(wù)就崩潰了。如果做好充分的灰度,我們就能及時(shí)發(fā)現(xiàn)問題并解決,但是我們?cè)谏暇€的過程中缺少了灰度過程。事實(shí)上,標(biāo)準(zhǔn)的SOP(標(biāo)準(zhǔn)操作程序)應(yīng)該是上圖中的五步,但是負(fù)責(zé)變更的同學(xué)想當(dāng)然也好,或者是粗心大意也好,在線下測(cè)試以后沒有發(fā)現(xiàn)異常,就直接全量上線了,最終釀成大禍。
② 容量。一些大的節(jié)假日或者秒殺搶購都會(huì)帶來大流量,異常流量攻擊或者爬蟲抓取也會(huì)帶來流量突增。如下圖所示,這是貓眼發(fā)生的一次較大的事故,這個(gè)故障主要的原因是最底層的、最后端的服務(wù)容量不到位,在流量發(fā)生大的變化的時(shí)候它沒撐住,關(guān)鍵的服務(wù)峰值上漲5倍,DAU相交元旦(前一個(gè)歷史峰值)漲了一倍。
主要是兩個(gè)問題導(dǎo)致的,一個(gè)是我們對(duì)于大的活動(dòng)評(píng)估不準(zhǔn)確,還有一個(gè)是它的容量不對(duì)等。相當(dāng)于前端的應(yīng)用評(píng)估是可以撐住的,但是后面的底層沒有撐住,前端的流量都打到后端,后端撐不住,整個(gè)服務(wù)就掛了。由此,我們至少要做到兩點(diǎn),第一要知己,了解自身能承載的容量情況,這點(diǎn)我們可以通過壓測(cè)或者一些歷史數(shù)據(jù)的參考獲取到這個(gè)容量。第二要知彼,準(zhǔn)確知道前端過來的流量究竟有多大,可以通過運(yùn)營和技術(shù)的聯(lián)動(dòng),在出現(xiàn)一些大的活動(dòng)或者大的節(jié)假日的時(shí)候,通過他們的容量評(píng)估和歷史數(shù)據(jù)做出相應(yīng)的判斷,進(jìn)而做一些容量的準(zhǔn)備;另外,要了解下游系統(tǒng)的容量水位,一旦低于本服務(wù)的容量,我們就要做好限流,并且提醒下游服務(wù)做相應(yīng)的容量匹配。
③ 隱患。隱患主要針對(duì)系統(tǒng)設(shè)計(jì)存在的一些缺陷,還有一些組件的交叉調(diào)用、關(guān)鍵報(bào)警的缺失、鏈路容量不對(duì)稱等。這類問題是比較難發(fā)現(xiàn)的,需要我們深入進(jìn)行研究。這方面的實(shí)例我們可以看下下面這個(gè)圖,沒有操作之前,它的數(shù)據(jù)包是沿著綠色的線走的,做了操作之后,部分?jǐn)?shù)據(jù)包就沿著紅色走了。變更前后的主要影響是,紅色鏈路的數(shù)據(jù)包session發(fā)生了變化,因?yàn)樽畛醯臅r(shí)候session在IMGW1上,在鏈路發(fā)生變化后,對(duì)于TCP有狀態(tài)的連接,再往后就找不到它后端了,數(shù)據(jù)包沒辦法發(fā)送過去,這時(shí)候數(shù)據(jù)就丟失掉了,無法連接數(shù)據(jù)庫,這個(gè)業(yè)務(wù)就掛掉了。