国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于微服務調(diào)用鏈雙向搜索的故障根因定位方法*

2023-01-16 15:05鄒丹丹丁建兵王希棟葉曉舟歐陽曄
通信技術 2022年11期
關鍵詞:調(diào)用閾值準確率

鄒丹丹,丁建兵,王希棟,葉曉舟,歐陽曄

(亞信科技(中國)有限公司 通信人工智能創(chuàng)新實驗室,北京 100193)

0 引言

隨著軟件體系結構的不斷優(yōu)化和多樣化發(fā)展,微服務架構已經(jīng)廣泛應用于通信、互聯(lián)網(wǎng)等各類大型企業(yè)的業(yè)務中。微服務是將軟件應用拆分所形成的多個相互協(xié)作的小服務,可極大提高開發(fā)及維護的效率。在傳統(tǒng)軟件系統(tǒng)中,使用較多的是將整個功能模塊和數(shù)據(jù)作為整體的單體架構。與之相比,微服務架構將業(yè)務按功能拆分,使其擁有較高的靈活性和容錯能力、良好的動態(tài)擴展性以及可持續(xù)的集成性[1]。與此同時,網(wǎng)絡云化技術的發(fā)展也推動了微服務分布式計算系統(tǒng)的發(fā)展,面向微服務的各類網(wǎng)絡云化方案逐步走上舞臺。隨著微服務技術和網(wǎng)絡設備云化技術的廣泛應用,應用程序中的服務數(shù)量激增且形成了負載龐大的網(wǎng)絡。

微服務系統(tǒng)具有與分布式系統(tǒng)相似的固有復雜性和服務依賴性。由于各級微服務間存在大量且復雜的調(diào)用依存關系,因此當某一微服務出現(xiàn)故障時,會帶來相應的雪崩效應,其依賴的各級服務會在短時間發(fā)出大量的告警信息,這些海量的告警信息會降低運維效率;因此,如何高效地檢測故障,實現(xiàn)異常檢測及根因定位成為亟待解決的問題。其中,故障是指服務無法執(zhí)行其功能,而異常是指故障引發(fā)的可觀測現(xiàn)象。異常檢測是依據(jù)觀測到的異常現(xiàn)象,判斷故障類別的過程。根因定位是依托異常檢測,分析服務運行過程中可能發(fā)生的故障,定位到發(fā)生故障節(jié)點的過程。為了保障服務的安全性和可靠性,必須在微服務體系下實現(xiàn)高速響應的故障異常檢測和根因定位。

目前,研究人員已經(jīng)提出了很多不同的方案,來解決微服務中故障的異常檢測和根因定位問題。異常檢測和根因定位主要依托于觀測到異常的時間附近所記錄的數(shù)據(jù),這些數(shù)據(jù)包括和應用服務程序有關的關鍵性能指標(Key Performance Indicators,KPIs)、調(diào)用鏈、拓撲圖和日志等信息。按照使用數(shù)據(jù)的類別,異常檢測和根因定位可以分為基于日志、基于調(diào)用鏈和基于監(jiān)測數(shù)據(jù)等不同的類別[3]。本文重點關注基于調(diào)用鏈實現(xiàn)的異常檢測及根因定位方案。

調(diào)用鏈是分布式系統(tǒng)中的重要數(shù)據(jù),它表明了一個完整服務在分布式系統(tǒng)中的執(zhí)行順序或流程。在分布式系統(tǒng)中,通??刹捎脽o監(jiān)督[4-5]、有監(jiān)督[6]或跟蹤比較技術[7-8]來實現(xiàn)異常檢測。

根因定位可分為直接分析調(diào)用鏈和由調(diào)用鏈生成的拓撲圖驅動分析兩種方式。在直接分析調(diào)用鏈的早期,業(yè)務人員往往借助可視化工具來分析調(diào)用鏈,人工排查根因位置。人工排查的方法可以在系統(tǒng)中較為準確地定位根因,但是效率往往較低。后來,研究人員考慮對調(diào)用鏈中的服務響應時間進行分析來實現(xiàn)自動化方案[4,9]。此外,由調(diào)用鏈數(shù)據(jù)構成的拓撲圖也可以幫助實現(xiàn)根因分析,例如,在拓撲圖上執(zhí)行隨機游走[10-12]或廣度優(yōu)先搜索[13]進行探索?;谕負鋱D的方法無論是利用隨機游走還是搜索算法都存在耗時問題,而且在很多真實場景下,也會由于數(shù)據(jù)缺失等原因無法構建有效的拓撲圖,進而導致誤判,準確率無法得到保證?;谝蚬麍D的廣度優(yōu)先搜索方法[14-16]大多處于實驗階段?;贏I 的方案也是目前異常檢測和根因分析的主要研究方向,其中,基于機器學習、深度學習的方案在小樣本環(huán)境中精度高,但是在海量數(shù)據(jù)下則會相應增加較多的訓練耗時。上述各類方案距離落地仍存在一定距離。

