楊 博,莊 毅
(南京航空航天大學(xué)計算機科學(xué)與技術(shù)學(xué)院,江蘇 南京 211106)
計算機和通信系統(tǒng)已經(jīng)變成當(dāng)今社會的關(guān)鍵組成部分,并對當(dāng)前的經(jīng)濟、社會、政治和文化等方面產(chǎn)生了深刻的影響。大多數(shù)當(dāng)前的軟件系統(tǒng)都可以被視為集群系統(tǒng),集群系統(tǒng)是由大量獨立的計算機組成的并行或分布式系統(tǒng)[1],多用于高性能計算和高可用應(yīng)用服務(wù)。由于計算機技術(shù)的發(fā)展,集群系統(tǒng)已經(jīng)廣泛應(yīng)用于大型互聯(lián)網(wǎng)企業(yè),例如:Google 搜索引擎[2]、Facebook[3]及高性能計算集群等。集群系統(tǒng)中節(jié)點數(shù)量不斷增加,網(wǎng)絡(luò)架構(gòu)日益復(fù)雜,使得集群系統(tǒng)功能逐漸復(fù)雜,但同時也對集群系統(tǒng)的可用性提出了更高的要求[4]。集群系統(tǒng)中節(jié)點或網(wǎng)絡(luò)出現(xiàn)故障和異常的情況越來越頻繁,這些故障發(fā)生后可能會進一步傳播最終導(dǎo)致系統(tǒng)級的服務(wù)失效。據(jù)相關(guān)數(shù)據(jù)統(tǒng)計,Google 搜索引擎每季度至少宕機一次;亞馬遜公司出現(xiàn)過大規(guī)模的宕機事件,導(dǎo)致大量相關(guān)的應(yīng)用服務(wù)中斷;Google 集群分析報告指出其每36 個小時就可能會有一個節(jié)點發(fā)生故障,每年的節(jié)點故障大約為2%,頻繁的故障嚴重影響用戶的正常使用[5]。
集群系統(tǒng)中發(fā)生于某節(jié)點的故障可能會由于任務(wù)的協(xié)作和節(jié)點之間的通信導(dǎo)致其他節(jié)點相繼發(fā)生故障,即產(chǎn)生更大范圍內(nèi)的系統(tǒng)故障。由于控制集群系統(tǒng)的復(fù)雜性和動態(tài)性,且監(jiān)控系統(tǒng)需要從節(jié)點、程序、網(wǎng)絡(luò)和性能等方面搜集大量資源數(shù)據(jù),集群系統(tǒng)分析大量的數(shù)據(jù)將會導(dǎo)致故障檢測效率和準確度低。因此,必須結(jié)合真實集群系統(tǒng)的運行特性,獲取更多不同類型故障的特征,設(shè)計出能夠準確檢測集群故障類型的方法。
現(xiàn)有研究工作在集群系統(tǒng)的故障檢測方面已經(jīng)取得了較好的效果,但是檢測效率和檢測準確度方面還需進一步提高。因此,本文提出一種基于AOAMSVM 的控制集群故障檢測方法,不僅可提高故障檢測準確率,而且可大大縮短故障檢測時間,進而提高控制集群的可用性。具體的工作如下:
1)在集群系統(tǒng)中收集大量系統(tǒng)監(jiān)控數(shù)據(jù),運用局部線性嵌入算法提取故障特征,在保持原始數(shù)據(jù)性質(zhì)不變的情況下,對數(shù)據(jù)進行降維。
2)由于集群系統(tǒng)易發(fā)生的故障類型眾多,使得標準的單類支持向量機的檢測效率和檢測準確度較低。為此,本文提出一種多類支持向量機的故障檢測方法,以提升集群系統(tǒng)的故障檢測能力并降低時間開銷。
3)使用改進的自適應(yīng)算術(shù)優(yōu)化算法求出故障檢測模型參數(shù)最優(yōu)解,以提高故障檢測模型的準確度。
4)搭建高可用控制集群系統(tǒng),模擬多種故障類型進行檢測,對比實驗結(jié)果表明,本文提出的故障檢測方法具有檢測準確度高、檢測效率快并可有效識別故障類型的優(yōu)點。
集群系統(tǒng)故障檢測大致可以分為節(jié)點故障檢測、程序故障檢測[6]、網(wǎng)絡(luò)故障檢測和性能異常檢測[7]。節(jié)點故障檢測通常分為基于規(guī)則檢測[8]和異常檢測2類。Guan 等[9]提出了一種使用貝葉斯模型集成的無監(jiān)督故障檢測方法,同時提出了一種有監(jiān)督的決策樹分類器,用于預(yù)測系統(tǒng)中發(fā)生的故障;Arefin 等[10]提出了一種檢測數(shù)據(jù)中心運行問題的整體方法,該方法能夠檢測到許多操作問題;王開放[11]提出了一種基于長短期記憶網(wǎng)絡(luò)和支持向量機相結(jié)合的故障預(yù)測模型,通過訓(xùn)練得到SVM 故障判斷模型對預(yù)測數(shù)據(jù)進行故障分類;Adamu 等[12]使用從計算機故障數(shù)據(jù)存儲庫收集的實時數(shù)據(jù)信息,通過機器學(xué)習(xí)算法預(yù)測實時云環(huán)境中的節(jié)點故障以提高系統(tǒng)可用性。程序故障檢測指在程序跟蹤或執(zhí)行日志中發(fā)現(xiàn)非法控制流和故障,Shu等[13]提出了一種使用聚類和單類支持向量機檢測系統(tǒng)調(diào)用序列中共現(xiàn)和頻率異常的方法;Shu等[14]提出了一個程序故障檢測框架,該框架使用上下文敏感模型對程序故障進行檢測;另一個例子是DeepLog[15],這是一個框架,它使用一系列長短期記憶網(wǎng)絡(luò)來發(fā)現(xiàn)長序列日志條目中的異常。網(wǎng)絡(luò)故障檢測主要是通過被動式和主動式2 種方法進行網(wǎng)絡(luò)故障檢測,Lu等[16]提出了自適應(yīng)探測算法,通過少量的哨兵來監(jiān)測所有網(wǎng)路組件中的狀態(tài);張開延等[17]提出了一種網(wǎng)絡(luò)故障分類算法,使得分類更加精確、高效;董海強[18]研究了一種基于貝葉斯網(wǎng)絡(luò)的網(wǎng)絡(luò)故障檢測算法,該算法可以更好地對抗噪聲;周暢[19]提出了一種用于網(wǎng)絡(luò)故障檢測的改進的高效蟻群算法。性能異常檢測包括尋找以時間數(shù)據(jù)表示的系統(tǒng)性能指標中的異常偏差,Yu 等[20]提出了一種針對大規(guī)?;A(chǔ)設(shè)施的異常檢測框架,該框架能夠檢測到以前未發(fā)現(xiàn)的異常;王濤等[21]提出了一種基于自適應(yīng)監(jiān)測的云計算系統(tǒng)故障檢測方法,該方法建立可靠性模型以預(yù)測系統(tǒng)可能出現(xiàn)故障的時間;Guan 等[22]提出了一種識別云基礎(chǔ)設(shè)施異常的方法,該方法采用主成分分析來選擇與故障相關(guān)性更大的系統(tǒng)指標;CloudPD[23]是為云基礎(chǔ)設(shè)施設(shè)計的異常檢測和修復(fù)框架,它能夠檢測以前未見過的異常,并能夠適應(yīng)正常行為的變化。
綜上所述,盡管近年來集群系統(tǒng)的故障檢測取得了重大進展,但現(xiàn)有的大規(guī)模集群系統(tǒng)故障檢測方法依然存在以下3個問題:
1)現(xiàn)有的故障檢測方法大都僅針對集群系統(tǒng)單一故障類型進行檢測,無法同時對多類故障進行檢測,這導(dǎo)致集群系統(tǒng)無法有效識別故障類型。
2)在集群系統(tǒng)中,部分故障只有在經(jīng)過一段時間才能被檢測到,而不是在瞬時,現(xiàn)有方法無法快速檢測到更復(fù)雜的故障。
3)在實際的集群系統(tǒng)中,通常信息數(shù)據(jù)量巨大,導(dǎo)致現(xiàn)有故障檢測方法可能會造成較長的檢測時間和較高的檢測錯誤率。
基于AOA-MSVM 的控制集群故障檢測方法分為2 個部分,分別為模型訓(xùn)練階段與檢測階段。在模型訓(xùn)練階段中,將集群系統(tǒng)收集的各類信息組成信息數(shù)據(jù)集,對信息進行分析,尋找易導(dǎo)致集群故障的關(guān)鍵信息,對數(shù)據(jù)進行預(yù)處理,運用一種數(shù)據(jù)降維方法,使數(shù)據(jù)保持局部線性特征不變;然后,使用一對多支持向量機構(gòu)建故障檢測模型并使用改進的自適應(yīng)算術(shù)優(yōu)化算法對模型參數(shù)求最優(yōu)解得到多類故障檢測分類器。在檢測階段,收集系統(tǒng)實時動態(tài)數(shù)據(jù),對數(shù)據(jù)中的關(guān)鍵信息進行提??;然后,通過多類分類器進行故障檢測,給出故障檢測結(jié)果和故障類型。本文所提出的集群故障檢測方法流程如圖1所示。
圖1 基于AOA-MSVM的故障檢測方法流程
在高可用控制集群系統(tǒng)中,需要實時從集群收集大量的節(jié)點信息、網(wǎng)絡(luò)信息和系統(tǒng)資源信息等,以持續(xù)不斷監(jiān)測控制集群中心節(jié)點和計算節(jié)點的運行狀態(tài)。若故障檢測模型需要分析所有的監(jiān)測信息,則會造成巨大的時間消耗。因此,為了同時滿足故障檢測準確性和時間開銷小的需求,需要從大量信息中收集關(guān)鍵信息,并提取故障特征。
LLE(Locally Linear Embedding)算法是一種數(shù)據(jù)降維方法,此方法將高維數(shù)據(jù)映射到低維空間,并使數(shù)據(jù)保持局部線性特征不變[24]。給定一個樣本集X={X1,X2,…,XN},X的低維特征映射結(jié)果為Y,LLE算法的實現(xiàn)需要3個步驟:
步驟1鄰域選擇。對于樣本集X中的每個樣本點Xi,采用歐氏距離確定每個樣本點的k個近鄰點。
步驟2計算重建權(quán)重矩陣W,并通過最小化重建損失函數(shù)E(W)得到該點,如式(1)所示:
其中,為Xi的k個近鄰點,是Xi與之間的權(quán)重值,且滿足條件;如果不是Xi的近鄰,則其對應(yīng)的=0。
步驟3計算降維后的矩陣Y。通過步驟2 求出的權(quán)重矩陣W使損失函數(shù)E(W)最小,損失函數(shù)與約束條件如式(2)所示[25]:
其中,I是N×N的單位矩陣??蛇M一步求解式(2)得到式(3):
其中,M=(I-W)T(I-W)是N×N的對稱矩陣。
要使得損失函數(shù)最小,則取Y為M的m個最小非零特征值所對應(yīng)的特征向量。在處理過程中,將M的特征值從小到大排序,通常取2~m+1 間m個特征值對應(yīng)特征向量的輸出結(jié)果。
對于多分類問題,可以利用二分類SVM 構(gòu)建多類分類器。其中,“一對多”支持向量機[26]是在一類樣本與剩余樣本之間構(gòu)造決策平面,從而達到多類識別的目的。該方法不必在兩兩之間都進行分類,大大縮短了分類時間。
本文用Fi(x)表示第i類集群故障檢測分類器的決策函數(shù)。 若故障類型被劃分為M類,則Fi∈{1,2,…,M}。Fi(x)計算方法如式(4)所示:
其中,ωi和ρi為超平面參數(shù)。對于每一個類,將其作為+1 類,而其余M-1 個類的所有樣本作為-1 類。構(gòu)造一個二分類SVM 將第i類與其他M-1類分開,即求解如式(5)所示的二次規(guī)劃問題:
其中,t表示樣本的索引,i∈{1,2,…,M}表示共需要訓(xùn)練M個二分類SVM,ηi為第i個分類器的故障檢測時間為松弛變量,v∈(0,1]是一個正則化參數(shù)。
對于新樣本x?,M個決策函數(shù)一共有M個輸出,選擇決策函數(shù)中最大的類i作為對x?的檢測,即對x?進行分類的決策函數(shù)如式(6)所示:
核函數(shù)的選擇對構(gòu)造一個具有良好性能的模型來說至關(guān)重要。徑向基核函數(shù)(Radial Basis Function,RBF)的優(yōu)點是參數(shù)少并且具有良好的泛化能力,且由于其與高斯分布的相似性而成為使用最廣泛的核函數(shù)之一。因此,本文使用RBF 函數(shù)作為核函數(shù),用K(x,x?)表示,如式(7)所示:
其中,σ>0為高斯核函數(shù)的帶寬。
算術(shù)優(yōu)化算法(Arithmetic Optimization Algorithm,AOA)是2021年提出的元啟發(fā)式優(yōu)化算法,它的靈感來自算術(shù)運算符在解決算術(shù)問題中的應(yīng)用[27],使用簡單的算術(shù)運算符,如加減乘除作為數(shù)學(xué)優(yōu)化,從一組候選解中搜索出符合標準的最優(yōu)解。AOA 提高了位置更新的全局分散性和在局部區(qū)域的精確性。
步驟1設(shè)置目標參數(shù)和的取值范圍;隨機生成種群,其初始位置代表參數(shù)(,)的初始值;求解初始個體的適應(yīng)度值,計算方法如式(8)所示:
其中,numi表示被錯誤檢測為第i類故障的個數(shù),C為故障總數(shù),sum為訓(xùn)練樣本總數(shù)。
步驟2初始化種群后,算法內(nèi)設(shè)置了一個加速函數(shù)(Math Optimizer Accelerated,MOA)來控制算法的搜索策略(進行探索階段或開發(fā)階段),根據(jù)隨機數(shù)r1∈(0,1)進行判斷,當(dāng)r1> MOA 時,進入探索階段;當(dāng)r1≤MOA 時,進入開發(fā)階段。加速函數(shù)的計算方法如式(9)所示:
其中,C_t和M_t分別為當(dāng)前迭代次數(shù)和最大迭代次數(shù),Max和Min分別為加速函數(shù)的最大值和最小值。
與MOA 類似,算法內(nèi)設(shè)置了一個概率函數(shù)MOP(Math Optimizer Probability),計算方法如式(10)所示:
其中,α為一個敏感參數(shù),代表了迭代過程中的開發(fā)精度,用于控制AOA 在迭代過程中的變化幅度。Abualigah 等[27]的研究表明,不同的α值會影響MOP,從而影響算法的性能。通過實驗對比可知,當(dāng)α<1時,MOP 是一個凸函數(shù),有利于算法前期的充分探索,而不是快速收斂到局部區(qū)域。α值較小可能導(dǎo)致算法陷入局部最優(yōu),α值較大可能導(dǎo)致搜索不足,甚至找不到最優(yōu)解,影響算法的效率。因此,本文引入自適應(yīng)變化的α值,有助于提高算法在探索階段和開發(fā)階段搜索能力之間的平衡。自適應(yīng)α值的計算方式如式(11)和式(12)所示:
其中,α(C_t)為第C_t次迭代的α值,αmin和αavg分別表示α的最小值和平均值,f、fmin、favg、fmax分別表示當(dāng)前迭代時的適應(yīng)度值、最小適應(yīng)度值、平均適應(yīng)度值和最大適應(yīng)度值,ε表示一個較小的正數(shù)。
步驟3探索階段。根據(jù)隨機數(shù)r2進行判斷,當(dāng)r2<0.5 時,執(zhí)行除法探索策略,當(dāng)r2≥0.5 時,執(zhí)行乘法探索策略,位置更新方程如式(13)所示:
其中:best(Pj)表示當(dāng)前迭代的最優(yōu)解的第j個位置;ε表示一個較小的正數(shù),其作用是防止分母為0;UBj和LBj分別表示第j個位置的上界值和下界值;μ是調(diào)整搜索過程的控制參數(shù),取值固定為0.5。
步驟4開發(fā)階段。根據(jù)隨機數(shù)r3進行判斷,當(dāng)r3<0.5 時,執(zhí)行減法開發(fā)策略,當(dāng)r3≥0.5 時,執(zhí)行加法開發(fā)策略,位置更新方程如式(14)所示:
步驟5判斷適應(yīng)度函數(shù)值是否在誤差允許范圍內(nèi)或已達到迭代上限。若滿足條件,則停止迭代,輸出故障檢測模型的最佳參數(shù)組合,記為ν和σ;若不滿足,則跳轉(zhuǎn)到步驟2繼續(xù)執(zhí)行。
本文搭建的高可用控制集群系統(tǒng)共有21 個節(jié)點,包括1個中心節(jié)點和20個計算節(jié)點。實驗環(huán)境配置如下:CPU 為Intel Core i7-10700;內(nèi)存為16 GB以上;硬盤為512 GB 以上;使用的操作系統(tǒng)為Ubuntu 16.04。
根據(jù)3.1 節(jié)的實驗環(huán)境配置,本文將提出的基于AOA-MSVM 的控制集群故障檢測方法分別與MSVM[28]、PSO-MSVM[29]和GWO-MSVM[30]的故障檢測方法進行對比實驗。
實驗從搭建的集群系統(tǒng)中采集2000 條包含節(jié)點信息、網(wǎng)絡(luò)信息和系統(tǒng)性能等正常數(shù)據(jù)作為訓(xùn)練數(shù)據(jù)集。本文分別模擬節(jié)點故障、程序故障(如內(nèi)存泄露)、網(wǎng)絡(luò)故障和性能異常來獲取故障數(shù)據(jù)。實驗將收集的數(shù)據(jù)和阿里巴巴集群跟蹤數(shù)據(jù)作為訓(xùn)練集。
本文使用準確率、精確率、召回率、F1Micro和檢測時間來評估4 種方法的故障檢測結(jié)果,實驗結(jié)果如圖2~圖6所示。
圖2 準確率對比
圖2 給出了4 種方法的準確率對比。由圖2 可知,4 種檢測方法的檢測準確率都相對較高,且本文提出的方法明顯優(yōu)于其他方法,故障檢測準確率可達94%以上。
圖3 與圖4分別給出了精確率和召回率對比。由圖3可知,4種方法精確率較為接近,本文所提故障檢測方法精確率稍優(yōu)于其它方法。由圖4 可知,本文所提故障檢測方法的召回率達到97.2%,明顯優(yōu)于其它方法。
圖3 精確率對比
圖4 召回率對比
圖5 給出了4種方法檢測結(jié)果的F1Micro,其是綜合考慮了模型精確率和召回率的計算結(jié)果。由圖5 可知,本文提出的故障檢測方法均優(yōu)于同類方法,表明了本文所提方法的優(yōu)越性。
圖5 F1Micro對比
圖6 對4種方法的故障檢測時間進行了對比。由圖6 可知,本文所提故障檢測方法檢測時間約為2.47 s,均明顯少于其它3 種故障檢測方法,縮短了故障檢測時間。
圖6 檢測時間對比
本文針對控制集群系統(tǒng)故障檢測問題,提出了一種基于AOA-MSVM 的控制集群故障檢測方法。使用LLE 算法對數(shù)據(jù)進行降維處理,并保持了原始數(shù)據(jù)性質(zhì)不變,采用一對多支持向量機來檢測集群系統(tǒng)故障,并使用改進的自適應(yīng)算術(shù)優(yōu)化算法對模型參數(shù)求最優(yōu)解,提升故障檢測能力。與同類方法的對比實驗結(jié)果表明,本文提出的故障檢測方法具有更高的檢測準確率和效率,并可有效識別故障類型。