美團的自動化業(yè)務(wù)運維之路_第1頁
美團的自動化業(yè)務(wù)運維之路_第2頁
美團的自動化業(yè)務(wù)運維之路_第3頁
美團的自動化業(yè)務(wù)運維之路_第4頁
美團的自動化業(yè)務(wù)運維之路_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、 美團的自動化業(yè)務(wù)運維之路背景美團外賣業(yè)務(wù)在互聯(lián)網(wǎng)行業(yè)是非常獨特的,不僅流程復(fù)雜從用戶下單、商家接單到配送員接單、交付,而且壓力和流量在午、晚高峰時段非常集中。同時,外賣業(yè)務(wù)的增長非常迅猛,自2013年11月上線到最近峰值突破1600萬,還不到4年。在這種情況下,一旦出現(xiàn)事故,單純靠人工排查解決問題,存在較多的局限性。本文將詳細解析問題發(fā)現(xiàn)、根因分析、問題解決等自動化運維體系的建設(shè)歷程與相關(guān)設(shè)計原則。外賣業(yè)務(wù)特點首先從業(yè)務(wù)本身具有的一些特點來講一下自動化業(yè)務(wù)運維的必要性。業(yè)務(wù)流程復(fù)雜圖1 用戶角度的美團外賣技術(shù)體系美團外賣的定位是“圍繞在線商品交易與及時送達的O2O電商交易平臺”。圖1就是用戶

2、在使用美團外賣App過程中涉及到的技術(shù)模塊,歷經(jīng)用戶下單-系統(tǒng)發(fā)給商家-商家準(zhǔn)備外賣-配送,到最后用戶收到商品比如熱乎乎的盒飯,整個過程的時間需要控制在半小時之內(nèi)。在這背后,整個產(chǎn)品線上還會涉及很多數(shù)據(jù)分析、統(tǒng)計、結(jié)算、合同等各個端的交互,因此,對一致性的要求高,同時并發(fā)量也很高。每日流量徒增明顯圖2 美團外賣常規(guī)業(yè)務(wù)監(jiān)控圖外賣業(yè)務(wù)每天在特定時刻流量陡增明顯,有時候與第三方做的一些活動會造成系統(tǒng)流量瞬間達到午高峰的23倍,如圖2所示。業(yè)務(wù)增長迅猛圖3 美團外賣重要成長里程碑美團外賣自2013年上線至2017年10月份,在不到4年的時間里,日提單已達2000萬,日完成訂單突破1600萬,如圖3所

3、示。這期間,業(yè)務(wù)產(chǎn)品一直處在高速迭代的過程中,某些數(shù)據(jù)訪問的服務(wù)量會達到日均120億+次,QPS近40萬。現(xiàn)在如果在午高峰出現(xiàn)一個小小的事故,就會造成比較大的損失。綜上所述,我們需要幫助開發(fā)人員準(zhǔn)確地定位問題和快速解決問題。需要解決問題圖4 開發(fā)人員日常監(jiān)控痛點我們在日常的業(yè)務(wù)運維工作中經(jīng)常會碰到一些問題困擾著開發(fā)人員,如圖4所示,主要有四大痛點: 各種維度的事件通知、報警事件充斥著開發(fā)人員的IM,我們需要花很多精力去配置和優(yōu)化報警閾值、報警等級才不會出現(xiàn)很多誤報。我們希望可以將各種服務(wù)的報警指標(biāo)和閾值標(biāo)準(zhǔn)化、自動化,然后自動收集這些事件進行統(tǒng)計。一方面可以幫助開發(fā)人員提前發(fā)現(xiàn)問題潛在的風(fēng)險,