在實際應用中,調(diào)用鏈根因定位方案通常由運維人員按照調(diào)用鏈順序自頂向下深度搜索,逐個排查故障,存在耗時較長和準確率不足等亟待解決的問題。而本文基于雙向搜索的思想,設計一種基于調(diào)用鏈雙向搜索的故障根因定位(Trace Bidirectional Search,TBS)算法。該算法先自頂向下搜索調(diào)用鏈,搜索過程中并不直接判別根因,簡化為僅統(tǒng)計故障節(jié)點及疑似故障節(jié)點的信息;再自底向上按層級檢索快速定位根因,其時間復雜度為常數(shù)階。所提算法已在某省級運營商實際上線,其Top 3 根因的準確率達到87%,平均定位耗時為15 s。本文算法在異常時刻前后一定時間周期內(nèi)搜索相關的調(diào)用鏈,依據(jù)節(jié)點間的連接關系、節(jié)點延時和調(diào)用狀態(tài)來挖掘深層復雜的根因節(jié)點,有助于運維人員進一步解決根因定位問題。

1 微服務異常檢測及根因定位方案

微服務系統(tǒng)下的異常檢測及根因定位的流程如圖1 所示。

圖1 微服務異常檢測及根因定位方案流程

其中,數(shù)據(jù)庫中保存了日志、關鍵性能指標和調(diào)用鏈等各類數(shù)據(jù)。異常檢測模塊利用這些數(shù)據(jù)實時識別出當前時間段的服務是否存在故障。若判斷出存在異常,則輸出該段時間的全量調(diào)用鏈數(shù)據(jù)。調(diào)用鏈根因定位模塊則會對調(diào)用鏈數(shù)據(jù)依次進行清洗與預處理,自頂向下搜索異常節(jié)點和疑似異常節(jié)點,自底向上計算根因概率并在最后輸出概率排序最大的Top 3 根因節(jié)點。運維人員可以依據(jù)輸出的結果快速定位并修復相關節(jié)點,極大地提升了運維工作效率,保障了微服務的運行穩(wěn)定。

本文重點關注根因定位模塊,對異常檢測模塊則采用了通用方法。目前已有大量成熟的異常檢測方案可以實時對這些數(shù)據(jù)進行故障檢測。為了達到滿足用戶需求的服務等級目標(Service Level Objective,SLO),通常利用服務水平指標(Service Level Indicator,SLI)來對應滿足設定的SLO。SLI表示業(yè)務服務質量的具體黃金指標,例如網(wǎng)絡延時、吞吐量等。在微服務場景下,數(shù)據(jù)庫中保存了大量歷史業(yè)務核心指標,利用這些歷史數(shù)據(jù),可以使用通用的異常檢測方案[4-8]實現(xiàn)關鍵性能指標的異常檢測。本文方案通過對時延和成功率這兩種黃金指標的閾值判定,實現(xiàn)指標異常檢測。當時延高于閾值或成功率低于閾值的調(diào)用鏈比例達到設定的異常閾值時,判定該時刻為異常并觸發(fā)根因定位模塊。在閾值設定方面,考慮到隨著時間的增長業(yè)務的時延范圍存在漂移現(xiàn)象,即業(yè)務的平均時延會增加,以及業(yè)務人員也希望能夠通過閾值來控制報告異常的數(shù)量,因此采用人工可調(diào)的方式設定時延和成功率的判定閾值。

2 微服務調(diào)用鏈節(jié)點根因定位

當異常檢測模塊的輸出結果是某時刻存在異常時,則在該時刻前后的時間周期T內(nèi)可能存在不止一條異常調(diào)用鏈。在微服務下存在大量錯綜復雜的服務調(diào)用關系,而生成的調(diào)用鏈是單向傳播的,調(diào)用鏈上層節(jié)點的故障異常往往受底層節(jié)點的故障影響。調(diào)用鏈節(jié)點根因定位算法的目的是,已知某一時刻系統(tǒng)服務存在異常,在該時刻前后時間長度為T的時間段內(nèi),根據(jù)調(diào)用鏈數(shù)據(jù),查找到底層的故障發(fā)生位置,輸出這些調(diào)用鏈所使用過的微服務節(jié)點中最有可能發(fā)生故障的前K個根因節(jié)點,即定位到根本原因。

