单日2000W+订单,如何忙中不错?美团外卖业务异常检测实践详解
美團外賣從 2013~2018,歷時五年,現(xiàn)在已經(jīng)是全球最大外賣交易平臺。目前單日完成訂單兩千多萬單,交易頻次高,如果不能及時發(fā)現(xiàn)潛在業(yè)務(wù)指標(biāo)異常,有可能引發(fā)重大事故。
寫在前面??
外賣業(yè)務(wù)持續(xù)高速成長,業(yè)務(wù)迭代快,邏輯復(fù)雜,關(guān)聯(lián)服務(wù)多。如何快速準(zhǔn)確識別系統(tǒng)各項指標(biāo)的異常,發(fā)現(xiàn)問題根因,并快速解決顯得尤為重要。在常規(guī)業(yè)務(wù)指標(biāo)監(jiān)控工作中需要手動維護上萬業(yè)務(wù)指標(biāo)報警閾值,不僅成本高,效果也不佳。我們嘗試使用“形變分析模型”對業(yè)務(wù)指標(biāo)自動進行異常檢測,無需人工設(shè)置閾值。在實踐過程中與外賣全鏈路壓測,服務(wù)保護等穩(wěn)定性保障系統(tǒng)進行內(nèi)聯(lián),目前已覆蓋絕大部分美團外賣 C 端核心業(yè)務(wù)指標(biāo),效果不錯。
美團外賣業(yè)務(wù)異常檢測現(xiàn)狀??
外賣業(yè)務(wù)特點??
美團外賣從 2013~2018,歷時五年,現(xiàn)在已經(jīng)是全球最大外賣交易平臺。外賣業(yè)務(wù)相關(guān)的指標(biāo)主要會分為兩大類:
-
有規(guī)律的時間序列,大多數(shù)核心業(yè)務(wù)指標(biāo)都會呈現(xiàn)出較強的規(guī)律性,如下圖 1 所示:主要的履約交易流程(用戶下單 > 支付 > 商家接單 > 配送 > 用戶收貨) 中各個業(yè)務(wù)指標(biāo)呈現(xiàn)周期性、趨勢性,午、晚高峰陡升明顯,與低峰期數(shù)值相差百倍。目前單日完成訂單兩千多萬單,交易頻次高,如果不能及時發(fā)現(xiàn)潛在業(yè)務(wù)指標(biāo)異常,有可能引發(fā)重大事故。
-
無規(guī)律的時間序列,這類指標(biāo)會因為一些偶發(fā)事件引起曲線的波動,沒有很強的規(guī)律性。如下圖 2 所示:
1. 根據(jù)當(dāng)前的業(yè)務(wù)現(xiàn)狀實施有針對性的營銷策略,在特定時間進行紅包發(fā)放等。
2. 特定業(yè)務(wù)上線,比如外賣 SET 化確定某一時間點進行引流。
3. 某應(yīng)用失敗率因為服務(wù)器硬件問題出現(xiàn)陡升現(xiàn)象。
4. 某應(yīng)用性能指標(biāo)因為網(wǎng)絡(luò)抖動引起的變化。
主要痛點??
美團外賣在業(yè)務(wù)穩(wěn)定性監(jiān)控建設(shè)中會與一線開發(fā)人員頻繁溝通,針對監(jiān)控告警需求主要存在如下幾個痛點,如下圖 3 所示:
-
告警精確率與召回率難平衡。精確率可以反映出對異常點的識別是否準(zhǔn)確,誤報會直接影響精確率。召回率可以反映出對所有異常點識別的是否夠全,漏報會直接影響召回率。在業(yè)務(wù)異常檢測告警過程中,漏報往往比誤報帶給業(yè)務(wù)的傷害更大,在重大事故時,如果不能及時識別出核心業(yè)務(wù)指標(biāo)的異常點,很有可能會延誤處理事故的最佳時機。提升召回率的同時可能降低精確率,而如果誤報太多又會讓業(yè)務(wù)開發(fā)人員在日常運維中對告警失去敏感度。
-
人工配置告警閾值成本高。告警閾值配置需要對業(yè)務(wù)特點熟悉,對于新業(yè)務(wù)上線或者功能變更等動作可能會調(diào)整相應(yīng)的告警閾值,指標(biāo)波動在什么范圍內(nèi)發(fā)出什么等級的告警,這都需要投入較高的人力成本去維護。
-
典型故障場景分析需要人工介入。對于故障場景需要人工介入去進行問題排查定位與解決,不同的開發(fā)人員處理問題的經(jīng)驗有差異,交接成本高。針對經(jīng)常碰到的故障場景,在多次出現(xiàn)之后我們是可以將這些故障場景對應(yīng)的特征進行歸類整理并落地成專家模型,幫助開發(fā)人員快速定位故障方向,采用對應(yīng)預(yù)案處理,提升效率。
-
重大事故時如何避免告警洪潮。日常某一個業(yè)務(wù)指標(biāo)出現(xiàn)問題發(fā)送告警,我們還可以較容易的定位具體問題。當(dāng)多業(yè)務(wù)鏈路同時出現(xiàn)問題,可能會出現(xiàn)告警洪潮,讓開發(fā)人員很難快速定位到問題根因去解決問題,這個時候需要有一套告警收斂策略幫助開發(fā)人員快速找到問題最嚴(yán)重的地方,給出處理建議。
形變分析模型介紹??
概覽??
在外賣業(yè)務(wù)場景下,與業(yè)務(wù)開發(fā)人員日常溝通過程中發(fā)現(xiàn)大家判斷業(yè)務(wù)指標(biāo)是否異常,大多數(shù)是通過人眼觀察形狀是否符合預(yù)期。我們希望找到一種方式可以通過對時間序列的 形狀預(yù)測 來判斷是否異常,并希望可以對異常嚴(yán)重程度設(shè)定不同的告警等級。通過簡單的模型來覆蓋常見故障場景,并具備較好的普適性。形變分析模型從上述痛點出發(fā)不斷向前演進。
任何一種異常檢測模型都有它的適用范圍,形變分析模型也不例外,這里需要強調(diào)一下形變分析模型主要針對有規(guī)律的時間序列進行分析檢測,主要會依賴兩個簡單的計算公式:
-
歸一化互相關(guān)(余弦相關(guān)性)公式。它經(jīng)常被用來判斷兩篇文章是否相似,也可以體現(xiàn)兩個曲線的相似度,相似度越高說明形狀越相似。
-
形變量計算公式。這里雖然是簡單的四則運算,但是具備較好的適應(yīng)性。
基于形變分析模型的異常檢測主要關(guān)注點概括為如下幾點,具體如下圖 4 所示:
形變分析:對時間序列兩次處理歸一形成形變量集合,通過形變量計算不同等級告警閾值。
相關(guān)性變點檢測:針對出現(xiàn)的特殊情況稱之為超級變點,采用相關(guān)性變點檢測作為方案補充。
告警收斂策略:通過時間桶、鏈路維度對告警進行收斂,提供圖形化的直觀告警信息,避免告警洪潮。
下面會對形變分析模型詳細(xì)展開介紹。
模型分析過程??
圖 5:基于形變分析的異常檢測主要流程下面給大家重點介紹一下形變分析模型的分析過程,這里主要會有四個步驟,具體如圖 5 所示:
-
確定時間序列特征,是否是有規(guī)律的時間序列。因為形變分析模型的適用范圍是有規(guī)律的時間序列,這里主要表現(xiàn)為有周期、有趨勢,所以可以確定曲線是否是有周期的(可以通過傅里葉變換確定曲線的短周期),確定節(jié)假日與工作日的差異性,并進行歸類(工作日歸為一類,節(jié)假日歸為一類)。
-
選擇基準(zhǔn)線。形變分析模型需要找到一個基準(zhǔn)線來進行相關(guān)性分析,這里的基準(zhǔn)線主要關(guān)注形狀,而非具體數(shù)值。這個基準(zhǔn)線,我們可以使用周同比的數(shù)據(jù),可以通過一些預(yù)測算法進行預(yù)測(比如:STL + Holt-Winters),這里更加關(guān)注預(yù)測出的形狀而非具體數(shù)值,也可以選擇同源數(shù)據(jù)(同一鏈路上其他相似的業(yè)務(wù)指標(biāo))作為基線。
-
基準(zhǔn)形變量計算。根據(jù)選擇的基準(zhǔn)線與真實數(shù)據(jù)通過兩次處理,去除時間、形狀、量級等因素的影響,將時間序列歸一到一個基準(zhǔn)上,通過形變量計算得到基準(zhǔn)形變量,為后續(xù)異常判定、等級設(shè)定做準(zhǔn)備。
-
異常判斷階段。可以通過聚類計算基準(zhǔn)形變量,根據(jù)基準(zhǔn)形變量自動設(shè)定不同等級的告警閾值,并結(jié)合人工反饋是否敏感等信息進行自動修正。
兩次處理??
圖 6:形變分析的第一次處理上面通過流程圖介紹了一下形變分析模型的整體流程,下面針對形變分析模型中最核心的兩次處理操作通過具體案例展開介紹一下。第一次是針對形狀或時間的處理,具體如圖 6 所示,形變分析模型預(yù)測出基準(zhǔn)線,通過真實數(shù)值與基線數(shù)值進行歸一化互相關(guān)計算,計算出一個新的時間序列,因為余弦相關(guān)通常用于正空間,所以每一個點都?xì)w一到了 [0 , 1] 區(qū)間上,從而去除了形狀或時間的影響。歸一化之后新的時間序列除了在午高峰附近兩個明顯的異常點有較大波動,在凌晨低峰期因為量級較小,也會出現(xiàn)比較明顯的波動(因為量級小,形狀差異會被放大)。上述現(xiàn)象表明不同時段的業(yè)務(wù)量級對余弦相關(guān)性影響較大,需要找到一種方式將量級的影響去除。
圖 7:形變分析的第二次處理第一次處理去除了形狀或時間對時間序列的影響,接下來我們發(fā)現(xiàn)通過 如圖 7 所示 的形變量計算公式可以將量級進行還原,或者可以理解為針對不同的量級賦予不同的權(quán)重,形成新的時間序列可以去除量級的影響,這就是第二次針對量級的處理,最終將時間序列歸一到形變量集合上,通過聚類計算基準(zhǔn)形變量達到設(shè)定不同告警等級閾值的目的。統(tǒng)一的標(biāo)準(zhǔn)為我們后續(xù)結(jié)合用戶反饋對不同等級告警閾值進行微調(diào)帶來了便利。
告警收斂策略??
針對重大事故時如何避免出現(xiàn)告警洪潮,針對典型故障場景如何快速給開發(fā)人員提供簡單直觀的建議,這些也是在異常檢測系統(tǒng)中需要重點關(guān)注的問題。其中告警收斂模型會優(yōu)先關(guān)注兩大類問題:
-
簡化告警內(nèi)容,直觀展示異常點與變化趨勢。如下圖 8 所示,日常大家收到的告警內(nèi)容更多的是文字版,這里針對異常點的嚴(yán)重程度與前后變化趨勢不太容易通過文字簡單直觀的表達出來。我們逐漸將異常告警信息變成了圖形化,可以直觀展示異常點變化幅度,展示最近時間區(qū)間異常變化趨勢。通過收集用戶點擊行為判斷大家對特定異常的關(guān)注度,對低關(guān)注度異常告警實施對應(yīng)收斂策略。
-
在重大事故時避免出現(xiàn)告警洪潮,給用戶推送清晰的分析報告。如下圖 9 所示,在事故持續(xù)時間較長時,每分鐘都發(fā)送告警會對業(yè)務(wù)造成干擾,模型可以采用連續(xù)三分鐘發(fā)送異常告警之后,采用間隔 3、5、7、7……分鐘進行發(fā)送,直到判斷異常恢復(fù)為止。在多個業(yè)務(wù)鏈路出現(xiàn)故障時,同時多個業(yè)務(wù)指標(biāo)發(fā)送告警,即使做了時間桶的收斂,也可能會出現(xiàn)較多告警,異常檢測系統(tǒng)需要根據(jù)業(yè)務(wù)相關(guān)性,從強相關(guān)業(yè)務(wù)的業(yè)務(wù)鏈路上收集異常告警事件進行分析,從更高維度給出鏈路級分析報告(例如在外賣業(yè)務(wù)中:提單業(yè)務(wù)是支付業(yè)務(wù)的前置,支付業(yè)務(wù)是推單業(yè)務(wù)的前置,當(dāng)支付業(yè)務(wù)發(fā)生問題時,提單業(yè)務(wù)一定會上漲,而推單業(yè)務(wù)一定會下降)。
解決了哪些問題??
上面向大家介紹了形變分析模型的分析過程,接下來會通過幾個典型案例詳細(xì)說明形變分析模型解決了美團外賣哪些現(xiàn)實問題。
案例 1??
業(yè)務(wù)背景:因為全國大范圍出現(xiàn)惡劣天氣,導(dǎo)致當(dāng)天外賣訂單整體抬升,如圖 9 所示,午晚高峰整體抬升明顯,這種情況下業(yè)務(wù)側(cè)并不希望出現(xiàn)連續(xù)高等級告警。
圖 10:案例 1,整體抬升第一次對時間或形狀的處理:將歷史真實樣本與基線進行歸一化互相關(guān)計算,得到的歸一化數(shù)據(jù)集可以看到在業(yè)務(wù)低峰期時,相關(guān)性波動較大,在午晚高峰時相關(guān)性很穩(wěn)定。這時已經(jīng)去除了時間或形狀的影響。
第二次對量級的處理:通過形變量計算公式,還原量級,去除量級的影響,得到形變量數(shù)據(jù)集,通過基準(zhǔn)形變量計算出不同告警等級對應(yīng)的形變量告警閾值。如圖 10 所示,沒有發(fā)現(xiàn)任何時間點的形變量超過告警閾值,符合不作為異常識別的預(yù)期。
案例 2??
業(yè)務(wù)背景:某一業(yè)務(wù)渠道出現(xiàn)問題,引起整體流量緩慢下降,如下圖 11 所示,該情況需要在下降的過程中及時識別為異常,并根據(jù)下降的程度逐級提升告警等級。
圖 11:案例 2,陰跌通過兩次對形狀與量級的處理,最終可以看到只有在業(yè)務(wù)指標(biāo)緩慢下降的時間范圍內(nèi)有對應(yīng)形變量超過告警閾值,并且會隨著下降程度告警等級逐級提升,符合需要識別為異常點的預(yù)期。
案例 3??
業(yè)務(wù)背景:某服務(wù)入口流量因為某一渠道突然故障,引起整體入口流量陡降,之后曲線形狀又恢復(fù)到與基線值重合,如下圖 12 所示,該案例需要及時識別為較高等級異常。
圖 12:案例 3,超級變點通過對時間與量級兩次處理,并沒有任何時間點的形變量達到較高等級告警。這是為什么呢?對于形變量計算公式:(1 - 余弦相關(guān)性)x |實時當(dāng)前值 - 基線當(dāng)前值| ,這里看到在陡降異常點時 |實際當(dāng)前值 - 基線當(dāng)前值| 會趨近與 0,這樣在陡降時的形變量也會趨近于 0,并沒有超過對應(yīng)的告警等級。這個案例在形變分析模型中屬于一個特殊情況,針對這樣的案例,我們需要引入互相關(guān)變點檢測作為彌補,這樣的異常點稱之為超級變點。針對超級變點,需要利用公式:(1 - 余弦相關(guān))x |前一分鐘數(shù)值 - 當(dāng)前值| 來進行識別,在進行形變量計算過程中只要這兩種方式其中一種超過對應(yīng)告警閾值就進行告警。在進行相關(guān)性變點檢測之后,可以識別該異常點為較高等級異常,符合檢測預(yù)期。
案例 4??
業(yè)務(wù)背景:世界杯期間有針對性的進行營銷活動,屬于非常規(guī)營銷活動,會不定時引起業(yè)務(wù)指標(biāo)陡升,如下圖 13 所示,該場景需要及時識別出指標(biāo)異常,提醒開發(fā)人員關(guān)注相關(guān)業(yè)務(wù)指標(biāo)。該業(yè)務(wù)場景是屬于比較常見的在有規(guī)律的時間序列上出現(xiàn)隨機的陡升陡降場景。
圖 13:案例 4,陡升在進行兩次處理之后,三次活動期間引起的指標(biāo)陡升超過告警閾值,符合指標(biāo)異常需要被識別的預(yù)期。
案例 5??
業(yè)務(wù)背景:在高峰期與低峰期都有跟基線相比波動超過 5% 的異常點,在午高峰時需要進行 P0 級別告警,低峰期波動經(jīng)常超過 10% 可能并不需要進行告警,如下圖 14 所示。
圖 14:案例 5,高峰期與低峰期對告警識別的適應(yīng)性在進行兩次處理后,可以看到在低峰期時形變量非常小,達不到告警閾值。在午高峰時形變量非常大,達到 P0 級別告警閾值。那么在低峰期如果想達到 P0 級別告警閾值,需要波動在 50% 左右,如圖 24 所示,這個案例體現(xiàn)了形變分析模型在閾值判定上較好的適應(yīng)性。
異常檢測系統(tǒng)的主要關(guān)注點??
圖 15:異常檢測系統(tǒng)結(jié)構(gòu)圖業(yè)務(wù)異常檢測系統(tǒng)在整個穩(wěn)定性保障體系中處在核心位置,承載著在業(yè)務(wù)出現(xiàn)重大事故時進行快速異常識別、定位根因、給出降級建議的責(zé)任。會分幾大模塊進行建設(shè),具體如圖 15 所示:
-
多維度監(jiān)控指標(biāo)采集,這里主要包括:業(yè)務(wù)指標(biāo)、應(yīng)用指標(biāo)(客戶端、服務(wù)端、端到端)、系統(tǒng)指標(biāo)(CPU、Memory、IO 等)。指標(biāo)采集需要盡可能短的鏈路,需要對指標(biāo)進行可信度標(biāo)記,盡可能給后續(xù)異常檢測流程提供穩(wěn)定準(zhǔn)確的數(shù)據(jù)支持。
-
通過對不同類型時間序列特征進行識別,選擇對應(yīng)的異常檢測模型。這里不僅需要識別出異常,還需要進行不同告警等級的閾值計算,通過收集用戶反饋信息對不同模型識別異常的效果進行評估,進行半監(jiān)督學(xué)習(xí)不斷修正模型效果。
-
異常檢測系統(tǒng)針對識別出的異常告警事件進行匯總分析,可以從更高維度對業(yè)務(wù)進行健康檢查(比如:可以分析出某一業(yè)務(wù)鏈路在某些時間點不穩(wěn)定),給出故障診斷報告。
異常檢測與其他穩(wěn)定性保障系統(tǒng)的內(nèi)聯(lián)??
圖 16:業(yè)務(wù)穩(wěn)定性保障兩大核心場景美團外賣偏向業(yè)務(wù)的技術(shù)保障能力對用戶主要分為兩大核心場景,具體如圖 16 所示:
-
業(yè)務(wù)穩(wěn)定性監(jiān)控場景,主要針對實時業(yè)務(wù)數(shù)據(jù)的監(jiān)控、異常檢測與故障診斷,在出現(xiàn)事故時直接幫助用戶做出決策,給出處理建議。該場景中產(chǎn)生的診斷數(shù)據(jù)會形成多維度報告幫助用戶進行日常的健康檢查。用戶可以消費異常檢測事件,進行業(yè)務(wù)后續(xù)定制的保護動作。
-
業(yè)務(wù)穩(wěn)定性評估場景,主要針對核心業(yè)務(wù)流程在日常進行定期常規(guī)壓測,分析核心鏈路中的性能瓶頸點,結(jié)合基于異常檢測事件統(tǒng)計的穩(wěn)定性報告對各個服務(wù)進行容量規(guī)劃。在日常壓測中會結(jié)合典型故障場景進行故障演練,確保各個服務(wù)保護動作真實有效。在壓測施壓過程中,異常檢測發(fā)出的告警事件可以作為壓力是否停止和開啟的條件。
基于形變分析的異常檢測落地情況及實踐效果??
基于形變分析的異常檢測系統(tǒng)現(xiàn)在美團外賣應(yīng)覆蓋核心業(yè)務(wù)指標(biāo) 2400 多個(其中包括訂單、流量、營銷、SET 等),因為使用的算法較簡單,單次異常檢測流程時間可以控制在 200ms。
在發(fā)送給用戶的告警信息中不斷收集用戶反饋信息,在已有的反饋標(biāo)記中,異常檢測的精確率、召回率可以達到 80%,當(dāng)然異常檢測的準(zhǔn)確性還有一部分依賴時間序列數(shù)據(jù)采集聚合通道的穩(wěn)定性。關(guān)于告警閾值配置功能,有 74% 的核心業(yè)務(wù)指標(biāo)可以進行自動配置并調(diào)整。
整體回顧??
本文主要給大家介紹了形變分析過程,突出對時間序列形狀的預(yù)測。針對有規(guī)律的時間序列形變分析模型具有較好的適應(yīng)性。然后給大家介紹了異常檢測系統(tǒng)在美團外賣整個穩(wěn)定性保障體系中的作用,以及形變分析模型在美團外賣的落地情況。
在進行業(yè)務(wù)指標(biāo)異常檢測時,嘗試找到通用的異常檢測方法非常具有誘惑力,但可能并不是最佳選擇。嘗試最適合你問題的最簡單方法。用簡單方法處理復(fù)雜問題,用簡單模型收斂問題,用小成本撬動大效能。
作者簡介
劉宏偉,2016 年加入美團點評,美團外賣技術(shù)保障組負(fù)責(zé)人,現(xiàn)正在圍繞業(yè)務(wù)進行穩(wěn)定性評估、實時監(jiān)控、異常檢測與故障診斷等方向的建設(shè)。
美團外賣技術(shù)保障組:圍繞業(yè)務(wù)穩(wěn)定性建設(shè)事前通過全鏈路壓測系統(tǒng)建設(shè)提前發(fā)現(xiàn)服務(wù)性能瓶頸、進行服務(wù)保護預(yù)案演練、容量規(guī)劃;事中通過異常檢測與故障診斷模塊,在重大事故時可以快速識別關(guān)鍵問題鏈路,定位根因;事后通過服務(wù)保護系統(tǒng)進行快速保護預(yù)案的觸發(fā),幫助開發(fā)人員快速解決線上問題,提升人效。
總結(jié)
以上是生活随笔為你收集整理的单日2000W+订单,如何忙中不错?美团外卖业务异常检测实践详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何从零开始搭建 CI/CD 流水线
- 下一篇: 996和被辞退,二选一