4、另一方面為我們找出問題的根本原因提供有力的數(shù)據(jù)支持。 公司有多套監(jiān)控系統(tǒng),它們有各自的職責(zé)定位,但是互相沒有關(guān)聯(lián),所以開發(fā)人員在排查問題時需要帶著參數(shù)在不同的系統(tǒng)之間切換,這就降低了定位問題的效率。 我們的代碼中會有大量的降級限流開關(guān),在服務(wù)異常時進行相應(yīng)的保護操作。這些開關(guān)隨著產(chǎn)品快速地迭代,我們并不能確定它們是否還有效。另外,我們需要較準(zhǔn)確地進行容量規(guī)劃以應(yīng)對快速增長的業(yè)務(wù)量。這些都需要通過全鏈路壓測幫我們不斷地驗證,并發(fā)現(xiàn)性能瓶頸,有效地評估服務(wù)容量。 開發(fā)人員收到各種報警之后,通常都會根據(jù)自己的經(jīng)驗進行問題的排查,這些排查經(jīng)驗完全可以標(biāo)準(zhǔn)化(比如對某個服務(wù)的TP99異常,需要進行的排查

5、操作),問題排查流程標(biāo)準(zhǔn)化之后,就可以通過計算機自動化。我們提高診斷的準(zhǔn)確度,就需要將這個流程更加智能化,減少人為參與。核心目標(biāo)我們希望通過一些自動化措施提升運維效率,從而將開發(fā)人員從日常的業(yè)務(wù)運維工作中解放出來,先來看一個用戶使用場景:如圖5所示,觸發(fā)服務(wù)保護有兩條路徑。 第一條,當(dāng)用戶在前期接收到我們的診斷報警后,直接被引導(dǎo)進入該報警可能會影響到業(yè)務(wù)大盤。這時我們要查看業(yè)務(wù)圖表,如果影響到業(yè)務(wù),引導(dǎo)用戶直接進入該業(yè)務(wù)圖表對應(yīng)的核心鏈路,定位出問題的根本原因,進而再判斷是否要觸發(fā)該核心鏈路上對應(yīng)的服務(wù)保護開關(guān)或預(yù)案。圖5 自動化業(yè)務(wù)運維系統(tǒng)核心建設(shè)目標(biāo) 第二條,用戶也可以直接通過診斷報警進入

6、對應(yīng)的核心鏈路,查看最終引起異常的根本原因,引導(dǎo)用戶判斷是否需要觸發(fā)相應(yīng)的服務(wù)保護預(yù)案。發(fā)現(xiàn)問題-診斷問題-解決問題,這個過程每一步都需要不斷地提升準(zhǔn)確度,整個流程需要通過全鏈路壓測不斷驗證,當(dāng)某些場景準(zhǔn)確度非常高的時候,就可以變?yōu)樽詣踊桨?。因此,我們的核心目?biāo)是,當(dāng)整個方案可以自動化進行下去之后,對于用戶來說的使用場景就變成了:收到異常報警-收到業(yè)務(wù)服務(wù)恢復(fù)通知。隨著自動化方案越來越完備,開發(fā)人員可以更加關(guān)注業(yè)務(wù)邏輯的開發(fā)。重點系統(tǒng)體系建設(shè)確定了核心目標(biāo),我們開始著手開發(fā)產(chǎn)品。接下來就介紹一下我們建設(shè)這套系統(tǒng)的核心產(chǎn)品以及各個產(chǎn)品模塊之間的關(guān)聯(lián),其它設(shè)計細節(jié)與我們碰到的坑,本文不著重描述了

7、,之后會有更加針對性的文章分享出來。體系架構(gòu)如圖6所示,在自動化業(yè)務(wù)運維系統(tǒng)中,業(yè)務(wù)大盤與核心鏈路作為用戶使用的入口,一旦用戶查看業(yè)務(wù)指標(biāo)出現(xiàn)問題,我們就需要快速定位該業(yè)務(wù)指標(biāo)異常的根本原因。我們通過對核心鏈路上服務(wù)狀態(tài)的分析,幫助開發(fā)人員定位最終的問題節(jié)點,并建議開發(fā)人員需要觸發(fā)哪些服務(wù)保護預(yù)案。業(yè)務(wù)大盤的預(yù)測報警、核心鏈路的紅盤診斷報警以及已經(jīng)收集到各個維度的報警事件,如果能對它們做進一步的統(tǒng)計分析,可以幫助開發(fā)人員從更加宏觀的角度提前發(fā)現(xiàn)服務(wù)可能潛在問題,相當(dāng)于提前對服務(wù)做健康檢查。我們需要定期通過全鏈路壓測來不斷驗證問題診斷和服務(wù)保護是否有效,在壓測時可以看到各個場景下的服務(wù)健康狀態(tài),

