在此前介紹百度云智能運維(Noah)外網質量監測平臺文章《百億級外網訪問質量保障:百度獵鷹外網監控(上)》中,我們簡要介紹了一種網絡異常類型——機房側異常(百度數據中心側設備/鏈路異常)。該故障在數據上表現為多個省份訪問某個百度機房服務不通暢,因此在獵鷹(百度外網監控平臺)外網判障中,可以通過設置訪問某機房出現異常的省份比例超過給定閾值,來判定機房側異常的發生。
在外網故障統計中我們發現,運營商骨干網鏈路出現故障同樣會導致多個省份到特定機房訪問異常,在現有外網判障框架中,會將骨干網鏈路異常也判定為機房側異常。然而,機房側異常與骨干網鏈路異常無論是從起因還是數據表現上,都是存在一定差異的,兩者的止損方式也不相同。因此,我們需要設計判障策略來區分兩類異常,以便自動止損系統根據異常類型執行合適的外網止損方案。
在下文中,我們將為大家介紹骨干網鏈路及其異常表現,以及判障策略的設計思路。
什么是骨干網鏈路?
骨干網是運營商用來連接多個地域或地區的高速網絡,因此骨干網的一個重要作用就是承載跨地域傳輸的網絡數據。若干條跨地域連接的骨干網鏈路,共同組成了完整的運營商骨干網。
圖1所示是用于連接南北地域的一條骨干網鏈路——第二京漢廣鏈路。各省份跨南北地域傳輸的網絡數據,首先會匯聚到該鏈路上北京、武漢、廣州等核心城市節點,然后經由該鏈路傳輸至目的位置。
圖1 第二京漢廣鏈路
當構成這條骨干網鏈路的網絡設備,如交換機、光纖等,出現擁塞、損毀等異常狀況時,流經鏈路故障位置的網絡數據會受到影響,通常表現為丟包甚至數據斷連。
骨干網異常對百度外網質量的影響
如圖2所示,外網監控系統獵鷹通過在各省份的探測點,實時監控百度各機房的網絡連通性狀態。
圖2 獵鷹外網監控圖示
在每個判定周期,每個省份都會上報若干條對百度各機房的探測數據。假設某省份對特定機房的探測,共上報了m條數據,其中n條數據為異常狀態,那么異常率n/m可以用于衡量省份到機房的外網質量。
骨干網鏈路發生異常時,會使得百度外網質量受損。具體表現為:用戶跨地域訪問百度機房時異常率升高,而用戶訪問同地域的百度機房服務時異常率不受影響。
圖3(a)(b)分別展示了某次南北骨干網鏈路異常發生時,全國各省份訪問百度南北兩地機房的異常率。其中,不同省份顏色對應的異常率如圖中左下角所示。
圖3(a) 南北鏈路異常發生時,全國訪問北京機房異常率
圖3(b) 南北鏈路異常發生時,全國訪問廣州機房異常率
從圖3(a)中可以看出,河南-山東線以南的省份,訪問百度北京機房普遍出現異常率升高,而以北的省份訪問北京機房異常率則較低。圖3(b)中各省份訪問廣州機房也出現了跨南北地域訪問異常、同地域訪問正常的情況。
骨干網異常與機房側異常的區別
圖4展示了機房側異常發生時的各省份網絡異常率。對比圖3和圖4可以看出,連接兩個地域的骨干網鏈路異常發生時,異常省份通常聚集于同一地域,并且各省份都會出現訪問跨地域的機房異常,訪問同地域的機房正常的現象。而機房側異常發生時,異常省份會分散于全國各地,沒有明顯的分布規律。這個差異是區分兩類異常的關鍵所在。
圖4 機房側異常發生時,全國訪問異常機房的異常率
由于兩類異常表現不同,因此對應的止損方案也存在差異。對于機房側異常,可以直接將異常機房的所有流量全部調度至正常機房。而對于骨干網鏈路異常,由于異常只在跨地域訪問時發生,因此需要處理所有跨地域訪問流量,可以將所有跨地域的訪問流量調度至同地域正常機房。為了使自動止損系統能對骨干網異常執行合適的外網止損方案,為骨干網鏈路異常設計判障策略是有必要的。
另外,由于運營商的骨干網拓撲主要連接的是南北向各核心城市,骨干網異常也都發生在南北向骨干網鏈路上,因此后續的策略設計都將圍繞南北骨干網鏈路(下文簡稱南北鏈路)展開。
判障思路分析
根據南北鏈路異常的特點以及問題的性質,我們嘗試從以下兩個思路來考慮解決方案。
基于南北劃分線進行判定
南北鏈路異常最顯著的特點,就是跨地域訪問機房異常率高、同地域訪問異常率低,且高異常率與低異常率省份間存在明顯的南北劃分。根據這個特點,一個直觀的想法就是根據歷史數據總結出一條南北劃分線;通過觀察劃分線兩側省份異常狀況,從而確定異常類型。
然而,通過觀察歷史上多次南北鏈路異常我們發現,劃分線沒有固定的位置。它是隨著骨干網鏈路異常的位置動態變化的,根據劃分界線位置的變化,異常省份也存在著差異。如下圖所示,(a)與(b)分別是異常鏈路存在于河北、河南境內時,用戶訪問百度北京機房的異常率展示。
圖5(a) 河北境內鏈路故障
圖5(b) 河南境內鏈路故障
從圖5(a)可以看出,當異常鏈路位于河北時,河北以南的省份,訪問北京機房異常率普遍較高,即劃分線位于河北-山東線附近。而圖5(b)異常鏈路位于河南時,劃分線緯度則下移至陜西-河南線以下,該線以南的省份異常率較高,異常省份個數也由于劃分線位置下移而少于(a)圖。
因此,找到一個合適的南北分界線,觀察分界線兩邊省份的異常狀態,來判定是否有南北鏈路異常發生,這個想法難以直接落地。
利用分類器模型進行判定
如概覽中所說,我們希望對已經判定為機房側異常的數據做二次處理,正確將機房側異常與南北鏈路異常區分開來。顯然,這是一個二分類問題,利用分類器模型解決也是一個思路。
如果在每個判定周期,都能獲得大陸31個省份到各機房的探測數據,那么可以通過積累歷史數據,訓練一個接受62維特征數據(南北兩地機房各自對應的31個省份異常狀態)的分類器,用于區分南北鏈路異常和機房側異常。
然而由于探測數據回傳延遲、回傳鏈路故障、單省份探測點少等原因,難以保證每個判定周期都能拿到31個省份到機房的完整探測數據,即特征數據大概率存在缺失值。另外南北鏈路故障發生次數較少,可用于訓練分類器的數據樣本不足,訓練出的模型極易過擬合。
根據對這兩個思路的分析,可以發現它們由于存在一些問題而難以直接應用。因此,我們綜合了這兩個思路中有用的部分,設計了骨干網判障策略。
骨干網異常判定策略
綜合考慮上述兩個方案,我們嘗試在判障策略中采用分類器模型,并人為設計特征來減少特征維度,減少模型過擬合的風險。
判障策略的具體步驟如下:
確定省份異常狀態真值
我們根據各省份異常率以及人為設定的閾值,判定該省份到機房的異常狀態,并且以此狀態作為省份異常狀態的真值。
尋找劃分線位置
在判定各省份到某機房的異常狀態后,對所有省份按照緯度進行排序,并將每個省份都作為可能的劃分位置進行遍歷,尋找使得“劃分誤差”最小的位置,作為劃分線位置。
每個可能劃分位置都會將省份集合分為劃分位置以南的集合與劃分位置以北的集合。根據南北鏈路異常的特點可知,若異常機房為南方機房,則應為正常省份的集合,而應為異常省份的集合。若異常機房為北方機房,則為相反情況。
對于每個省份,若由劃分得到的省份狀態與省份異常狀態真值不符,則認為該省份被劃分錯誤,劃分誤差可以通過劃分錯誤的省份數/總省份數得到。
如圖6示例,假設8個省份被劃分,且上半部分為正常省份集合,下半部分為異常省份集合。根據異常狀態真值,可計算得到劃分誤差為2/8=0.25。
圖6 劃分誤差計算示例
在遍歷所有可劃分位置后,即可得到最小劃分誤差及對應的劃分位置了。
特征提取
根據對歷史數據的觀察得知,南北鏈路異常對應的劃分誤差相對較小,且劃分線在地圖中部位置上下變化。而機房側異常劃分位置和誤差沒有規律可循。圖7展示了兩類異常數據的散點圖。
圖7(a) 線性劃分結果
圖7(b) 非線性劃分結果
從圖7(a)與(b)可以看出,僅使用兩維特征的情況下,無論是線性分類還是非線性分類,都很難將兩類異常數據較好地劃分開來。
為了提高分類效果,我們需要引入其他輔助分類的特征,具體如下:
機房位置、異常省份緯度中位數
兩者的相對位置關系在南北鏈路異常時具有明顯特征,因此這兩維數據的引入增強了南北鏈路異常的可識別性。例如,南北鏈路異常發生時,到南方機房異常的省份通常在緯度上遠大于機房所在的廣東省。取中位數為了消除極端點和噪聲帶來的影響。
劃分位置兩邊省份異常率均值
機房側異常發生時,異常省份的分布通常是較為均勻分布于全國各地,因此劃分線兩邊省份的異常率均值差距通常不會很大。因此這兩維特征有助于分類器識別機房側異常。
分類器訓練
為了區分兩類異常類型,我們將訓練一個二分類器,訓練數據正例為南北鏈路異常按上述步驟提取到的特征,反例為對機房側異常提取的特征。在分類器的選取上,我們選擇了支持向量機(SVM)這一常用的分類器模型,并根據實驗回溯效果選擇了合適的核函數。通過以上步驟,我們實現了骨干網鏈路異常的判定策略。自上線運行以來,取得了極佳的異常判定效果。
總 結
本文從外網異常監控遇到的實際問題出發,介紹了骨干網鏈路異常以及判定策略的設計思路。該策略有效地解決了骨干網異常與機房側異常混淆的問題,使得百度云智能運維產品Noah能夠精確定位骨干網鏈路異常,完善監測能力。