本文做者:AIOps智能運維算法
在以前的系列文章《百度網絡監控實戰:NetRadar橫空出世》中,咱們介紹了百度內網質量監測平臺NetRadar的原理和架構,其中,判障算法是內網監測系統的重要一環,今天咱們將詳細介紹在NetRadar中實際使用的一種判障算法——基於二項分佈的網絡判障算法。服務器
業務場景網絡
咱們的內網監測系統NetRadar實時對百度內網連通性進行探測並根據探測數據判斷是否存在網絡故障。以探測機房A到機房B的連通性爲例,以下圖所示,首先從機房A和B中選擇n個服務器對,機房A中的服務器
去探測機房B中的服務器
,每次探測有成功/失敗兩種結果。在每一個探測週期內,咱們會收到n個探測數據,其中m個數據探測成功,(n-m)個數據探測失敗。架構
理論上,在網絡狀態正常的狀況下,m/n=100%。但實際中,因爲服務器自身問題(發起探測的服務器負載太高、被探測的服務器重啓等)以及一些偶然因素,少許的探測失敗是不可避免的,因此須要設定一個判斷網絡是否故障的閾值。運維
閾值設定函數
在實際設定閾值的過程當中,咱們遇到兩個問題:3d
單服務器故障致使產生探測數據的噪聲blog
如前面所述,當服務器a探測服務器b時,若是服務器b自身故障(負載太高或者遇到機器重裝、重啓等)或遇到其餘偶然因素,探測也可能失敗,但並不能說明此時存在網絡問題,這種狀況咱們稱爲數據噪聲。資源
雖然單臺服務器故障的機率不高,但在大量服務器參與的網絡探測中,服務器故障產生數據噪聲幾乎是常態。get
不一樣探測任務樣本數差距大,受噪聲影響,小樣本的探測任務更難進行準確判障
因爲網絡結構的多樣性,不一樣探測任務的樣本數差距很大。例如在機房A到機房B的探測中,樣本數與機房內服務器數量相關,若是A機房內服務器數量少,則探測樣本也少。實際中,不一樣任務的樣本數變化範圍從幾十到幾千。
對樣本量大的探測任務,數據噪聲對判障結果影響不大,但小樣本的探測任務卻很是容易受噪聲影響。
例如某探測任務有100個樣本,某個週期收到60條成功數據,40條失敗數據,成功率只有60%,顯然,此刻的網絡存在故障。但若是另外一個探測任務只有5個樣本,在某個週期收到3個成功樣本,2個失敗樣本,成功率一樣爲60%,但咱們很難判斷這2條數據是探測數據噪聲仍是真的存在網絡問題,因此不能直接使用固定的閾值判斷網絡故障。
另外,如以前的文章《百度網絡監控實戰:NetRadar橫空出世》所述,NetRadar的探測任務數量很大,判障算法要求是通用的、低開銷的、高魯棒性的。所以,也不能針對具體的探測任務訓練專門的閾值,這樣會給系統的後期維護增長很大成本。
基於二項分佈的網絡判障算法
在本文描述的網絡判障場景中,每一個探測任務每週期收到相互獨立的n個成功/失敗樣本,其中在網絡正常的狀況下每次探測以必定的機率p返回成功,這正符合機率統計中二項分佈的定義。
一、二項分佈
首先,簡單回顧一下機率統計中的二項分佈。
二項分佈是n個獨立的伯努利試驗中成功次數的離散機率分佈,其中每次試驗成功的機率爲p。
若是隨機變量X服從二項分佈,那麼在n次試驗中,剛好獲得m次成功的機率爲:
其中,
累積分佈函數能夠表示爲:
二、二項分佈在判障中的應用
回到咱們的場景中,對於一個探測任務來講,在一個週期內收到n個樣本,其中m個成功樣本,同時,根據歷史數據能夠肯定在網絡正常的狀況下,一次探測成功的機率爲p(因爲服務器自己的問題和其餘客觀緣由,在網絡正常的狀況下也有可能獲得探測失敗的樣本,p值就是描述在網絡正常的狀況下探測成功的機率)。一個週期內的樣本相互獨立。很顯然探測樣本X服從參數爲n和p的二項分佈。
當一個週期內收到的n個樣本中包含m個成功樣本,如何判斷此時網絡是正常仍是異常呢?咱們其實是經過判斷m是否過小了來肯定是否有網絡故障。也就是,能夠經過計算累積分佈函數判斷:
若是太低(
,其中
是咱們預先設定的一個機率閾值),說明在正常的網絡狀態下,n個樣本中收到小於等於m個正常樣本的機率很低,能夠判斷這時網絡是異常的。
然而當n很大時,須要屢次計算
,在每一個週期有上百萬數據須要計算的狀況下,對CPU資源消耗很大。
不過根據中心極限定理,咱們知道:
二項分佈當n足夠大時,
近似服從指望爲0,方差爲1的正態分佈,即標準正態分佈。
以此爲依據,計算Z-score:
根據對歷史數據的標註和訓練能夠獲得z的閾值,使用閾值進行網絡判障。
三、實際效果
實際運行中的一組網絡正常和異常時成功率和Z-score分別以下圖所示,能夠看到,若是在成功率上設置閾值,很難找到一個較好區分網絡正常和異常的閾值,但使用二項分佈則能夠很容易肯定區分正常與異常的閾值。
算法的擴展和應用:本文介紹的基於二項分佈的判障算法,應用場景並不只限於網絡監控,實際上這個算法能夠應用於全部的成功率檢測,只需針對固定場景肯定參數p和閾值。
總結
本文從網絡監測中遇到的實際問題出發,介紹了基於二項分佈的判障算法,在內網監測系統中有效地解決了不一樣探測任務樣本數差別大且可能存在數據噪聲等實際問題,尤爲在小樣本的判障中表現優異。
若您想進一步瞭解內網監測問題,歡迎給咱們留言!