8、對服務(wù)節(jié)點做到有效的容量規(guī)劃。圖6 業(yè)務(wù)監(jiān)控運維體系架構(gòu)業(yè)務(wù)大盤外賣業(yè)務(wù)會有非常多的業(yè)務(wù)指標(biāo)進行監(jiān)控,業(yè)務(wù)指標(biāo)和系統(tǒng)指標(biāo)、服務(wù)指標(biāo)不同,需要業(yè)務(wù)方根據(jù)不同的業(yè)務(wù)自行上報監(jiān)控數(shù)據(jù)。業(yè)務(wù)大盤作為業(yè)務(wù)運維系統(tǒng)的使用入口,可以讓開發(fā)人員快速查看自己關(guān)心的業(yè)務(wù)指標(biāo)的實時狀態(tài)以及最近幾天的走勢。圖7 業(yè)務(wù)監(jiān)控大盤及拓展能力如圖7所示,業(yè)務(wù)大盤不光需要展示業(yè)務(wù)監(jiān)控指標(biāo),還需要有很強的對外擴展能力,比如: 當(dāng)出現(xiàn)業(yè)務(wù)指標(biāo)異常時,根據(jù)后臺的監(jiān)控數(shù)據(jù)分析,可以手動或者自動進行事件標(biāo)記,告知開發(fā)人員是什么原因引起了業(yè)務(wù)指標(biāo)的波動,做到用戶信息量的快速同步。 可以帶著時間戳與類型快速引導(dǎo)開發(fā)人員進入其它監(jiān)控系統(tǒng),提高

9、開發(fā)人排查問題的效率。我們會定期對生產(chǎn)系統(tǒng)進行全鏈路壓測,同時為了壓測數(shù)據(jù)不污染真實的業(yè)務(wù)數(shù)據(jù),會對壓測流量監(jiān)控進行隔離。外賣業(yè)務(wù)場景,使我們大多數(shù)業(yè)務(wù)監(jiān)控數(shù)據(jù)都呈現(xiàn)出很強的周期性,針對業(yè)務(wù)數(shù)據(jù)我們可以利用歷史數(shù)據(jù)使用Holt-Winters等模型進行業(yè)務(wù)數(shù)據(jù)預(yù)測,當(dāng)我們的實際值與預(yù)測值不在置信區(qū)間內(nèi)將直接進行告警。因為是更加偏向業(yè)務(wù)的運維系統(tǒng),我們針對敏感的業(yè)務(wù)指標(biāo)進行了相應(yīng)的權(quán)限管理。為了增加系統(tǒng)使用場景,我們需要支持移動端,使用戶可以在任何地方通過手機就可以查看自己關(guān)心的監(jiān)控大盤并觸發(fā)服務(wù)保護預(yù)案。核心鏈路核心鏈路也是系統(tǒng)主要的使用入口,用戶可以通過核心鏈路快速定位是哪一個調(diào)用鏈出現(xiàn)了問

10、題。如圖8所示,這里會涉及兩個步驟: 我們需要給核心鏈路上的服務(wù)節(jié)點進行健康評分,根據(jù)評分模型來界定問題嚴(yán)重的鏈路。這里我們會根據(jù)服務(wù)的各個指標(biāo)來描繪一個服務(wù)的問題畫像,問題畫像中的指標(biāo)也會有權(quán)重劃分,比如:當(dāng)服務(wù)出現(xiàn)了失敗率報警、TP99報警,大量異常日志則會進行高權(quán)重的加分。 當(dāng)我們確認完某條鏈路出現(xiàn)了問題,在鏈路上越往后的節(jié)點可能是引起問題的根節(jié)點,我們會實時獲取該節(jié)點更多相關(guān)監(jiān)控指標(biāo)來進行分析診斷,這里會融合開發(fā)人員日常排查問題的SOP,最終可能定位到是這個服務(wù)節(jié)點某些服務(wù)器的磁盤或者CPU等問題。圖8 核心鏈路產(chǎn)品建設(shè)路徑我們最終會發(fā)出問題診斷結(jié)果,這個結(jié)果在發(fā)出之后,還需要收集用戶