在實際業(yè)務中,評估根因定位模塊輸出的根因有準確率和召回率兩種指標。由于這兩種指標是互相制約的關系,因此需要權衡側重點。較大的召回率意味著根因定位模塊會反饋較多的根因,這會使業(yè)務人員疲于檢查,嚴重降低運維效率。此外,當某一底層微服務所在節(jié)點位置發(fā)生故障時,有可能導致告警風暴,即大量的告警和異常在同一時間爆發(fā)??紤]到更高的召回率會給服務器計算帶來極大的壓力,因此相比召回率,本文更加重視準確率,使算法輸出較為準確的結果。

2.1 數(shù)據(jù)清洗與預處理

在微服務系統(tǒng)中,業(yè)務調(diào)用的各個節(jié)點都會保存相關信息至日志中,將所有數(shù)據(jù)連接成鏈式結構就形成了一條調(diào)用鏈。每條調(diào)用鏈都擁有唯一的調(diào)用鏈序號TraceID。通常,調(diào)用鏈的方向都是自起點開始單向傳播的。調(diào)用鏈從頭節(jié)點起,會逐層調(diào)用不同節(jié)點,定義這里的層級為調(diào)用的深度。

在本文方案所應用的業(yè)務場景中,核心指標為節(jié)點延時和調(diào)用狀態(tài)是否異常。節(jié)點延時是指該節(jié)點運行相應服務的耗時,調(diào)用狀態(tài)表示該節(jié)點執(zhí)行相應服務是否成功。

調(diào)用鏈數(shù)據(jù)預處理主要分為調(diào)用鏈抽取和數(shù)據(jù)處理兩個階段,具體如下文所示。

(1)調(diào)用鏈抽取:由于每條調(diào)用鏈都有唯一的TraceID,根據(jù)調(diào)用鏈TraceID 將屬于同一條鏈的所有數(shù)據(jù)抽取出來,再基于節(jié)點ID 和父節(jié)點PID構建父子關系進行拼接,將其串聯(lián)為一條完整的調(diào)用鏈。

(2)數(shù)據(jù)處理:預先計算并保留算法中需要用到的結果,以提升算法效率,例如,當前節(jié)點后續(xù)所有子節(jié)點實耗時間(ElapsedTime)的總和、子節(jié)點個數(shù)、子節(jié)點調(diào)用成功數(shù)等,如表1 所示。

表1 調(diào)用鏈數(shù)據(jù)

2.2 調(diào)用鏈搜索和定位算法

某一條調(diào)用鏈的調(diào)用邏輯如圖2 所示。調(diào)用鏈中不同的節(jié)點屬于不同的服務類型。頭節(jié)點依次向下調(diào)用其他子服務,或者調(diào)用自己本身,呈現(xiàn)單向的調(diào)用方式。各個節(jié)點數(shù)據(jù)包含了各自的延時數(shù)據(jù)和是否調(diào)用成功的信息。

圖2 微服務完整調(diào)用鏈樣例

定位算法流程如圖3 所示,可分為自頂向下調(diào)用鏈搜索和自底向上調(diào)用鏈定位兩部分。

圖3 調(diào)用鏈搜索和定位算法流程

2.2.1 自頂向下調(diào)用鏈搜索算法

本節(jié)的目的是以服務節(jié)點為對象,計算并統(tǒng)計算法認定該節(jié)點為異常節(jié)點和疑似異常節(jié)點的次數(shù)。采用遞歸算法,從調(diào)用鏈的頭節(jié)點往后逐步判斷,若判定為異常節(jié)點則繼續(xù)向后搜索,否則停止后續(xù)搜索。

算法通過以下4 個方面判斷該節(jié)點是否為異常節(jié)點:

(1)當前節(jié)點存在延時異常。通常認為節(jié)點的延時是正態(tài)分布的,因此采用3-sigma 準則,將當前延時大于平均值3 個標準差的節(jié)點定義為異常節(jié)點。

(2)當前節(jié)點調(diào)用狀態(tài)失敗。每個節(jié)點都有二值的調(diào)用狀態(tài),可依據(jù)該字段判斷節(jié)點是否調(diào)用成功。

(3)當前節(jié)點后續(xù)子節(jié)點存在調(diào)用失敗情況。若后續(xù)節(jié)點異常,則必然會影響到當前節(jié)點。因此,當子節(jié)點的個數(shù)大于子節(jié)點調(diào)用成功數(shù)時,則認定當前節(jié)點為調(diào)用異常節(jié)點。

