莊衛(wèi)金,張 鴻
中國電力科學研究院有限公司 南京分院,南京 210003
近年來,隨著企業(yè)信息化的快速發(fā)展,現(xiàn)代軟件系統(tǒng)的數(shù)量越來越多,規(guī)模越來越大,結(jié)構(gòu)也越來越復雜。面對新形勢的變化,傳統(tǒng)的系統(tǒng)架構(gòu)設計方法顯露出了明顯的弊端:系統(tǒng)變得非常臃腫冗雜,無法提供可靠的服務,維護成本變得越來越高,想要擴展一些新功能變得越來越困難[1]。而微服務則從架構(gòu)的角度出發(fā),在根本上解決了這些問題。
微服務的概念最早由Fowler 和Lewis[2]提出,它的核心在于將一個大的應用系統(tǒng)按照業(yè)務邏輯劃分成若干個獨立的微服務,每個微服務負責完成一項單一的業(yè)務功能,各個微服務之間存在清晰的邊界,并通過輕量級的通信機制(例如HTTP)進行信息交互。由于單個微服務的復雜程度并不高,這樣每個微服務都可以由少量的開發(fā)人員負責,分別進行開發(fā)。而傳統(tǒng)的大型應用服務則需要大量的開發(fā)人員共同維護一個代碼庫,維護成本、交流成本都很高,并且容易弱化開發(fā)人員的責任意識。此外,由于采用微服務架構(gòu)的系統(tǒng)賦予了每個微服務不同的業(yè)務功能,并且彼此相互獨立,這樣當出現(xiàn)擴展新功能的需求時,通過簡單地向系統(tǒng)中添加一些新的微服務就能實現(xiàn),具有很強的可擴展性??紤]到微服務架構(gòu)相對于傳統(tǒng)方法的巨大優(yōu)勢,目前已經(jīng)有很多的企業(yè)采用了微服務架構(gòu),例如Twitter、Netflix、Amazon等。
雖然微服務架構(gòu)具有更高的可維護性和可擴展性,但同時它也為系統(tǒng)的故障檢測帶來了更大的挑戰(zhàn)。由于采用微服務架構(gòu)的軟件系統(tǒng)是由一系列彼此獨立并且更新頻繁的組件構(gòu)成的,這些組件之間還需要通過復雜的網(wǎng)絡交互模型進行通信,從而大大增加了系統(tǒng)發(fā)生故障的幾率,并且有關故障點的定位也變得更加困難。除此之外,各個微服務組件之間聯(lián)系密切,相互之間往往存在依賴關系,因此一個組件發(fā)生故障就可能引發(fā)連鎖反應,影響其他組件的正常服務,最終可能造成整個應用系統(tǒng)的崩潰[3]。根據(jù)以上分析,不難得出以下結(jié)論:故障檢測問題是阻礙微服務架構(gòu)進一步發(fā)展的關鍵問題之一,如何在應用系統(tǒng)發(fā)生故障時快速定位出故障發(fā)生的位置并準確地分析出故障發(fā)生的原因是當前研究的重點方向,對于提高微服務架構(gòu)的服務質(zhì)量(quality of service,QoS)具有非常重要的價值和意義。
目前關于面向微服務架構(gòu)的故障檢測方法主要有建立依賴圖(dependency graphs)和故障樹(fault trees)兩種[4]。其中依賴圖是用來對微服務架構(gòu)中各個應用服務之間的依賴關系進行建模,并且目前還沒有成熟的自動構(gòu)建依賴圖的方法,已有的方法往往存在著準確性不足、效率不夠高效的問題。故障樹由Rausand 等人[5]定義,是一種可以顯示應用系統(tǒng)中潛在關鍵事件與該事件原因之間相互關系的邏輯圖,它可以是定性的,也可以是定量的。故障樹分析就是構(gòu)造這樣一個故障樹的過程。由于一個應用系統(tǒng)中存在著眾多的關鍵事件,這些事件與其對應的原因之間的相互關系錯綜復雜,因此故障樹的構(gòu)造是一個非常耗時、低效的過程,這影響了這類方法在現(xiàn)實場景中的應用。
深度學習作為機器學習研究中的一個新領域,近年來已經(jīng)在分類、檢測、識別等多項任務中取得了前所未有的成就,受到了各界的廣泛關注,但目前還沒有人嘗試將深度學習方法用于微服務架構(gòu)的故障檢測中。本文將深度學習方法引入到面向微服務架構(gòu)的故障檢測研究中,提出了一個基于門控循環(huán)單元(gated recurrent unit,GRU)[6]的故障檢測方法MS-GRU。該方法的核心在于它能夠從以往的應用數(shù)據(jù)中分析、學習到導致故障發(fā)生的模式信息,并將這些信息用于未來的故障診斷和預測中,從而顯著改善了微服務架構(gòu)的服務質(zhì)量。GRU是一種特殊的循環(huán)神經(jīng)網(wǎng)絡(recurrent neural network,RNN)[7],與普通的RNN 網(wǎng)絡相比,GRU 能更好地處理長范圍依賴的問題。雖然長短期記憶網(wǎng)絡(long shortterm memory,LSTM)[8]也能處理該問題,但GRU 模型結(jié)構(gòu)更簡單,處理效率更高,效果更好,因此本文選擇GRU作為基礎網(wǎng)絡來構(gòu)造一個高效的面向微服務架構(gòu)的故障檢測模型。為了評估本文方法的性能,進行了廣泛的實驗,實驗結(jié)果證明了本文方法的有效性和優(yōu)越性。
微服務架構(gòu)將一個大型的服務拆分成一系列相互獨立、功能各異的微服務,增強了應用系統(tǒng)的可擴展性和可維護性,但同時也為系統(tǒng)內(nèi)部的故障檢測帶來了更大的挑戰(zhàn)。目前故障檢測問題已經(jīng)成為阻礙微服務架構(gòu)進一步發(fā)展的瓶頸。為了改善微服務架構(gòu)的服務質(zhì)量,使其能夠得到更加廣泛的應用,近些年來研究者們針對故障檢測問題展開了一系列的研究。本文首先對國內(nèi)外現(xiàn)有的一些面向微服務架構(gòu)的故障檢測方法進行詳細的介紹。
采用傳統(tǒng)架構(gòu)的應用系統(tǒng)通常利用人工設定報警規(guī)則[9]來進行故障檢測,但該方法并不適用于微服務架構(gòu)。這是因為采用微服務架構(gòu)的應用系統(tǒng)中,各個微服務之間往往存在著復雜的交互關系,所以系統(tǒng)管理員很難設定合理的故障檢測規(guī)則,也不能細粒度地診斷發(fā)生故障的原因。為了解決該問題,王子勇等人[10]提出了一種面向微服務架構(gòu)的基于執(zhí)行軌跡監(jiān)測的故障檢測方法。具體來講,該方法首先借助動態(tài)插樁技術來監(jiān)測各項微服務的處理流程,并利用樹形結(jié)構(gòu)來刻畫各項微服務請求處理的執(zhí)行軌跡;接著基于樹編輯距離和主成分分析來分別進行系統(tǒng)錯誤的診斷及性能異常的檢測。但該方法也存在一些尚未解決的問題,例如可能會遺漏一些關鍵方法,性能開銷比較大等。
徐康明[11]指出當前基于故障樹的檢測方法在構(gòu)造故障樹的過程中忽略了應用系統(tǒng)中的差錯容忍因素,并且沒有考慮到在系統(tǒng)實際運行過程中不同執(zhí)行路徑的執(zhí)行概率不一致的實際情況。針對這些問題,徐康明[11]提出了一種新的基于故障樹的檢測模型,該模型在系統(tǒng)中增加了差錯容忍機制并考慮了不同執(zhí)行路徑執(zhí)行概率的差異,從而增強了系統(tǒng)運行的穩(wěn)定性,提高了系統(tǒng)運行的成功率。
Ma等人[12]提出了一個能夠有效管理各個微服務組件之間復雜調(diào)用關系的基于圖的微服務分析和測試方法(graph-based microservice analysis and testing,GMAT)。GMAT 能夠自動生成服務依賴圖(service dependency graph,SDG),用于分析并可視化各個微服務之間的依賴關系。利用GMAT,人們能夠在開發(fā)的早期階段通過分析具有潛在風險的微服務調(diào)用鏈來檢測異常,并在開發(fā)新版本的系統(tǒng)時有效跟蹤各個微服務之間的聯(lián)系。實驗結(jié)果證明GMAT 在小型的和大型的微服務應用系統(tǒng)上都有著良好的表現(xiàn)。
劉一田等人[13]針對全鏈路應用服務監(jiān)控的擴展問題,設計了一個靈活的微服務監(jiān)控框架并部署在現(xiàn)有的服務管理層,以監(jiān)控微服務的狀態(tài)及不斷變化的服務負載。此外,該框架還使用了Raft算法[14]來增強系統(tǒng)中的數(shù)據(jù)一致性,從而有效避免了單點故障問題的發(fā)生。然而該框架也存在著部署架構(gòu)較為復雜,性能損耗較大等不足。
Celesti 等人[15]專注于解決物聯(lián)網(wǎng)設備中微服務的可靠性問題,提出了一個基于容器虛擬化的物聯(lián)網(wǎng)看門狗系統(tǒng)。當在物聯(lián)網(wǎng)設備上運行的微服務出現(xiàn)故障時,該系統(tǒng)首先會嘗試修復它,若修復失敗,會嘗試用另一個備用的微服務替換它,從而大大增強了物聯(lián)網(wǎng)設備中微服務的可靠性。Heorhiadi 等人[16]指出當前的互聯(lián)網(wǎng)應用系統(tǒng)大都采用了微服務架構(gòu),這些系統(tǒng)里面的微服務組件一天往往會被更新、部署數(shù)百次。為了應對加速的軟件生命周期,Heorhiadi等人[16]提出了Gremlin,一個用來系統(tǒng)性地測試微服務故障處理能力的框架。Gremlin基于這樣的觀察:各個微服務之間是低耦合的,因此它們依賴于網(wǎng)絡中標準的信息交換模式來進行通信。Gremlin允許操作人員通過在網(wǎng)絡層操縱各個微服務之間的通信來輕松地設計和執(zhí)行系統(tǒng)測試。Mayer等人[17]提出了一個可以實現(xiàn)微服務監(jiān)控及管理的系統(tǒng),能夠滿足不同用戶的需要。該系統(tǒng)支持不同監(jiān)控設施的集成,以收集充足的與微服務相關的運行數(shù)據(jù)。除了運行數(shù)據(jù)之外,該系統(tǒng)還支持其他信息源的融合,從而能夠在微服務系統(tǒng)出現(xiàn)故障時,更準確地分析出故障發(fā)生的原因。
彭天舒[18]分析總結(jié)了采用微服務架構(gòu)的應用系統(tǒng)可能會遇到的一些異常情況,主要包括兩方面:由于微服務之間互相信任而引發(fā)的內(nèi)部攻擊,以及攻擊者通過避開權(quán)限管理機制來提升自身權(quán)限而引發(fā)的權(quán)限攻擊。這些攻擊可能會造成調(diào)用路徑的異常,調(diào)用順序與層次關系的異常,功能與角色對應關系的異常等。為了能對上述異常進行及時有效的檢測,彭天舒將入侵檢測技術和分布式追蹤技術結(jié)合在一起,提出了基于特征規(guī)則的異常檢測方法。不過由于該方法采用離線的檢測方式,會有一定的滯后性。
以上的故障檢測方法都是基于傳統(tǒng)方法,本文將深度學習方法引入到面向微服務架構(gòu)的故障檢測研究中,提出了一個基于GRU 的故障檢測方法MS-GRU,顯著提升了故障檢測的精度和效率,從而改善了微服務架構(gòu)的服務質(zhì)量。
基于微服務架構(gòu)設計的應用系統(tǒng)中的每個微服務組件都有可能發(fā)生故障,如何快速地檢測到故障的發(fā)生,并準確地定位出故障發(fā)生的位置,對于改善微服務架構(gòu)的服務質(zhì)量有著非常重要的意義。為此,本文提出了一個基于GRU[6]的故障檢測模型MS-GRU,模型架構(gòu)如圖1所示。
圖1 MS-GRU模型架構(gòu)圖Fig.1 Architecture of proposed MS-GRU model
首先對MS-GRU 模型進行一個整體的概述。MSGRU模型是一個數(shù)據(jù)驅(qū)動(data-driven)的方法,與傳統(tǒng)的微服務故障檢測方法相比,MS-GRU對于未知以及不斷變化的應用場景更具魯棒性。MS-GRU 輸入層神經(jīng)元和輸出層神經(jīng)元的數(shù)量與處于激活狀態(tài)的微服務組件數(shù)量保持一致。各個微服務組件的工作狀態(tài)信息、與其他組件的依賴關系、通信狀況等各類有關數(shù)據(jù)在經(jīng)過標準化處理后得到一組向量,作為MS-GRU 模型的輸入。MS-GRU利用這些數(shù)據(jù)進行網(wǎng)絡的訓練,以從歷史數(shù)據(jù)中學習導致故障發(fā)生的模式信息,包括空間模式和時間模式兩種。其中空間模式主要指各個微服務組件之間的依賴關系,時間模式主要指輸入的負載情況、資源沖突情況等。MS-GRU的核心思想在于,以往導致故障發(fā)生的條件可用于預測在未來的某個時間點是否會有故障發(fā)生。MS-GRU 的輸出即是每個微服務組件將要發(fā)生故障的概率。
MS-GRU 模型是將深度學習方法引入微服務故障檢測任務的首次嘗試,如何設計一個與該任務特性相適配的神經(jīng)網(wǎng)絡是本文要重點解決的問題。具體來講,針對微服務故障檢測任務中存在的數(shù)據(jù)類型不統(tǒng)一,數(shù)據(jù)量龐大,各特征間依賴關系難以學習,網(wǎng)絡訓練容易出現(xiàn)梯度消失和梯度爆炸等各個問題,設計了一系列相應的模塊來解決。下面對MS-GRU 模型的各個模塊進行具體的介紹。
數(shù)據(jù)預處理模塊。MS-GRU 模型的輸入包含了屬性不同、度量單位各異、值域差異明顯的各類數(shù)據(jù),如果不對這些數(shù)據(jù)進行預處理,可能會對最終結(jié)果造成不可預估的影響。例如,時間數(shù)據(jù)采用秒或毫秒,距離數(shù)據(jù)采用米或厘米,可能會導致完全不同的結(jié)果。一般而言,使用較小的度量單位來表示屬性會導致該屬性具有較大的值域,而值域較大的屬性往往具有更大的“權(quán)重”去影響最終結(jié)果。為了避免由于度量單位的不同而對最終結(jié)果產(chǎn)生干擾,在將原始數(shù)據(jù)送入網(wǎng)絡模型之前應該預先對其進行標準化處理,以賦予所有屬性相同的權(quán)重。這里采用了z-score標準化方法來處理MS-GRU模型的原始輸入數(shù)據(jù)x:
其中,xi為x中第i項數(shù)據(jù),μx為x的均值,σx為x的標準差,xi′為經(jīng)過標準化處理后的數(shù)據(jù)。
全連接層(fully connected layers,F(xiàn)C)和卷積層(convolutional neural networks,CNN)。輸入MS-GRU的數(shù)據(jù)除了種類各異外,在數(shù)量上也非常龐大,其中往往蘊含著很多無用和冗余的信息,它們會阻礙模型檢測精度和檢測效率的提升。為了從原始數(shù)據(jù)中提取出關鍵特征(feature)信息,傳統(tǒng)方法通常采用手工設計(hand-crafted)的方式,但這種提取特征的方式是非常主觀、低效的,很難處理海量的輸入數(shù)據(jù)。為了解決這個問題,本文引入了深度學習的方法,將經(jīng)過數(shù)據(jù)預處理后的微服務數(shù)據(jù)輸入若干個全連接層和卷積層,這里網(wǎng)絡層包含了成千上萬的參數(shù)(parameters),能夠在模型的訓練過程中自動、高效地從輸入數(shù)據(jù)中提取出關鍵的特征信息,用于后續(xù)的故障檢測。
注意力層(attention layer)。各個關鍵特征之間往往不是相互獨立的,而是存在一定的依賴關系,并有著強弱之分。而全連接層和卷積層只對數(shù)據(jù)中的關鍵特征進行了提取,沒有考慮各個特征之間的依賴關系,限制了故障檢測模型的性能。為了解決這個問題,本文提出了一種新的注意力機制(attention mechanism)來學習各個關鍵特征之間的依賴關系。注意力機制最初由Bahdanau等人[19]提出,現(xiàn)已成為神經(jīng)網(wǎng)絡結(jié)構(gòu)的重要組成部分,并被廣泛應用于自然語言處理、計算機視覺、統(tǒng)計學習等領域。本文針對故障檢測任務的獨特性,提出了一個與其特性相適應的新的注意力層。具體來講,對于前一卷積層輸出的任意兩個特征Fx和Fy,將其轉(zhuǎn)換到兩個特征空間s和t以計算它們之間的attention:
其中,Ws、Wt和Wh是可學習的權(quán)重矩陣,對應于圖1中的1×1 卷積。i是輸出位置的索引,j代表所有可能位置的索引。
本文提出的注意力機制與傳統(tǒng)的注意力機制的主要區(qū)別在于:傳統(tǒng)的注意力機制的目標在于學習一個注意力權(quán)重矩陣,應用于當前層的各個神經(jīng)節(jié)點,對于那些重要的節(jié)點,賦予它們較大的權(quán)重,對于那些次要的節(jié)點,賦予它們較小的權(quán)重。由于每個神經(jīng)節(jié)點都包含著某種特征信息,經(jīng)過上述操作,神經(jīng)網(wǎng)絡就能從眾多特征信息中選擇出對當前任務目標更關鍵的信息。而本文所提出的注意力機制則不同,其更多地關注到了各個特征信息間的依賴關系,這是與面向微服務架構(gòu)的故障檢測任務更相適應的。而對于關鍵特征信息的提取,通過前面的全連接層和卷積層已經(jīng)實現(xiàn)。
總的來說,通過本文提出的注意力層,模型學習到了各個關鍵特征之間的依賴關系,有利于模型檢測精度的提升。
GRU 層和Softmax 層。GRU 網(wǎng)絡解決了長序列訓練過程中經(jīng)常發(fā)生的梯度爆炸和梯度消失問題,因此即使對于很長的數(shù)據(jù)序列,GRU 也有著很好的表現(xiàn)。這里引入了多個GRU 層,它們以注意力層的輸出作為輸入,在不斷的網(wǎng)絡訓練中去學習導致故障發(fā)生的模式信息。接著Softmax 層以GRU 層輸出的模式信息f作為輸入,輸出各個微服務組件發(fā)生故障的概率p:
其中,pi代表第i個微服務組件發(fā)生故障的概率,fi代表最后一層GRU里第i個神經(jīng)元的輸出,n代表應用系統(tǒng)中微服務組件的數(shù)量。
值得指出的是,雖然GRU層和Softmax層都不是新的方法或技術,現(xiàn)已得到了廣泛的研究和驗證,但本文主要的貢獻在于將它們擴展應用于一個更具挑戰(zhàn)性的新任務:面向微服務架構(gòu)的故障檢測。并且為了讓GRU網(wǎng)絡與新任務更加適配,還對其進行了結(jié)構(gòu)上的調(diào)整:對于GRU 網(wǎng)絡中的狀態(tài)單元,先使用Leaky ReLU激活函數(shù)對其進行處理,之后再讓其進行下一步的計算。經(jīng)過這樣的調(diào)整,進一步避免了梯度爆炸和梯度消失問題,從而可以使用更深的網(wǎng)絡結(jié)構(gòu),能夠解決傳統(tǒng)的面向微服務架構(gòu)的故障檢測方法難以深入挖掘數(shù)據(jù)的問題,有利于提高模型的檢測精度。本文將深度學習方法引入該領域,這為該領域的進一步發(fā)展提供了一種新的思路。
損失函數(shù)。根據(jù)模型預測結(jié)果與實際情況的差異,定義了交叉熵損失函數(shù)(cross entropy error function):
其中,m代表樣本數(shù)據(jù)的數(shù)量,yi代表現(xiàn)實中的故障發(fā)生情況(0代表未發(fā)生故障,1代表發(fā)生了故障),pi代表MS-GRU所預測的故障發(fā)生的概率。
訓練方式。本文采用反向傳播算法(back propagation)來訓練網(wǎng)絡模型,主要包含激勵傳播、權(quán)重更新這兩個環(huán)節(jié)。其中激勵傳播指正向傳播過程:輸入數(shù)據(jù)經(jīng)由各個網(wǎng)絡層逐層處理最終得到預測結(jié)果,然后根據(jù)預先定義的損失函數(shù)計算預測結(jié)果與實際情況之間的誤差值。權(quán)重更新指反向傳播過程:根據(jù)預測結(jié)果與實際情況之間的誤差值,從輸出層開始向著輸入層逐層計算損失函數(shù)對各神經(jīng)元權(quán)重的偏導數(shù),并隨之更新各神經(jīng)元的權(quán)重,完成一次迭代。在本文的實驗中,MS-GRU模型共經(jīng)歷了20萬次迭代。
圖2展示了MS-GRU 模型具體的工作流程。其中(a)展示的是訓練階段的工作流程,具體來講,主干部分為正向傳播時的工作流程,左側(cè)分支為反向傳播時的工作流程。(b)展示的是測試階段的工作流程。
圖2 MS-GRU模型工作流程圖Fig.2 Flowchart of proposed MS-GRU model
為了證明本文所提出的MS-GRU 模型的有效性和優(yōu)越性,在仿真數(shù)據(jù)和真實數(shù)據(jù)上分別進行了廣泛的實驗,并和一系列現(xiàn)有的故障檢測方法進行了對比。
本文使用了一臺PC機及七臺虛擬機搭建了一個面向電網(wǎng)調(diào)控的微服務架構(gòu)的應用系統(tǒng)。其中PC機主要負責面向電網(wǎng)調(diào)控的微服務故障檢測系統(tǒng)的部署和運行,七臺虛擬機主要負責微服務應用程序的運行。表1展示了PC機和虛擬機的具體配置信息。
表1 實驗軟硬件環(huán)境信息Table 1 Information on software and hadware used in experiments
本文采用精度(precision)、召回率(recall)和F1分數(shù)這三個量化指標來評估故障檢測模型的效果,它們的定義如下:
其中,TP(ture positive)代表真陽性,即被故障檢測模型正確分類的故障;FP(false positive)代表假陽性,即本來沒有故障卻被故障檢測模型判定為有故障;FN(false negative)代表假陰性,即本來有故障卻被故障檢測模型判定為沒有故障。除了上述出現(xiàn)的三種情況,還有一種情況為TN(true negative),代表真陰性,即被故障檢測模型正確分類的無故障情況。
精度是準確性的度量,召回率是完全性的度量,而F1分數(shù)則將精度和召回率組合到了一個度量中,可以視作二者的調(diào)和均值。
本文將王子勇等人[10]提出的基于執(zhí)行軌跡監(jiān)測的故障檢測模型(簡稱為軌跡監(jiān)測模型)、徐康明[11]提出的基于故障樹的故障檢測模型(簡稱為故障樹模型)、彭天舒[18]提出的基于特征規(guī)則的故障檢測模型(簡稱為特征規(guī)則模型)作為基準模型,與本文所提出的MS-GRU 模型進行性能對比。
受文獻[16-17,20-22]的啟發(fā),本文采用人為注入故障的方式來評估各個故障檢測方法的表現(xiàn)。注入的故障主要分為四類,分別為應用程序故障(例如設置不當、配置出錯等)、服務器故障(例如端口被占、Java Virtual Machine、線程池配置錯誤等)、數(shù)據(jù)庫故障(例如運算溢出、并發(fā)事物死鎖、違反完整性限制規(guī)則等)、操作系統(tǒng)故障(例如CPU、網(wǎng)絡、內(nèi)存、IO 等出現(xiàn)異常)。將各類故障單獨注入到本文所搭建的微服務應用系統(tǒng)中,每類故障各注入25次,然后分別使用軌跡監(jiān)測模型、故障樹模型、特征規(guī)則模型以及MS-GRU 模型進行故障的檢測。檢測結(jié)果如表2所示,可以看到相較于其他的故障檢測模型,本文提出的MS-GRU 模型在精度、召回率和F1分數(shù)這三個指標上都有著更好的表現(xiàn)。
表2 各模型檢測準確性對比Table 2 Comparison of different methods about accuracy
除了準確性之外,效率也是衡量一個故障檢測模型性能的重要指標。圖3 展示了各個方法的平均檢測時間,可以看到MS-GRU模型具有最高的檢測效率。
圖3 各模型檢測效率對比Fig.3 Comparison of different methods about efficiency
此外,為了評估本文提出的注意力機制的有效性,在三種不同的條件下進行了實驗:(1)不使用注意力機制;(2)使用傳統(tǒng)的注意力機制;(3)使用本文提出的注意力機制。實驗結(jié)果如表3所示,可以看到與傳統(tǒng)的注意力機制相比,本文提出的注意力機制能夠以更小的時間成本獲得更高的檢測準確度。
表3 注意力機制的有效性評估Table 3 Effectiveness evaluation of attention mechanism
前面的實驗已經(jīng)證明了本文所提出的MS-GRU 模型在仿真數(shù)據(jù)上的有效性,為了進一步測試MS-GRU在實際應用場景中的性能,將其部署到了某真實電網(wǎng)系統(tǒng)上。在部署之后兩個月的時間里,MS-GRU模型共檢測到了465 次故障(87%的準確率),避免了427 次故障(80%的準確率)。此外,借助于MS-GRU,開發(fā)人員對于故障發(fā)生的條件、模式、原因等都有了更為深入的理解和認識,在系統(tǒng)的設計上也做出了相應的改進,從而進一步避免了故障的發(fā)生。圖4 展示了部署MS-GRU模型后,該電網(wǎng)系統(tǒng)在兩個月內(nèi)的故障發(fā)生情況,可以看到故障發(fā)生的次數(shù)呈現(xiàn)出明顯的下降趨勢,這再次驗證了本文方法的有效性。
圖4 MS-GRU模型兩個月內(nèi)的故障發(fā)生情況Fig.4 Fault occurrence of MS-GRU model in two months
本文針對微服務應用系統(tǒng)里的故障檢測問題,引入了深度學習的方法,提出了一個基于GRU 的故障檢測模型(MS-GRU)。本文方法的核心在于它能夠從以往的應用數(shù)據(jù)中分析、學習到導致故障發(fā)生的模式信息,并將這些信息用于未來的故障診斷和預測中。為了評估MS-GRU模型的性能,在仿真系統(tǒng)和真實系統(tǒng)上進行了廣泛的實驗。實驗結(jié)果表明與傳統(tǒng)的故障檢測方法相比,MS-GRU模型有著更高的效率和準確度。在未來的工作中,希望能夠進一步精簡網(wǎng)絡模型,在不影響檢測準確度的同時進一步提升檢測效率,以實現(xiàn)實時檢測,這樣本文模型的實用性可以得到進一步的增強。