11、的反饋,判斷診斷結(jié)果是否準(zhǔn)確,為我們后續(xù)優(yōu)化評分定位模型與診斷模型提供有力的數(shù)據(jù)支持。在核心鏈路建設(shè)前期,我們會建議開發(fā)人員進行相應(yīng)的服務(wù)保護預(yù)案觸發(fā),當(dāng)我們的診斷結(jié)果足夠準(zhǔn)確之后,可以針對固定問題場景自動化觸發(fā)服務(wù)保護預(yù)案,以縮短解決問題的時間。服務(wù)保護&故障演練圖9 服務(wù)保護&故障演練模塊的核心功能服務(wù)保護&故障演練模塊是讓我們的業(yè)務(wù)運維體系形成閉環(huán)的重要部分,該模塊需要具備的核心功能如圖9所示。針對不同的保護需求,我們會有不同類型的服務(wù)保護開關(guān),這里主要有如下幾種: 降級開關(guān):由于業(yè)務(wù)快速發(fā)展,在代碼中會有成百上千的降級開關(guān)。在業(yè)務(wù)出現(xiàn)異常時需要手動進行降級操作。 限流開關(guān):有些針對特定

12、業(yè)務(wù)場景需要有相應(yīng)的限流保護措施。比如:針對單機限流主要是對自身服務(wù)器的資源保護,針對集群限流主要是針對底層的DB或者Cache等存儲資源進行資源保護,還有一些其他限流需求都是希望可以在系統(tǒng)出現(xiàn)流量異常時有效地進行保護。 Hystrix自動熔斷:可以通過監(jiān)控異常數(shù)、線程數(shù)等簡單指標(biāo),快速保護我們的服務(wù)健康狀態(tài)不會急劇惡化。根據(jù)我們的運維經(jīng)驗,在出現(xiàn)生產(chǎn)事故時可能會涉及到多個開關(guān)的切換,這里就需要針對不同的故障場景預(yù)先設(shè)置服務(wù)保護預(yù)案,可以在出現(xiàn)問題時通過一鍵操作對多個服務(wù)保護開關(guān)進行預(yù)設(shè)狀態(tài)的變更。我們既然有了應(yīng)對不同故障場景的服務(wù)保護預(yù)案,就需要時不時來驗證這些服務(wù)保護預(yù)案是否真的可以起到預(yù)

13、期的效果。生產(chǎn)對應(yīng)的事故不常有,肯定也不能只指望生產(chǎn)真的出現(xiàn)問題才進行預(yù)案的驗證,還需要針對不同的故障進行模擬。當(dāng)我們生產(chǎn)服務(wù)出現(xiàn)問題時,不管是因為網(wǎng)絡(luò)原因還是硬件故障,大多數(shù)表現(xiàn)在服務(wù)上的可能是服務(wù)超時或者變慢、拋出異常。我們前期主要針對這幾點做到可以對核心鏈路上任一服務(wù)節(jié)點進行故障演練,生產(chǎn)故障可能會同時多個節(jié)點出現(xiàn)故障,這里就需要我們的故障演練也需要支持預(yù)案管理。服務(wù)保護是業(yè)務(wù)運維終端措施,我們需要在軟件上可以讓用戶很方便地直達對應(yīng)的服務(wù)保護,這里我們需要將服務(wù)保護與業(yè)務(wù)大盤、核心鏈路進行整合,在開發(fā)人員發(fā)現(xiàn)問題時可以方便地進入對應(yīng)的服務(wù)保護預(yù)案。有了這些保護措施與故障演練功能,結(jié)合與核