(4)當父節(jié)點異常時,當前節(jié)點延時tc占用父節(jié)點延時tp的一半及以上(只適用于非頭節(jié)點的判斷),具體如式(1)所示。在正常運行時,同一層級的節(jié)點往往在耗時上較為均衡,因此當前節(jié)點占用率過大即是異常節(jié)點。

然而,除了上述異常情況,在正常節(jié)點中存在這樣一種情況:當網(wǎng)絡出現(xiàn)較大波動時,當前節(jié)點傳輸?shù)礁腹?jié)點的耗時會增大,這部分耗時會累加為父節(jié)點耗時的一部分。這些節(jié)點本身也有可能是異常的,但是并未在上述4 類異常定義中體現(xiàn)。為此,本文將這些正常節(jié)點定義為疑似異常節(jié)點。節(jié)點延時包含了自身耗時和后續(xù)調(diào)用的子節(jié)點耗時總和∑tc。若當前節(jié)點判斷為正常節(jié)點,但是該節(jié)點的父節(jié)點自身耗時tp-∑tc占用了自身延時tp的一半及以上(只適用于非頭節(jié)點的判斷),則記錄為疑似異常節(jié)點,與正常節(jié)點相同,也停止往后搜索,具體為:

自頂向下調(diào)用鏈搜索算法的偽代碼如下:

至此,異常檢測算法可以統(tǒng)計出在時間段T內(nèi),多條調(diào)用鏈所調(diào)用的服務節(jié)點的正常次數(shù)、異常次數(shù)和疑似異常次數(shù)。異常和疑似異常本質上兩者均為異常?;谏鲜鏊阉鹘Y果,各個節(jié)點異常率的計算式為:

式中:nnormal為正常節(jié)點個數(shù);nsuspected為疑似異常節(jié)點個數(shù);nabnormal為異常節(jié)點個數(shù)。與傳統(tǒng)順序搜索并判斷根因的方案相比,該部分方案更加簡潔,僅做統(tǒng)計而省略了逐個判斷根因的過程。

2.2.2 自底向上調(diào)用鏈定位算法

由于調(diào)用鏈底層節(jié)點為根因的概率更大,因此,采用自底層向上層搜索根因節(jié)點的方式更易于定位根因。從底層開始篩選,若存在異常則直接在該層定位。根因定位所依賴的評價標準主要是上一步驟中得到的故障次數(shù)和異常率,而單獨采用故障次數(shù)或異常率都會嚴重影響定位精度。因此,判定依據(jù)應采用故障次數(shù)和異常率相結合的方式。

然而,若調(diào)用次數(shù)較少(調(diào)用一次且故障率為100%)或異常率較低(調(diào)用大量次數(shù)且有偶發(fā)性故障),該層的節(jié)點并不一定為根因。圖4 表明了一個5 層的調(diào)用鏈中各層的調(diào)用次數(shù)分布情況,從上至下調(diào)用數(shù)量分別為721,6724,23716,6643,632,該結果近似于正態(tài)分布。在調(diào)用鏈的高層和底層都存在調(diào)用次數(shù)少的問題。因此需要設置閾值,對調(diào)用鏈數(shù)據(jù)進行篩選。

圖4 調(diào)用次數(shù)分布

判定順序如下:

(1)人為設定故障次數(shù)和異常率的閾值,篩選去除故障次數(shù)低于閾值和異常率低于閾值的數(shù)據(jù);

(2)對當前層進行搜索,若該層存在單個異常節(jié)點,或者疑似異常節(jié)點,則直接作為根因節(jié)點;

(3)若存在多個異常節(jié)點,返回故障次數(shù)較多的節(jié)點作為根因;

(4)若存在多個異常節(jié)點且故障次數(shù)相同,則返回異常率較高的節(jié)點。

自底向上調(diào)用鏈定位算法的偽代碼如下:

由于搜索的根因絕大多數(shù)在底層,在Depth 循環(huán)中的前幾次判定就會返回,絕大多數(shù)在第1 次判定就直接返回結果。該部分的定位算法并未遍歷所有Depth,因此算法速度極快,時間復雜度為常數(shù)階。

3 效果評估

本文對某省級運營商自2021 年6 月份至10月份的微服務數(shù)據(jù)進行分析,獲取的數(shù)據(jù)量為 382 674 條。檢測區(qū)間為異常時刻前后各5 min(共計時間長度為10 min)的時間段。采用本文算法進行預測,輸出TopK的異常故障根因,并反饋給運維人員進行人工審核,判斷根因是否為真實故障節(jié)點并統(tǒng)計準確率。

