姒鑒哲,姜 瑛,李榮宸,陳威偉
1.云南省計算機技術應用重點實驗室,昆明 650500
2.昆明理工大學 信息工程與自動化學院,昆明 650500
云計算是一種在并行計算、分布式計算等技術的基礎上發(fā)展而來的計算模式[1],而服務則是面向云計算環(huán)境中承載各項資源及使用模式和能力交付的重要手段。目前,在電子商務、社交網(wǎng)絡、互聯(lián)網(wǎng)金融等領域,在線的服務已構成了人們日常工作、生活中的重要部分。隨著云計算技術的不斷發(fā)展,越來越多的服務開始走向云端[2],為產(chǎn)業(yè)帶來了更多發(fā)展的可能性和創(chuàng)造性。相較于傳統(tǒng)的計算機系統(tǒng),云計算環(huán)境具備開放性、復雜性、不可預測性等特點,其上部署服務及服務組件眾多且交互關系復雜,將增加服務發(fā)生故障的概率[3],如果故障隨著服務間的持續(xù)交互進行傳播擴散,將出現(xiàn)更多隱患。
近年來,亞馬遜、阿里云等多家云計算服務先后因為出現(xiàn)了故障,故障持續(xù)傳播后致使威脅用戶數(shù)據(jù)安全、服務大規(guī)模失效、嚴重影響服務運行質量的事件發(fā)生[4],給云計算環(huán)境下服務產(chǎn)業(yè)帶來了極大的挑戰(zhàn)。因此,針對云計算環(huán)境中運行服務,在故障發(fā)生時需要明確發(fā)生故障的服務,將其作為問題根源,及時對該故障帶來的負面影響進行分析,合理根據(jù)故障傳播的趨勢判別服務故障傳播路徑,協(xié)助相關人員高效有序地對故障進行處理,遏制故障在云計算環(huán)境中的持續(xù)傳播,從而保障服務高質量運行,避免造成更大損失。
故障傳播影響分析在近年得到了廣泛發(fā)展,在面向服務的架構中,唐倫等人[4]根據(jù)網(wǎng)絡虛擬化環(huán)境下故障的多層傳播關系,構建故障與癥狀的依賴圖模型,引入深度信念網(wǎng)絡進行提取,利用故障傳播的時間相關性,使用動態(tài)貝葉斯網(wǎng)絡對故障根源進行實時診斷。王燾等人[5]提出了一種面向異常傳播的微服務故障診斷方法,首先建立服務依賴圖;然后,基于回歸分析構建度量與API調用之間的回歸模型以檢測異常微服務,基于服務依賴圖以及異常服務集合得到故障傳播分析結果。薛利興等人[6]提出網(wǎng)絡化軟件系統(tǒng)故障傳播分析與可靠性評估,構件執(zhí)行過程、構件之間的交互過程,基于馬爾可夫鏈建立軟件故障傳播性模型,進行故障分析。LIN等人[7]通過抓取服務間網(wǎng)絡傳輸?shù)臄?shù)據(jù)信息用以獲取服務調用關系,當服務調用延遲脫離服務水平目標范圍,則檢測為異常,通過分析服務依賴關系進行傳播分析推斷引發(fā)異常的潛在原因。針對軟件資源與任務聯(lián)系的故障傳播與擴散問題,王友俊等人[8]提出一種基于超圖的Cyber空間故障傳播研究方法,利用Petri網(wǎng)建立關系模型,通過傳播能力、傳播系數(shù)、擴散系數(shù)等指標來描述故障的傳播過程,采用鄰接矩陣分析并推導出指標量化方法,給出故障在Petri網(wǎng)中產(chǎn)生的影響力函數(shù),分析故障擴散路徑。
面向復雜系統(tǒng)研究領域,何俊秀等人[9]提出一種基于體系結構的軟件故障傳播模型,在軟件體系結構建模的基礎上,考慮組件信號間故障傳播效應,通過引入組件容錯率和失效率的概念,構建組件狀態(tài)轉移矩陣對信號在軟件模塊中的故障傳播現(xiàn)象建立模型。尹進田等人[10]提出一種基于故障傳播與因果關系的故障溯源方法,通過建立體現(xiàn)時空特性的系統(tǒng)故障傳播模型,利用因果關系技術判定不同觀測點信號間的因果關系,進行故障傳播分析。Sun等人[1]提出一種基于高斯貝葉斯網(wǎng)絡的故障傳播路徑識別推理算法,針對工業(yè)系統(tǒng)背景下建立的高斯貝葉斯網(wǎng)絡中特定故障節(jié)點,根據(jù)參數(shù)權重和值的波動確定父節(jié)點,基于條件概率和二分法的分解,進行最大條件概率的估計逐層追蹤到網(wǎng)絡中的故障傳播路徑。王林等人[11]提出一種考慮父節(jié)點影響的貝葉斯網(wǎng)絡故障路徑追溯算法,通過構建貝葉斯網(wǎng)絡,計算貝葉斯網(wǎng)絡中故障子節(jié)點的最大條件分布值,然后與真實觀測值比較進行故障傳播分析,最終在工業(yè)系統(tǒng)中得以應用。
對上述相關文獻進行分析,以上故障傳播影響分析方法均取得了重大技術進步,但仍存在以下局限性:
(1)過多關注歷史數(shù)據(jù),與故障發(fā)生時的實際情況存在偏差,致使方法效果受到限制。盡管歷史數(shù)據(jù)具備重要參考意義,但過度依賴其進行判斷易偏離服務實際運行狀況,文獻[1,6,8-9,11]這些方法過多關注歷史數(shù)據(jù),而歷史數(shù)據(jù)往往只能體現(xiàn)在某一特定時間段內所蘊含的特征規(guī)律且所包含信息并不能對可能發(fā)生的狀況進行完整覆蓋致使方法的準確率受到限制,另外通過大量的歷史數(shù)據(jù)進行分析,往往需要較長時間進行預處理分析,從而使得方法的效率受到影響[6]。
(2)僅考慮單一因素衡量故障的傳播影響,造成部分關鍵因素缺失,導致方法分析存在不足。文獻[5,7,10]方法在一定程度上簡化了計算復雜度,提高了計算效率,但文獻[5]依據(jù)服務在整個依賴圖中的被調用次數(shù)作為故障傳播影響力,缺乏對實際服務運行狀況、服務間的局部相關關系的分析致使方法存在缺陷;文獻[7]僅依賴服務調用延遲時長判定服務異常推斷服務故障傳播影響,文獻[10]僅依賴服務間信號判斷組件間的因果關系,忽略了大量有效的可觀測信息。例如處在同一運行環(huán)境和不同環(huán)境下運行的服務受故障影響程度不同、路徑上服務的運行狀況存在差異性、節(jié)點自身屬性、吞吐量不同等。調用延遲時長蘊含信息有限,會造成大量故障影響要素缺失從而致使故障傳播影響分析準確率不高。
(3)無法適用動態(tài)變更的系統(tǒng)結構進行故障傳播分析。例如文獻[4,11]所需依賴有向無環(huán)圖構建貝葉斯網(wǎng)絡,文獻[6]方法的應用需針對系統(tǒng)自身固有拓撲,而云計算環(huán)境下服務運行較為復雜且無定式,服務的運行狀態(tài)、服務間的關系也在持續(xù)變更,難以保障滿足方法運行條件,因此文獻[4,6,11]方法應用在云計算環(huán)境中進行服務故障傳播分析十分受限。
針對上述故障傳播影響分析方法中存在的問題,本文提出了一種云計算環(huán)境下服務故障傳播路徑判別方法,動態(tài)建立適用云計算環(huán)境的服務交互圖;此外,不再重點關注歷史數(shù)據(jù),分析當前處于運行狀態(tài)下服務的運行數(shù)據(jù)、環(huán)境數(shù)據(jù),確定發(fā)生故障的服務,計算服務故障可能性,隨后綜合分析多種服務故障傳播因素計算服務故障傳播概率進行服務故障傳播路徑判別。
在云計算環(huán)境中,針對某些目標要求,單個服務往往難以完成,因此需要多個服務交互配合共同完成,這樣在服務與服務間就形成了錯綜復雜的關系,因為服務的運行狀態(tài)及執(zhí)行的業(yè)務邏輯持續(xù)改變,隨之致使服務間的關系也是不斷變化的,而這樣的關系,往往成為了服務故障時故障進行傳播的主要途徑。同時,服務受故障傳播影響至發(fā)生故障也是一個持續(xù)變化的過程,因此只有明確服務間關系,對服務的服務運行、環(huán)境狀況持續(xù)關注才能對故障傳播影響進行合理分析,判別服務故障傳播路徑,為相關運維人員遏制故障傳播態(tài)勢提供參考依據(jù)。
因此,本文依據(jù)云計算環(huán)境下服務的實際交互情況動態(tài)建立服務交互圖,在此基礎上優(yōu)化服務交互圖結構建立服務關系圖,明確服務間關系。后續(xù)根據(jù)服務的運行、環(huán)境狀況,在故障發(fā)生時,確定發(fā)生故障的服務,合理計算服務故障傳播概率,有效判別服務故障傳播路徑。服務故障傳播路徑判別方法的流程圖如圖1所示。
圖1 服務故障傳播路徑判別方法的流程圖Fig.1 Process of method for discriminating service failure propagation path
當服務發(fā)生故障時,故障可能通過服務與服務間的交互連接作為媒介在云計算環(huán)境中不斷傳播,進而致使更多的服務發(fā)生故障,導致批量服務失效。因此,明確云計算環(huán)境下服務的實際交互情況對于判別服務故障傳播路徑十分重要,此外云計算環(huán)境下服務眾多、交互頻繁,而圖結構能較好地表現(xiàn)這樣的復雜狀況。為了建立后續(xù)判別服務故障傳播路徑的基礎,本節(jié)依據(jù)服務云計算環(huán)境下服務交互狀況動態(tài)建立服務交互圖(service interaction diagram,SID),定義如下:
定義1服務交互圖是一個描述服務間交互狀況的有向圖,表示為一個四元組SID={V,E,S,N},V={v1,v2,…,vi},E={<v1,v2>,<v2,v1>,…,<vi,vj>},S={s1,s2,…,vm},N={n1,n2,…,nm}。服務交互圖具備反自反性,?v∈V,有<vi,vi>?E。
其中,V表示有窮非空的服務節(jié)點集合,包含當前云計算環(huán)境中正在運行的全部服務;E是邊集,即服務間交互連接集合;S為對應服務間交互關系的狀態(tài)標記集合,集合中元素s={Running||End}表示不同交互連接具有的正在執(zhí)行或完成狀態(tài);N為對應服務間交互連接的服務交互編號集合,集合中的每一元素作為指定交互連接的唯一標識。
服務交互圖可以準確描述服務運行過程中的數(shù)據(jù)流向、交互狀態(tài)及服務之間的交互關系,服務交互圖建立算法描述如算法1所示。
算法1服務交互圖建立算法
服務交互圖建立算法的時間復雜度為O(m+sn/2)。其中,m為系統(tǒng)中服務個數(shù),s為處于正在運行狀態(tài)服務個數(shù),n表示服務交互圖中包含的交互連接個數(shù)。
在云計算環(huán)境下,建立的服務交互圖不可能是一成不變的,隨著時間的推移,一些已有的交互連接狀態(tài)在不斷發(fā)生改變,一些新的交互連接也仍在產(chǎn)生。本節(jié)通過持續(xù)監(jiān)測服務運行數(shù)據(jù),獲取最新服務運行狀態(tài),進而以算法1中所述算法變更交互連接的執(zhí)行狀態(tài)標記和增補交互連接,實現(xiàn)服務交互圖的動態(tài)更新。
依照算法1構建服務交互圖示例見圖2。圖中圓形表示服務個體,線條起始為服務的使用者,箭頭指向為被使用服務,虛線代表該交互已經(jīng)結束,實線表示該交互正在進行,邊上數(shù)值為服務交互編號標識。
圖2 服務交互圖示例Fig.2 Example of service interaction diagram
云計算環(huán)境中,隨著時間的推移,運行的服務數(shù)量愈漸增加,服務與服務間的交互不斷多樣,服務的運行狀態(tài)瞬息萬變,從而使得服務交互圖結構十分復雜,在故障發(fā)生時,使用服務交互圖進行服務故障路徑判別將增加系統(tǒng)資源占用,降低服務故障路徑判別的效率,削弱方法整體的有效性。因此本節(jié)在2.1節(jié)服務交互圖的基礎上,為了保留服務交互圖中的交互信息,通過統(tǒng)計相同服務間的交互頻次,以達到優(yōu)化服務交互圖結構,提升故障發(fā)生時,服務故障傳播路徑判別效率為目的,建立了服務關系圖(service relationship diagram,SRD),服務關系圖定義如下:
定義2服務關系圖是一個在服務交互圖的基礎上描述服務間相關關系的有向圖,將服務關系圖描述為一個三元組SRD={A,R,W},A={a1,a2,…,ax},R={<a1,a2>,<a2,a1>,…,<ax,ay>},W={w1,w2,…,wx}。服務關系圖具備反自反性,?a∈A,有<ax,ax>?R。其中A表示服務交互圖中包含的所有服務;R為服務間的關系集合;W為描述服務間關系上交互頻次的集合。
服務關系圖建立算法如算法2所示。
算法2服務關系圖建立算法
服務關系圖建立算法的時間復雜度為O(en)。其中e為服務交互圖中包含的服務個數(shù),n為服務交互圖中服務的平均出度。
算法2首先對已產(chǎn)生的服務交互圖進行遍歷,依據(jù)服務交互圖中表述相同服務間的服務交互連接進行統(tǒng)計,實現(xiàn)服務關系圖的建立,依照算法2所述服務關系圖建立算法構建服務關系圖示例如圖3所示。
圖3 服務關系圖示例Fig.3 Example of service relation diagram
圖中圓形表示服務個體,線條起始為服務的使用者,箭頭指向為被使用服務,邊上數(shù)值為線條起始服務對箭頭后服務的交互頻次。
在云計算環(huán)境下服務發(fā)生故障,若要針對故障進行傳播影響分析,合理判別故障傳播路徑,首要任務是確定發(fā)生故障的服務。
通常服務故障的表現(xiàn)形式往往可以通過服務產(chǎn)生的運行數(shù)據(jù)波動映射出來,但由于云計算環(huán)境下復雜的服務運行特性,服務與服務間的關系錯綜交織,在分布式云計算的技術背景下存在著多個服務共同部署于同一物理設備或虛擬節(jié)點上,這樣無疑使得確定發(fā)生故障的服務、計算服務故障可能性不僅需要考慮服務運行數(shù)據(jù),還需要對服務運行時的環(huán)境數(shù)據(jù)來綜合分析。
在進行確定發(fā)生故障的服務時,一些常用的故障檢測方法,如文獻[12]通過改進粒子群算法優(yōu)化的支持向量機算法進行故障檢測,文獻[13]通過模糊C均值聚類與K近鄰算法進行故障檢測僅能利用獲取數(shù)據(jù)判斷當前目標對象是否發(fā)生故障,無法針對服務運行處于正常與故障的中間狀態(tài)進行描述。采用均值檢驗方法除可以確定發(fā)生故障的服務外,還可以清晰地依據(jù)服務的運行數(shù)據(jù)與服務環(huán)境數(shù)據(jù)反映其余服務當前不同運行狀況。
均值檢驗方法采用ADF檢驗方法[14]檢驗服務正常運行狀態(tài)下采集的批量服務運行數(shù)據(jù)與環(huán)境數(shù)據(jù)平穩(wěn)性,確保實驗數(shù)據(jù)樣本整體符合服務正常運行時的數(shù)據(jù)特征。隨后通過抽取少部分實驗數(shù)據(jù)樣本和當前獲取的服務運行、環(huán)境數(shù)據(jù)分別同實驗數(shù)據(jù)樣本整體執(zhí)行t檢驗[14]后求均值進行對比分析服務當前運行、環(huán)境狀態(tài)與服務正常運行、環(huán)境狀態(tài)時的偏離程度。通過主成分分析[15]從服務運行狀態(tài)、服務環(huán)境狀態(tài)對服務故障發(fā)生可能性進行影響貢獻確定,將其作為權重分配,以獲得最終服務故障可能性結果。
本節(jié)通過均值檢驗方法進行服務故障可能性計算,如算法3所示。
算法3服務故障可能性算法
其中,ADF檢驗(augmented dickey-Fuller test)為數(shù)據(jù)集平穩(wěn)性檢驗方法,原理為判斷服務監(jiān)測指標數(shù)據(jù)是否存在單位根,若指標數(shù)據(jù)平穩(wěn),就不存在單位根;反之,則存在單位根[14];t檢驗(student’s t test)為用t分布理論來推論服務故障發(fā)生的概率,比較兩個平均數(shù)的差異度,t檢驗統(tǒng)計量為:
其中,n為樣本數(shù),Xˉ為樣本平均數(shù),σx為樣本標準偏差[14];主成分分析(principal component analysis,PCA),是一種統(tǒng)計方法。通過正交變換將一組可能存在相關性的變量轉換為一組線性不相關的變量,通過這些變量不同程度地反映了針對問題的信息,在數(shù)學建模中最常用它來求各項指標對整體的影響的貢獻率[15]。
算法3的時間復雜度為O(nf(ADFR)+nf(ADFE)+2nf(tR)+2nf(tE)+f(PCA)),其中n為處于正在運行狀態(tài)下的服務個數(shù),f(ADFR)為ADF檢驗服務運行數(shù)據(jù)的時間復雜度,f(ADFE)為ADF檢驗服務環(huán)境數(shù)據(jù)的時間復雜度,f(tR)為t檢驗服務運行數(shù)據(jù)的時間復雜度,f(tE)為t檢驗服務環(huán)境數(shù)據(jù)的時間復雜度,f(PCA)為PCA算法的時間復雜度。
此外,為了衡量服務故障可能性,有效確定發(fā)生故障服務,本節(jié)通過正常與故障時的服務運行及環(huán)境數(shù)據(jù)的表現(xiàn)設定閾值估計值,當計算所得服務故障可能性大于設定閾值估計值時則將該服務確定為故障服務,否則記錄該服務的故障可能性。
通過上述方法獲取確定發(fā)生故障的服務并獲取服務關系圖中除故障服務外服務的故障可能性,在圖3的基礎上結合服務運行數(shù)據(jù)、服務環(huán)境數(shù)據(jù)計算服務故障可能性結果示例如下:
t0時刻,ServiceA故障可能性為0.31,ServiceB故障可能性為0.46,ServiceC故障可能性為0.27,ServiceD故障可能性為0.83,設定閾值估計值為0.8,確定發(fā)生故障服務為ServiceD。
當服務發(fā)生故障時,故障可能在服務關系圖上的服務間不斷傳播,隨之由于故障傳播的先后不斷進行,逐漸形成故障路徑。如果能提前辨別服務故障傳播路徑,就能及時對故障進行處理,遏制故障在系統(tǒng)中持續(xù)蔓延造成大規(guī)模服務失效。本節(jié)首先在2.2節(jié)服務關系圖的基礎上分析,結合2.3節(jié)所得的服務故障可能性,計算服務故障傳播概率,最終判別服務故障傳播路徑。
2.4.1 服務故障傳播概率計算
在服務故障發(fā)生時,需要多方位考慮服務故障傳播影響因素,通過計算服務故障傳播概率值,反映故障發(fā)生所帶來的傳播影響,為確定服務故障傳播路徑提供切實依據(jù)。
在計算服務故障傳播概率時,除服務故障可能性外,故障傳播概率還受其他關系要素影響。從服務角度來看,往往服務與故障服務間交互的局部相關關系緊密程度,同服務故障傳播概率呈正相關趨勢;其次,從服務關系圖整體出發(fā),服務在服務關系圖中的全局影響力越大,受故障傳播的概率也越大。同時,從業(yè)務流程來看,在服務關系圖中服務間眾多業(yè)務流程聯(lián)系緊密,任一服務交互過程都是整個業(yè)務流程中的重要一環(huán),因此在進行服務故障傳播概率的計算對服務間的直接與間接交互過程都不容忽視。
本小節(jié)通過服務、服務關系圖整體、業(yè)務流程多角度包含要素,結合2.3節(jié)服務故障可能性,引入了SimRank算法計算服務故障傳播概率。SimRank是一種基于圖結構的相似度計算方法,具有較好的準確性和拓展性,同時基礎的SimRank算法表達了如果兩個服務的直接交互對象中存在相似性關聯(lián),則這兩個服務也具備關聯(lián)關系的思想。因而通過該算法能夠較好地挖掘服務間的直接與間接關聯(lián)關系。但基礎的SimRank算法僅使用了服務關系圖的結構信息,沒有考慮服務關系圖中邊的信息,同時也缺乏對服務在服務關系圖中的影響差異性的考量。因此,本小節(jié)在基礎的SimRank算法[16]上進行加權,提出一種適用云計算環(huán)境下基于服務關系圖的服務相似度計算方法稱為WsimRank(weighted SimRank)并結合服務故障可能性計算服務故障傳播概率,計算方法具體如下:
首先,設置權重計算公式如式(4)所示:
其中,KIi(Vt)表示服務t的第i個鄰居服務在服務關系圖中的共計交互頻次,KIi(Vt)→Vt為服務t的第i個鄰居節(jié)點與服務進行的交互頻次,KGraph表示服務關系圖中包含所有服務的共計交互頻次。
其次,為使方法計算結果收斂,本節(jié)對權值計算結果進行標準化處理,具體計算方式如式(5)所示:
其中,w(Ii(Vt)→Vt)表示服務t的第i個鄰居服務與服務t的權值表示服務t的i個鄰居節(jié)點與服務t的權值之和。獲取了標準化權值后,對基礎SimRank算法公式進行加權,計算服務間相似度如式(6)所示,式(6)需設置迭代次數(shù),以達到不斷深入挖掘服務與服務間的間接交互信息,具體設置次數(shù)可依據(jù)服務關系圖的大小而定。
其中,C為阻尼系數(shù),Va表示服務a,Ii(Va)表示服務a的第i個鄰居服務為服務a的第i個鄰居節(jié)點與服務a的標準化權值,由此獲得服務間相似度計算結果。
依據(jù)式(6)計算結果,結合服務故障可能性進行綜合分析,給出服務故障傳播概率公式如式(7)所示:
其中k為2.3節(jié)服務故障可能性計算結果。
上述方法的時間復雜度為O(td2n2),其中t表示迭代次數(shù),d表示服務關系圖上服務的平均度數(shù),n表示服務關系圖中服務的個數(shù)。通過上述方法,完成了對服務局部相關關系、服務關系圖整體、業(yè)務流程多個角度包含要素的分析,同時綜合考量表征服務實際運行情況的服務故障可能性,獲得服務故障傳播概率。
2.4.2 服務故障傳播路徑確定
進行服務故障傳播路徑的確定,必須準確地對服務故障傳播順序與傳播范圍進行界定,才能為相關人員最大限度地降低損失提供依據(jù)。同時因為服務故障傳播具有雙向性,本節(jié)依據(jù)2.2節(jié)獲取的服務關系圖,2.3節(jié)確定發(fā)生故障的服務,2.4.1小節(jié)計算的服務故障傳播概率,以確定發(fā)生故障的服務為路徑起點,從該故障服務前驅、后繼方向同時對與發(fā)生故障的服務直接或間接交互的服務進行分析,不斷完善服務故障傳播路徑。當下一跳節(jié)點服務未存在前驅節(jié)點服務或后繼節(jié)點服務時或下一跳節(jié)點服務在當前路徑中已存在時或下一跳節(jié)點服務被故障傳播概率不顯著時,結束本條路徑確定,最終可獲得以確定發(fā)生故障的服務為起點的一條或多條服務故障傳播路徑。服務故障傳播路徑確定算法如算法4所示。
算法4服務故障傳播路徑確定算法
算法4的時間復雜度為O(2nfl),其中n為服務關系圖中包含服務個數(shù),f為確定發(fā)生故障服務的個數(shù),l為服務故障傳播路徑的平均路徑長度。
通過上述算法過程,依照圖3示例服務關系圖、2.3節(jié)實例給出t0時刻確定發(fā)生故障服務結果,通過2.4.1節(jié)服務故障傳播概率計算方法,所得服務故障傳播路徑確定結果示例如下:確定發(fā)生故障的服務為ServiceD;從后繼方向確定服務故障傳播路徑為故障服務ServiceD傳播至ServiceB傳播概率為69%,再至ServiceA傳播概率為37%;確定服務故障傳播前驅方向路徑為故障服務ServiceD傳播至ServiceB傳播概率為69%,再至ServiceC傳播概率為26%。
依據(jù)確定的服務故障傳播路徑可以協(xié)助相關管理人員針對故障發(fā)生及時做出反應,避免故障進一步傳播擴散。
本文搭建了基于OpenStack的彈性云計算平臺,并于平臺上搭建基于Hadoop2.7的并發(fā)計算框架,使用Java語言開發(fā)了8個服務,8個服務具備任意兩兩進行交互的能力,可以通過驅動程序自動生成若干服務交互序列,仿真實際環(huán)境中服務的多種行為和狀態(tài)。服務概況如表1所示。
表1 服務概況表Table 1 Overview of services
通過開發(fā)服務數(shù)據(jù)監(jiān)測的原型軟件用于采集、存儲服務的運行、環(huán)境數(shù)據(jù),采集的服務運行數(shù)據(jù)屬性及含義如表2所示。
表2 服務運行數(shù)據(jù)屬性表Table 2 Monitored data items for service operation
采集的服務環(huán)境數(shù)據(jù)屬性及含義如表3所示。
表3 服務環(huán)境數(shù)據(jù)屬性表Table 3 Monitored data items for service operating environment
本次實驗以資源消耗的故障注入手段,獲取云計算環(huán)境下部署的8個服務的運行數(shù)據(jù)89 143條,對應環(huán)境數(shù)據(jù)64 860條,其中包含故障注入時獲取運行數(shù)據(jù)76 748條,對應環(huán)境數(shù)據(jù)58 679條。為了驗證本文方法的有效性,設置以下實驗:(1)文獻[12]所述方法僅使用服務運行數(shù)據(jù)進行確定發(fā)生故障的服務的實驗;(2)文獻[13]所述方法僅使用服務運行數(shù)據(jù)進行確定發(fā)生故障的服務的實驗;(3)以本文所述方法僅采用服務運行數(shù)據(jù)進行確定發(fā)生故障的服務的實驗;(4)以本文所述方法使用服務運行數(shù)據(jù)、服務環(huán)境數(shù)據(jù)進行實驗,同(1)(2)(3)獲得的實驗結果進行比對,確定發(fā)生故障的服務對比實驗輸入數(shù)據(jù)如表4所示。
表4 確定發(fā)生故障的服務對比實驗輸入數(shù)據(jù)Table 4 Comparison for input data scale
本次實驗以確定發(fā)生故障服務準確率、運行時長驗證本文方法的有效性,并給出準確率計算公式如式(8)所示:
其中,TP為正確識別的故障樣本數(shù),TN為正確識別的非故障樣本數(shù),SN為方法所進行識別的總樣本數(shù)。
運行時長,即自輸入數(shù)據(jù)至方法完成計算并輸出結果所損耗時間總和,本次實驗結果如表5所示。
表5 確定發(fā)生故障的服務對比實驗結果Table 5 Comparison for service fault detection
通過表5可以看出,僅使用服務運行數(shù)據(jù)進行實驗時,同文獻[12-13]對比,本文方法準確率表現(xiàn)上優(yōu)于文獻[12-13]所述方法,運行時長略低于文獻[12]所述方法,但較文獻[13]方法具備一定優(yōu)勢。分析實驗結果,文獻[12]、文獻[13]方法依據(jù)數(shù)據(jù)進行分析,都需要通過數(shù)據(jù)分布狀況,確定發(fā)生故障的服務,在實驗結果上均取得了一定效果。但文獻[12]采用的粒子群優(yōu)化算法與文獻[13]的模糊C均值聚類與K近鄰算法進行故障檢測時,均會隨著時間的推移,故障類型的不斷擴充,數(shù)據(jù)特征分布雜亂而致使結果準確率受到影響。此外,文獻[12-13]方法均只能就當前服務運行數(shù)據(jù)對服務進行是否發(fā)生故障的二元判斷,未能對運行時服務運行時介于正常與故障之間的中間狀態(tài)進行準確評估。本文方法以服務運行正常數(shù)據(jù)為基準,通過后續(xù)獲取的服務數(shù)據(jù)偏離量同基準值對比,不僅不會受到因為故障類型的變化而影響檢測效果,還能依據(jù)數(shù)據(jù)偏移量計算的服務故障可能性可以有效反映環(huán)境中的運行時服務狀況,但本文除確定發(fā)生故障的服務結果外,增加了故障可能性計算,在效率上受到一定影響。
后續(xù)利用本文方法,使用服務運行數(shù)據(jù)、服務環(huán)境數(shù)據(jù)進行確定發(fā)生故障的服務實驗時,較僅添加服務運行數(shù)據(jù)的本文方法與文獻[12-13]方法,在準確率表現(xiàn)上獲得了明顯提升。添加服務環(huán)境數(shù)據(jù)進行分析,雖然在一定程度上增加了處理的數(shù)據(jù)量和時間開銷,但使得同一環(huán)境下服務運行狀況及環(huán)境帶來的影響在數(shù)據(jù)上得到了更準確的捕獲與體現(xiàn)。
綜上所述,本文方法能有效確定發(fā)生故障的服務,并根據(jù)未發(fā)生的故障服務的實際運行情況,計算服務故障可能性,為后續(xù)判別服務故障傳播路徑提供了必要條件。
本次實驗通過驅動程序仿真實際應用場景動態(tài)生成多個服務交互序列。單個服務交互序列運行時長預估為1 000 s,首先設置由4個服務同時參與,依照動態(tài)生成的服務交互序列連續(xù)運行30 h,選擇1個服務進行故障注入,觀察服務故障傳播情況;再次設置由8個服務同時參與,依照動態(tài)生成的服務交互序列連續(xù)運行30 h,選擇3個服務進行故障注入,觀察服務故障傳播情況。針對服務運行數(shù)據(jù)與環(huán)境數(shù)據(jù),以5 s為周期進行監(jiān)測,后續(xù)刷新確定發(fā)生故障的服務,更新服務故障傳播路徑。
本次實驗設置兩組對照實驗,兩組對照實驗均采用首次確定所得服務故障傳播路徑時開始進行校驗,設置滑動時間窗口為500 s,即確定所得服務故障傳播路徑的時間為起點,向后延長500 s的范圍內,依據(jù)方法分析的服務故障傳播影響結果同實際故障服務發(fā)生情況進行比對。此外,為保證實驗結果不受服務交互序列動態(tài)變更而致使方法判別條件前后不一致的狀況影響,當滑動時間窗口內服務交互序列不一致時產(chǎn)生的判斷結果不納入實驗最終結果。
第一組對照實驗設置了方法進行故障傳播影響分析結果準確率與故障傳播影響分析過程中方法運行時長兩個指標,對本文方法實驗結果同文獻[5]中提出的基于特征向量中心度的PageRank故障傳播影響分析方法實驗結果進行評價。故障傳播分析結果準確率計算公式如式(9)所示:
其中,ServiceTP表示單次結果分析正確,即通過單次運行方法所得受故障傳播影響的服務集合在時間窗口內均發(fā)生故障,與服務實際運行狀況吻合,∑ServiceTP表示結果分析正確總數(shù),∑ResultSN表示進行故障傳播影響分析結果總數(shù)。
運行時長則為方法完成對所有的采集信息進行服務故障傳播影響分析的總計消耗時長。
通過上述指標分別對實驗方法進行評價,結果如表6所示。
表6 服務故障傳播路徑判別對比實驗結果Table 6 Comparison for service failure propagation path discrimination
從表6可以看出,本文方法在準確率、運行時長上結果更優(yōu)于文獻[5]方法。原因分析為文獻[5]采用基于特征向量中心性方法改進的PageRank算法進行故障傳播分析時認為某個服務被調用的次數(shù)越多用則該微服務的重要程度越高,發(fā)生故障時對整個故障傳播圖的影響也越大[5],缺乏對服務間的局部相關關系的緊密程度與服務間間接交互過程的分析且在進行故障傳播分析時并未考量服務運行的實際狀態(tài),致使方法準確率受限。
在運行時長上,文獻[5]方法依據(jù)服務依賴圖,需對圖中的每一個服務結合其被調用連接進行故障傳播分析,不斷計算用于建立服務故障傳播子圖。本文方法通過提出的WsimRank算法,采用優(yōu)化后的服務關系圖且僅針對除故障服務外的其他服務進行傳播概率計算,在故障傳播分析后僅更新服務故障傳播路徑,因此本文方法處理運行時長更短,效率更高。
第二組對照實驗設置實際服務運行中的路徑準確率、運行時長、路徑數(shù)量三個指標,對本文方法實驗結果同文獻[8]所提出的故障傳播與擴散路徑方法的實驗結果進行評價,路徑準確率計算公式如式(10)所示:
其中,PathTP表示單條服務故障傳播路徑分析正確,即故障按照傳播路徑規(guī)劃的先后順序依次發(fā)生,與服務實際運行狀況吻合?!芇athTP表示服務故障傳播路徑分析正確總數(shù),∑PathSN表示進行分析服務故障傳播路徑總數(shù)。
運行時長為依照服務故障傳播路徑的不斷更新,計算服務故障傳播路徑數(shù)次變更所耗時間總和;路徑數(shù)量為通過實驗時間內,定位的故障傳播路徑生成總量。
實驗結果如表7所示。
表7 服務故障傳播路徑判別對比實驗結果Table 7 Comparison for service failure propagation path discrimination
從表7可以看出,不論是4個服務或8個服務交互下進行實驗,兩種方法在故障傳播路徑分析上都取得了一定效果,但本文方法從路徑準確率、運行時長及路徑數(shù)量上優(yōu)于文獻[8]所述方法。原因分析為文獻[8]并未區(qū)分路徑方向,服務與服務間存在連接,即可在路徑上連通,這樣導致產(chǎn)出服務故障傳播路徑數(shù)量上更繁多,同時路徑上節(jié)點數(shù)量也更多且其間包含大量冗余節(jié)點,致使文獻[8]判別方法將會存在更多誤判。本文方法加入了對服務當前運行、環(huán)境狀況的分析,使得判別路徑更加貼近服務運行的真實情況,同時,因為對路徑上服務選取加以前驅、后繼方向限制,符合服務實際交互情況,使得本文所得路徑數(shù)量低于文獻[8]方法,準確率也更高。在運行時長方面,本文方法通過結構更優(yōu)的服務關系圖結合對服務故障傳播概率表現(xiàn)判斷,依次對路徑節(jié)點進行擴充而文獻[8]方法通過多次矩陣運算后不斷進行路徑擴充且未對路徑擴充條件進行設定致使路徑到達結構邊界才會停止擴充,在路徑計算方式更加復雜且耗時。
綜上所述,本文方法能有效判別服務故障傳播路徑,為服務故障傳播影響分析問題提供了可行方案,可對保障云計算環(huán)境下服務的高質量運行提供支持。
針對云環(huán)境下服務故障傳播影響分析,現(xiàn)有部分研究僅考慮單一因素衡量故障的傳播影響、不適用動態(tài)系統(tǒng)結構、過多關注歷史數(shù)據(jù)等,本文提出了一種云計算環(huán)境下服務故障傳播路徑判別方法,首先根據(jù)服務實際運行情況動態(tài)建立服務交互圖,其次為了提高處理效率,在服務交互圖的基礎上進一步處理,建立服務關系圖。在建立服務關系圖后,引入均值檢驗方法,計算服務故障可能性,確定發(fā)生故障的服務。最后依據(jù)服務關系圖,結合服務故障可能性、WsimRank方法,計算服務故障傳播概率,通過以故障服務為起點,從前驅、后繼兩個方向分別判別服務故障傳播路徑。
實驗表明,通過本文方法進行云計算環(huán)境下服務故障傳播路徑判別是有效的,依據(jù)本文方法可以協(xié)助相關人員準確地就發(fā)生故障服務與可能受故障傳播影響的服務及時進行處理,避免故障持續(xù)擴散,保障云計算環(huán)境下服務的高質量運行。但是,本文方法因增加服務環(huán)境數(shù)據(jù)的分析,在一定程度上會降低方法整體的處理效率且結合云計算環(huán)境特性,本文方法未能通過采取措施干預故障發(fā)生或針對故障發(fā)生時對故障進行處理,因此下一步將重點針對服務故障傳播路徑的判別效率提升、通過方法驅動干預故障發(fā)生或對發(fā)生的故障進行處理的目標繼續(xù)研究。