14、心鏈路的關(guān)系,就可以結(jié)合故障診斷與全鏈路壓測進行自動化方面的建設(shè)了。整合全鏈路壓測我們現(xiàn)在定期會組織外賣全鏈路壓測,每次壓測都會涉及很多人的配合,如果可以針對單一壓測場景進行壓測將會大大縮短我們組織壓測的成本。如圖10所示,我們現(xiàn)在主要在全鏈路壓測的時候,針對壓測流量進行不同場景的故障演練,在制造故障的同時,驗證服務(wù)保護預(yù)案是否可以像預(yù)期那樣啟動保護服務(wù)的目的。后面會講一下我們針對全鏈路壓測自動化建設(shè)思路。圖10 提升全鏈路壓測給我們帶來的收益自動化路程前面主要介紹了我們在做基于業(yè)務(wù)的運維系統(tǒng)時需要的各個核心功能,下面重點介紹一下,我們在整個系統(tǒng)建設(shè)中,自動化方面的建設(shè)主要集中在什么地方。異常

15、點自動檢測圖11 異常點自動檢測我們在做核心鏈路建設(shè)的時候,需要收集各個服務(wù)節(jié)點的報警事件,這些報警事件有服務(wù)調(diào)用時端到端的監(jiān)控指標(biāo),還有服務(wù)自身SLA的監(jiān)控指標(biāo)。在和開發(fā)人員進行溝通的時候了解到他們平時配置這些監(jiān)控指標(biāo)的時候耗費了大量的人力,每個指標(biāo)的報警閾值都需要反復(fù)調(diào)整才能達到一個理想狀態(tài),基于這些監(jiān)控痛點,我們希望可以通過分析歷史數(shù)據(jù)來自動的檢測出異常點,并自動計算出應(yīng)有的報警閾值并設(shè)置。如圖11所示,我們根據(jù)不同監(jiān)控指標(biāo)的特點,選擇不同的基線算法,并計算出其置信區(qū)間,用來幫助我們更加準(zhǔn)確的檢測異常點。比如我們的業(yè)務(wù)周期性比較強,大多數(shù)監(jiān)控指標(biāo)都是在歷史同期呈現(xiàn)出正太分布,這個時候可以

16、拿真實值與均值進行比較,其差值在N倍標(biāo)準(zhǔn)差之外,則認為該真實值是異常點。自動觸發(fā)服務(wù)保護圖12 異常檢測與服務(wù)保護聯(lián)動我們的服務(wù)保護措施有一部分是通過Hystrix進行自動熔斷,另外一部分是我們已經(jīng)存在的上千個降級、限流開關(guān),這部分開關(guān)平時需要開發(fā)人員根據(jù)自己的運維經(jīng)驗來手動觸發(fā)。我們?nèi)绻軌蚋鶕?jù)各種監(jiān)控指標(biāo)準(zhǔn)確的診斷出異常點,并事先將已經(jīng)確定的異常場景與我們的服務(wù)保護預(yù)案進行關(guān)聯(lián),就可以自動化的進行服務(wù)保護預(yù)案的觸發(fā),如圖12所示。壓測計劃自動化圖13 壓測計劃自動化我們定期進行的外賣全鏈路壓測,需要召集相關(guān)業(yè)務(wù)方進行準(zhǔn)備和跟進,這其中涉及的數(shù)據(jù)構(gòu)造部分會關(guān)聯(lián)到很多業(yè)務(wù)方的改造、驗證、準(zhǔn)備工作。如圖13所示,我們需要通過壓測計劃串聯(lián)整個準(zhǔn)備、驗證過程,盡量少的有人為活動參與到整個過程中。這其中我們需要進行如下工作的準(zhǔn)備:針對真實流量的改造,基礎(chǔ)數(shù)據(jù)構(gòu)造、數(shù)據(jù)脫敏、數(shù)據(jù)校驗等盡可能通過任務(wù)提前進行。進入到流量回放階段,我們可以針對典型的故障場景進行故障預(yù)案的觸發(fā)(比如:Tair故障等)。在故障演練的同時,我們可以結(jié)合核心鏈路的關(guān)系數(shù)據(jù)準(zhǔn)確定位出與故障場景強相關(guān)的問題節(jié)點。結(jié)合我們針對典型故障場景事先建立的服務(wù)保護關(guān)系,自動觸發(fā)對應(yīng)的服務(wù)保護預(yù)案。在整個流程中,我們需要最終確認各個環(huán)境的運行效果是否達到了我們的預(yù)期,就需要每個環(huán)節(jié)都有相應(yīng)的監(jiān)控日志輸出,最終自動化產(chǎn)出

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論