圖5 表明了Top 3 準確率隨故障次數(shù)閾值的變化,其中橫坐標為故障次數(shù)閾值,從0 至100,間隔為10。圖中曲線表明,隨著閾值從0 增加至30,樣本中具有隨機性的小樣本根因節(jié)點被剔除,準確率有所上升。但是隨著閾值的繼續(xù)增大,真實的根因節(jié)點也會逐步被剔除,因此準確率會迅速下降。圖6 表明了Top 3 準確率隨異常率閾值的變化。當異常率閾值在0.05~0.15 之間時,隨著異常率閾值的提升,準確率不斷提升。這表明根因節(jié)點在底層,且異常率的提升過濾掉了一些干擾根因。但隨著異常率提升到0.2~0.4,準確率出現(xiàn)了明顯的下降,這是由于隨著異常率的提升,靠近底層的根因節(jié)點逐漸被錯誤過濾。

圖5 Top 3 準確率隨故障次數(shù)閾值的變化

圖6 Top 3 準確率隨異常率閾值的變化

對于選取的前K個結果,本文也進行了討論。表2 為在設定不同異常次數(shù)閾值和異常率閾值的情況下,選取不同數(shù)量的根因的準確率。結果表明,一方面,在異常次數(shù)和異常率的閾值設置為10 和0.15 時,在本數(shù)據(jù)集下效果最佳;另一方面,隨著選取的可能根因從Top 1 增加到Top 3,更大概率能命中相應的根因節(jié)點,根因的準確率有所提高。

表2 不同異常次數(shù)閾值和異常率閾值下的Top K 準確率

表3 為某省客戶管理系統(tǒng)(Customer Relation-ship Management,CRM)運營效果數(shù)據(jù)。其中,服務異常次數(shù)為異常檢測所檢測出的異常時刻的次數(shù),平均定位耗時為執(zhí)行一次算法程序所需的耗時。在算法效率優(yōu)化方面,本文將串行搜索修改為多進程并行的方式。此外,還使用了更高效率的存儲結構來進行加速,極大提升了算法的運行效率。在提升準確率方面,結合實際運營效果進行閾值的調(diào)節(jié),根據(jù)服務和閾值間的敏感性,來對應調(diào)整不同服務的閾值,以達到更好的定位效果。

表3 某省客戶管理系統(tǒng)運營效果數(shù)據(jù)

業(yè)務基準需求是準確率需達到0.7 以上并盡可能壓縮平均定位耗時。如表3 所示,2021 年6 月準確率未達到要求,平均定位耗時為3 min。經(jīng)過5 個月的實際業(yè)務上線測試,并結合業(yè)務優(yōu)化調(diào)節(jié)閾值至更合理的值,在2021 年10 月的數(shù)據(jù)集上,Top 3 準確率達到了0.87。程序修改為多進程,最終平均定位耗時壓縮到了15 s,準確率相較于首月提升了29.85%,耗時也從分鐘級提升至秒級。綜上,本文所提算法在調(diào)用鏈根因定位場景下,可以較為準確地定位根因,且在經(jīng)過優(yōu)化后,已能較好地滿足業(yè)務需求。

4 結語

本文提出了一種基于調(diào)用鏈雙向搜索的故障根因定位算法。基于微服務系統(tǒng)中故障時刻前后一定時間內(nèi)的調(diào)用鏈數(shù)據(jù),本文算法采用雙向搜索的思路實現(xiàn)了對異常根因節(jié)點的深度挖掘及精準定位。所提算法已在國內(nèi)某省級運營商項目中上線,Top 3根因的準確率達到了0.87,平均定位耗時為15 s。為了更好地滿足運維工作人員的需求,上線版本對調(diào)用鏈搜索的統(tǒng)計結果進行了可視化。此外,所提算法雖然設計應用于微服務場景,但是也具備拓展到其他具有調(diào)用鏈故障定位場景的潛力。本文為微服務系統(tǒng)下的故障根因定位問題提供了更加快速有效的解決方案,也為智能運維領域拓展了新的研究思路。

猜你喜歡
調(diào)用閾值準確率
土石壩壩體失穩(wěn)破壞降水閾值的確定方法
乳腺超聲檢查診斷乳腺腫瘤的特異度及準確率分析
不同序列磁共振成像診斷脊柱損傷的臨床準確率比較探討
2015—2017 年寧夏各天氣預報參考產(chǎn)品質量檢驗分析
采用紅細胞沉降率和C-反應蛋白作為假體周圍感染的閾值
核電項目物項調(diào)用管理的應用研究
系統(tǒng)虛擬化環(huán)境下客戶機系統(tǒng)調(diào)用信息捕獲與分析①
高速公路車牌識別標識站準確率驗證法
基于遲滯比較器的雙閾值穩(wěn)壓供電控制電路
一種改進的小波閾值降噪方法