
2015-07-17 &nbs₽¶p;| 發布者:梁國(guó)芳&π£nbsp; | ασ'查看(kàn):3320次
IT新聞連續劇(jù)《夜魔俠》裡(lǐ)面的(λ"de)主角是(shì)個(gè)瞎子(zǐ),但(d±♣÷àn)其他(tā)的(de)感官異常靈敏。這(zhè)使他§ ¥¶(tā)可(kě)以察覺到(dào)某個®>★♦(gè)人(rén)行(xíng)為(wèi)上←β£(shàng)的(de)些(xiē)許異常從(cóng)而判斷出這≤✘(zhè)個(gè)人(rén)是(shì)否在撒™ $謊。我們也(yě)開(kāi)發了(le)一(yī)個(gè)系統來(₩ γlái)發現(xiàn)服務器(qì)之間(ji↔'☆ān)細微(wēi)的(de)差别,差别雖然小(xiǎo),但(dàn)π可(kě)能(néng)就(jiù)是(shσ <ì)這(zhè)些(xiē)小(xiǎo)÷∏的(de)地(dì)方出問(wèn)題。
本文(wén)中我們将介紹這(zhè)一(yī)自(zì)動異常偵測技×∑(jì)術(shù)和(hé)問(wèn)題服<&務器(qì)的(de)修複。多(duō)虧了(le)它,不(bù)然我們恐怕得(d≥✘e)整天半夜爬起來(lái)救火(huǒ)。
現(xiàn)在運行(xíng)Netflixλ✔≥λ服務的(de)有(yǒu)好(hǎo)幾萬台服務器(qì),一₹δ(yī)般出問(wèn)題的(de)比例不(bù)會(huì)超過1★¶ ≥%。比如(rú)說(shuō)有(yǒu)一(yα≥↓πī)台服務器(qì)的(de)網絡出了(le)點問(wèn)題導緻用(yΩ✘σòng)戶的(de)連接出現(xiàn)☆←↑了(le)延遲。雖然運行(xíng)狀态不(bù)理(lǐ)想,但(dàn)在服務器(qì)健康π♥®β檢查中是(shì)看(kàn)不(bù)出來(₽₽™φlái)的(de)。
其實這(zhè)種有(yǒu)問(wèn)題的(de)服務器(qì)還(hγ ái)不(bù)如(rú)直接挂掉。起碼挂掉的(☆♣₹de)話(huà)現(xiàn)有(yǒu)的(de)監測系統和(γ↑♣€hé)工(gōng)程師(shī)能(nénγΩg)夠發現(xiàn)它挂了(le)。現(xiàn)在它雖然沒有(yǒu)§&γ挂,但(dàn)影(yǐng)響到(dào)了(le)用↑&'±(yòng)戶的(de)體(tǐ)驗,我們的(de)客服還(hái)是 ∞σ✔(shì)一(yī)樣要(yào)接電(diàn)話(h≤£€&uà)聽(tīng)用(yòng)戶的(de)抱 ≠δφ怨。也(yě)不(bù)知(zhī)怎的(de),幾萬台服務器(q↔ì)裡(lǐ)總有(yǒu)幾個(gè)要(yào)出問(wèn)題。
圖中不(bù)同顔色的(de)線代表某個(gè)服務器(qì)的(dβ÷π←e)錯(cuò)誤率。每條線都(dōu)有(yǒu) ™δ峰值然後掉回到(dào)零,但(dàn)紫色代表的(d≈↓e)這(zhè)台服務器(qì)錯(cuò)誤率一(yī)直高(gāo)于≤↑§其他(tā)服務器(qì)。從(cóng≈♠)圖中你(nǐ)能(néng)看(kàn)出紫$εε≈色代表的(de)服務器(qì)有(yǒuφ&¶)異常嗎(ma)?有(yǒu)沒有(yǒu)辦法使用(yòng)這(zhè)些★"(xiē)時(shí)序數(shù)據來(lái)實現&ε≠'(xiàn)異常偵測的(de)自(zì)動化(huà±↓ε)呢(ne)?
有(yǒu)一(yī)種簡單的(de)方法是(shì)設置∏ε一(yī)個(gè)阈值,錯(cuò)誤率高(gāo)于阈值就(Ω₽≤↑jiù)報(bào)警,但(dàn)隻适用(yòng)于錯(→δ♦cuò)誤率特别高(gāo)的(de)服務器(qì)而且這(z©↔Ωhè)種方法有(yǒu)一(yī)個(gè)問(wèn)₽>題就(jiù)是(shì)所有(yǒu)數(shù)Ωφ據都(dōu)會(huì)有(yǒu)尖峰所以可(kě)™♦∑∞能(néng)誤差會(huì)比較大(dà),下 ≥(xià)面的(de)圖中我們就(jiù≈≥)很(hěn)難找到(dào)一(yī)個(gè)合适的(de)阈值≥§,此外(wài)使用(yòng)的(de)阈值也(yě)需要(yàoεφ)定期進行(xíng)調整因為(wèi)服務器(qì☆≈♦☆)集中使用(yòng)的(de)時(shí)間♣♦∏(jiān)和(hé)負載都(dōu)可(₩≠" kě)能(néng)出現(xiàn)變化(huà)。我們提高(gāo)∑系統可(kě)靠性的(de)突破點就(jiù)是(shì)自(zì☆☆≥ )動偵測那(nà)些(xiē)有(yǒu)問(wèn)題但(εdàn)用(yòng)阈值法發現(xiàn∞§')不(bù)了(le)的(de)服務器(q$©≈ì)。
為(wèi)了(le)解決這(zhè)一(yī÷♥π>)問(wèn)題我們使用(yòng)了(l€×∏e)聚類分(fēn)析算(suàn)法。聚類分(fēn)析算(suàn ∑)法的(de)基本原理(lǐ)是(shì)♠ ™将相(xiàng)似程度高(gāo)的(de)樣本歸到(dào)一≤÷(yī)類。這(zhè)一(yī)算(suàn)₽♥法是(shì)非監督式的(de)所以我們不(bù)需要(yào) δ$進行(xíng)數(shù)據标記和(hé)提供數(shù)據&÷∞。具體(tǐ)的(de)聚類分(fēn)析算(suàn)'γ±法有(yǒu)很(hěn)多(duō)種,這(zhè)裡(lǐ)εσ我們使用(yòng)的(de)是(shì)Density-Based&n≠♠¶bsp;Spatial Clusteri₹♥ng of Applicationsε∑→™ with Noise (DBSCAN)&nb σ÷βsp;算(suàn)法。
DBSCAN算(suàn)法原理(lǐ)
DBSCAN算(suàn)法是(shì)Martin ≤γ>♠Ester、Hans-Peter Kriegel、J&oum×±₽∏l;rg Sander和(hé)徐曉偉在1996≤"年(nián)提出的(de),可(kě)以說(shuō)是 ≈(shì)聚類分(fēn)析的(de)典型算(suàn)法。DBλΩΩSCAN遍曆所有(yǒu)的(de)數(shù)據點,如(rú)果有(yǒu≥₹ $)很(hěn)多(duō)相(xiàng)鄰♥✔的(de)數(shù)據點的(de)話(hu≥'×à)就(jiù)歸為(wèi)一(yī)類。為∞€§(wèi)了(le)在DBSCAN算(sε₹•£uàn)法中衡量數(shù)據點是(shì)否相(♠§xiàng)鄰我們需要(yào)一(yī✘©®)個(gè)判斷距離(lí)的(de)方法。 這(zhè)裡(lǐ)可(kě)視(shì)化(huà)了(le)≥≠DBSCNAN算(suàn)法運行(xíng)的(₽☆®de)過程,如(rú)果感興趣的(de)話(huà)可(kě)以看(k®☆àn)下(xià)。
使用(yòng)DBSCAN算(suàn)法尋找異常服務器(qì)
要(yào)找出有(yǒu)異常的(de)服務器(qì),我們先要(yà>¶o)指定一(yī)個(gè)指标,比如(rú)>∏λ<之前我們提到(dào)的(de)錯(cuò)誤率。接下(xià)來(♥↓lái)就(jiù)要(yào)收集一(yī)段時(shí)序數(shù)據并☆♥使用(yòng)DBSCAN算(suàn)法來(lσ≈ái)進行(xíng)處理(lǐ)找出發生(s♥ε±hēng)異常的(de)服務器(qì)。比如(♠σ ∞rú)下(xià)面這(zhè)幅圖中塗成粉紅(hóng)色的(de)就(jiσ'ù)是(shì)從(cóng)Netfli±©x時(shí)序數(shù)據平台中收集的(de)部分(fēn)。
除了(le)測量的(de)指标,我們還(hái)需要(yà$×o)指定将服務器(qì)标記為(wèi)異常₩§↑的(de)最短(duǎn)持續時(shí)間(ji$©≥•ān)。探測到(dào)異常之後就(jiù)交由我們的(✔ΩΩde)報(bào)警系統來(lái)進行(xín≥&∏g)以下(xià)處理(lǐ):
參數(shù)的(de)選擇
DBSCAN算(suàn)法中需要(yào)≥設置兩個(gè)參數(shù):Eps和(hé)MinPts。意思"δ分(fēn)别是(shì)判斷數(shù)據點是(shì)否相(xi☆★<àng)鄰的(de)半徑和(hé)定義一(yī)✔ >λ個(gè)集群所需要(yào)的(de)數(shù)據點♥•∏≈的(de)最小(xiǎo)個(gè)數(shù)。這(zhè)裡(lǐπ≥)我們的(de)參數(shù)是(shì)根據現(x≤© iàn)有(yǒu)的(de)異常服務器(qì)數(shù)目使用(yò$≥☆ng)模拟退火(huǒ)算(suàn)法逆推出來φ₽β★(lái)的(de)。這(zhè)種逆推的(de)方式簡化(huà)★ ★≈了(le)參數(shù)的(de)設置所以現(xiàn)在Netflix有(✘×"®yǒu)好(hǎo)幾個(gè)項目組都(dōu)在用(yòng)我們這(zhπ™è)個(gè)系統。
為(wèi)了(le)對(duì)這(zhè)個♥₽π(gè)系統的(de)有(yǒu)效性進行(xíng)評估,我們已經在$∞α生(shēng)産環境中進行(xíng)了(≠✔∑le)測試。我們一(yī)共收集了(le)一(yī)個(gε♠←è)星期的(de)數(shù)據,然後将人(rén)工(gōng↑↑ π)識别出的(de)異常服務器(qì)與算(suàn)法識别出的(de)££®異常服務器(qì)進行(xíng)了(le)→<δ≠對(duì)比。下(xià)面是(shì)測試的(de)結果
這(zhè)個(gè)結果顯示我們這(zhè)個(gè)偵測¥λπ$系統雖然不(bù)是(shì)100%準确但(dàn)是≠↓(shì)效果很(hěn)不(bù)錯(cuò)了(leΩ↔∑∞)。根據我們的(de)自(zì)身(shēn)情況來←♥∑φ(lái)說(shuō)也(yě)不(bù)用&±π(yòng)完全做(zuò)到(dào)一(yīα φ)點都(dōu)不(bù)差,因為(wèi)就(jiù)算(suàn)把一↕"σ(yī)個(gè)正常運行(xíng)的(de)服務 π'器(qì)給關掉了(le)也(yě)不(bù)會(huì)對(duì)用(y<òng)戶體(tǐ)驗造成多(duō)大(±β€dà)影(yǐng)響,因為(wèi)擴展"§×π系統馬上(shàng)就(jiù)能(néng)加一(yī)個(gè)新的€♠♣(de)服務器(qì)進來(lái)。有(♣™♥yǒu)這(zhè)個(gè)偵測系統總是(shì≤×π)比沒有(yǒu)強吧(ba)哈哈。
現(xiàn)在我們的(de)做(zuò)法是(s™₩hì)收集一(yī)段時(shí)間(jiān)的(de)數(shù)λ 據來(lái)進行(xíng)偵測。因為(÷≈wèi)不(bù)是(shì)實時(shí)偵測,所以效果就(jiù)跟→§←&收集數(shù)據的(de)時(shí)間(jiān)長✘£(cháng)短(duǎn)有(yǒu)關:時(shí)間(jiān)太短£§>(duǎn)的(de)話(huà)可(kě)能(néng)有(yǒu)★≤€噪音(yīn),太長(cháng)的(de)話(huà)偵測的(de<")速度又(yòu)太慢(màn)。如(rúπ™✔↕)果要(yào)對(duì)這(zhè)套系統進行(xíng)改¶£進的(de)話(huà),可(kě)以考慮使用(yòn✘≈g)實時(shí)流式處理(lǐ)框架比Ω★•如(rú)Mantis和(hé)Apache&×<nbsp;Spark Streaming。數(shù)據流©£ 挖掘和(hé)在線機(jī)器(qì)學習(xí)方面的(de)研究也(yě)>←™有(yǒu)一(yī)些(xiē)進展所以如(rú)果你(nα₹δ≠ǐ)想建設一(yī)個(gè)類似的(de)系§ε統可(kě)以考慮下(xià)。
此外(wài)在參數(shù)的(de)設置上(shàng)也(₩yě)可(kě)以進行(xíng)改進。可(kě)以進行(xíng)數(shπφ✔ù)據标記來(lái)組織訓練數(shùα'α)據并根據提供的(de)訓練數(shù)據來(lái)對(duì)模型₽©進行(xíng)訓練,這(zhè)種方法比我們現(xiàn)在用(δ&yòng)的(de)逆推更好(hǎo)而且模型可(k ®ě)以根據訓練數(shù)據的(de)變化(huà)來(πγlái)重新訓練。
小(xiǎo)結
Netflix的(de)基礎設施變得(d♦♣♠'e)越來(lái)越龐大(dà),将運營ε中的(de)某些(xiē)決定(比如(rú)這(zhè)裡(&$>lǐ)的(de)停止服務器(qì))進行(xíng)自(zì)動化☆ ÷×(huà)可(kě)以提高(gāo)可(kě)用(yòng)性并減輕運維人(δΩ♣rén)員(yuán)的(de)負擔。夜魔俠的(de)服裝能(né₹σ"ng)幫他(tā)打架,機(jī)器(qì)學習(×<xí)也(yě)能(néng)夠提高(gāo)我們技(jì)術(shù)保障£≠<↔團隊的(de)效率。偵測異常服務器(qì)δσ 隻是(shì)自(zì)動化(huà)的(de)一(yī)個(gè)例子(zβ¶ǐ),其他(tā)可(kě)以自(zì)動化(huà)的(de)機(jī)Ωπ®會(huì)還(hái)有(yǒu)很(hěn©♦)多(duō),就(jiù)留待大(dà)家(jiā)✔♠ 去(qù)發掘吧(ba)。
英文(wén)原文(wén): Tracking down the Villain★≠s: Outlier Detection at Netfλ₹lix(譯者/劉旭坤 審校(xiào)/朱正貴 責編/仲浩)
