王開放,姜 瑛,陳威偉
(1.云南省計算機(jī)技術(shù)應(yīng)用重點實驗室,云南 昆明 650500;2.昆明理工大學(xué)信息工程與自動化學(xué)院,云南 昆明 650500)
隨著計算機(jī)技術(shù)的發(fā)展,基于虛擬化技術(shù)的大型分布式云計算系統(tǒng)開始廣泛地部署和應(yīng)用。云計算作為當(dāng)今互聯(lián)網(wǎng)的主要計算方式,將軟硬件資源以共享的方式提供給相應(yīng)的計算機(jī),并以這種方式為網(wǎng)絡(luò)用戶提供服務(wù),使得用戶能夠按需獲得計算資源、存儲資源等[1]。作為實現(xiàn)云計算架構(gòu)的關(guān)鍵,虛擬化技術(shù)能夠?qū)⒂邢薜奈锢碣Y源抽象虛擬出多個具有相似特性的虛擬機(jī)實體,以便提供給更多的服務(wù)對象使用[2],從而使云計算環(huán)境中不同的物理資源都以虛擬機(jī)的形式靈活進(jìn)行封裝和分配,為用戶按需提供租用服務(wù)。虛擬機(jī)作為云計算平臺的服務(wù)實體,其內(nèi)部通常會部署很多密集型和關(guān)鍵型的應(yīng)用,它們會產(chǎn)生頻繁的訪存操作,這可能導(dǎo)致虛擬機(jī)內(nèi)存崩潰,一旦內(nèi)存崩潰,與內(nèi)存相關(guān)的所有訪存操作都將終止,會極大地影響云計算環(huán)境下虛擬機(jī)的運(yùn)行[3]。特別在大規(guī)模的云計算環(huán)境中,提供服務(wù)的虛擬機(jī)有成千上萬臺,部分虛擬機(jī)會因為內(nèi)存、CPU、網(wǎng)絡(luò)等各種原因發(fā)生故障,導(dǎo)致虛擬機(jī)性能下降、宕機(jī)等,這將對云計算環(huán)境下虛擬機(jī)的可靠性、服務(wù)質(zhì)量及用戶體驗造成嚴(yán)重影響。因此,有效預(yù)測出虛擬機(jī)的故障是亟待解決的問題。
國內(nèi)外已經(jīng)開展了對云計算環(huán)境下的虛擬機(jī)故障預(yù)測的廣泛研究。目前云計算環(huán)境下虛擬機(jī)故障預(yù)測的研究工作主要是:在虛擬機(jī)正常工作的條件下,采集虛擬機(jī)運(yùn)行狀態(tài)數(shù)據(jù);然后通過對采集的數(shù)據(jù)進(jìn)行分析,得到故障發(fā)生的規(guī)律,用于判斷虛擬機(jī)在未來一段時間內(nèi)是否發(fā)生故障。在虛擬機(jī)發(fā)生故障之前采取相關(guān)的預(yù)防措施,可以避免故障的發(fā)生或者降低故障發(fā)生帶來的損失,為云計算環(huán)境下虛擬機(jī)的可用性和可靠性提供保證[4]。
通過預(yù)測云計算環(huán)境中物理節(jié)點的故障,可以將虛擬機(jī)分配和遷移到健康節(jié)點,從而提高服務(wù)可用性。Lin 等人提出了一種MING 模型,該模型根據(jù)歷史數(shù)據(jù)預(yù)測云服務(wù)系統(tǒng)中節(jié)點的故障傾向性,返回排序為Topr的節(jié)點為故障節(jié)點[5]。Guan 等人提出利用貝葉斯方法和決策樹方法來預(yù)測云計算系統(tǒng)中的故障。該方法需要管理員驗證檢測到的異常行為后,將這些數(shù)據(jù)添加標(biāo)簽即獲取到一些具有標(biāo)簽的數(shù)據(jù)集;然后利用監(jiān)督學(xué)習(xí)方法將數(shù)據(jù)集訓(xùn)練出決策樹分類器來預(yù)測云計算中的故障[6]。
魯明等人提出了一種虛擬機(jī)性能異常的預(yù)測方法,通過采用隱馬爾可夫模型刻畫當(dāng)前系統(tǒng)的正確狀態(tài),并根據(jù)業(yè)務(wù)系統(tǒng)預(yù)測結(jié)果是否偏移正常狀態(tài)來判定業(yè)務(wù)系統(tǒng)是否出現(xiàn)性能異常[7]。丁三軍等人利用虛擬機(jī)的運(yùn)行日志數(shù)據(jù)進(jìn)行故障的模糊關(guān)聯(lián)規(guī)則挖掘,提出一種基于規(guī)則的日志數(shù)據(jù)加權(quán)處理方法,并獲得故障預(yù)測的關(guān)聯(lián)規(guī)則,得出故障預(yù)測結(jié)果[8]。Li 等人提出了一種AdaBoost 和隱馬爾可夫模型的虛擬機(jī)故障預(yù)測算法,以預(yù)測虛擬機(jī)未來的故障狀態(tài)[9]。Saxena 等人提出了一種在線虛擬機(jī)故障預(yù)測和容錯模型(OFP?TM),根據(jù)未來的資源使用情況實時估計容易發(fā)生故障的虛擬機(jī),對易發(fā)生故障的虛擬機(jī)進(jìn)行遷移,提前處理中斷,提高云平臺的可用性[10]。
在上述研究中,如文獻(xiàn)[5?6]基于云計算節(jié)點運(yùn)行的時間特征建立了相應(yīng)的機(jī)器學(xué)習(xí)故障預(yù)測方法和模型,并根據(jù)節(jié)點的性能數(shù)據(jù)來預(yù)測性能數(shù)據(jù),然后對預(yù)測結(jié)果進(jìn)行分析,這易受到云計算平臺高動態(tài)性的影響。
此外,還有通過虛擬機(jī)可觀測的系統(tǒng)特征來對虛擬機(jī)進(jìn)行故障檢測和故障預(yù)測的研究,文獻(xiàn)[7]通過可觀測的系統(tǒng)特征如CPU 利用率,來對云計算環(huán)境下虛擬機(jī)系統(tǒng)當(dāng)前的異常狀態(tài)進(jìn)行預(yù)測,但不能預(yù)測系統(tǒng)下一個時刻虛擬機(jī)系統(tǒng)的運(yùn)行狀態(tài)。部分研究針對云計算平臺下的虛擬機(jī)故障預(yù)測主要是采取收集相關(guān)的日志數(shù)據(jù),根據(jù)數(shù)據(jù)挖掘規(guī)則進(jìn)行故障預(yù)測,如文獻(xiàn)[8]易受到數(shù)據(jù)挖掘使用樣本的限制。文獻(xiàn)[9?10]的預(yù)測方法中存在由虛擬機(jī)負(fù)載所表現(xiàn)出的觀測狀態(tài)與虛擬機(jī)內(nèi)部安全狀態(tài)之間的關(guān)系存在不確定性,這需要進(jìn)一步的探究。
針對上述研究中存在的問題,本文提出了一種基于虛擬機(jī)的歷史故障規(guī)律建立故障預(yù)測的方法。本文方法通過分析虛擬機(jī)的歷史數(shù)據(jù)和當(dāng)前運(yùn)行數(shù)據(jù)的差異度來判定虛擬機(jī)當(dāng)前的狀態(tài),隨后根據(jù)虛擬機(jī)的當(dāng)前狀態(tài)結(jié)合歷史故障轉(zhuǎn)移規(guī)律預(yù)測下一時刻故障。為了保證云計算環(huán)境下虛擬機(jī)的可靠性和可用性,本文方法根據(jù)云計算環(huán)境下虛擬機(jī)的運(yùn)行,持續(xù)對預(yù)測方法中的訓(xùn)練數(shù)據(jù)進(jìn)行動態(tài)更新,不斷提升其故障預(yù)測的有效性。
本文將云計算環(huán)境下虛擬機(jī)故障限定為性能故障,指偏離虛擬機(jī)正常行為性能退化。與造成虛擬機(jī)立即停止運(yùn)行的宕機(jī)或崩潰失效不同,性能故障通常只是造成虛擬機(jī)運(yùn)行效率下降,如虛擬機(jī)CPU 負(fù)載過高,或內(nèi)存泄露可能會導(dǎo)致可用CPU 占用率上升、內(nèi)存數(shù)量減少等。而因為故障導(dǎo)致的性能異常,均可以通過對虛擬機(jī)的運(yùn)行狀態(tài)的監(jiān)測數(shù)據(jù)來進(jìn)行判斷。因此,本文通過監(jiān)測云計算環(huán)境下虛擬機(jī)的性能數(shù)據(jù)來預(yù)測虛擬機(jī)的故障。
云計算平臺下的虛擬機(jī)在持續(xù)運(yùn)行過程中其狀態(tài)數(shù)據(jù)始終源源不斷地產(chǎn)生,新的數(shù)據(jù)可能蘊(yùn)含著新的故障規(guī)律。現(xiàn)有的故障預(yù)測方法大多利用固定的數(shù)據(jù)集進(jìn)行一次性學(xué)習(xí),根據(jù)學(xué)習(xí)結(jié)果進(jìn)行預(yù)測,未學(xué)習(xí)新運(yùn)行數(shù)據(jù)所包含的故障規(guī)律。因此,本文的故障預(yù)測方法通過持續(xù)將虛擬機(jī)產(chǎn)生的運(yùn)行數(shù)據(jù)加入到訓(xùn)練集進(jìn)行不斷訓(xùn)練,學(xué)習(xí)新數(shù)據(jù)所蘊(yùn)含的故障規(guī)律,以提高故障預(yù)測的準(zhǔn)確性。
本文的故障預(yù)測方法過程為:首先對持續(xù)采集的性能指標(biāo)數(shù)據(jù)進(jìn)行預(yù)處理;接著對預(yù)處理之后的數(shù)據(jù)進(jìn)行特征選擇;然后計算現(xiàn)有數(shù)據(jù)與歷史數(shù)據(jù)正常狀態(tài)和故障狀態(tài)下的特征差異,并根據(jù)特征差異度來對虛擬機(jī)的當(dāng)前狀態(tài)進(jìn)行判斷;再根據(jù)虛擬機(jī)的歷史狀態(tài)變化規(guī)律建立馬爾可夫鏈故障預(yù)測方法,預(yù)測虛擬機(jī)下一時刻的故障狀態(tài);最后持續(xù)的更新訓(xùn)練集,學(xué)習(xí)新故障發(fā)生規(guī)律。云計算環(huán)境下虛擬機(jī)故障預(yù)測方法的流程如圖1所示。
圖1 虛擬機(jī)故障預(yù)測方法流程
由于虛擬機(jī)運(yùn)行數(shù)據(jù)各個指標(biāo)的量綱和單位不同,有些指標(biāo)數(shù)據(jù)值很大但卻不是造成故障的主要因素,而有些指標(biāo)數(shù)據(jù)值很小但卻有可能是造成故障的重要因素,在不對特征進(jìn)行歸一化時很難選出與故障預(yù)測、故障估測具有強(qiáng)相關(guān)的特征,因此本文采用StandarScaler方法對采集到的數(shù)據(jù)集進(jìn)行標(biāo)準(zhǔn)化處理,使得新的數(shù)據(jù)集方差為1,均值為0,目的是消除不同維度的數(shù)據(jù)量級對故障特征選擇的影響。標(biāo)準(zhǔn)化之后的數(shù)據(jù)既保留了原數(shù)據(jù)的特性,又避免了數(shù)據(jù)值比較集中的情況。
2.1 節(jié)中對數(shù)據(jù)進(jìn)行標(biāo)準(zhǔn)化處理之后,消除了量綱不同而造成的影響,但是由于采集到的虛擬機(jī)運(yùn)行數(shù)據(jù)的指標(biāo)過多,其中有一些指標(biāo)屬于噪聲數(shù)據(jù)或者與故障不相關(guān),而這些數(shù)據(jù)輸入到預(yù)測方法將會增大運(yùn)算量和開銷,并且會影響方法的預(yù)測準(zhǔn)確性。所以為了獲得云計算環(huán)境下虛擬機(jī)的有效狀態(tài)特征,對原始數(shù)據(jù)進(jìn)行降維處理是不可或缺的過程。目前常用的特征降維方法是特征提取和特征選擇,特征提取得到的最終特征集失去了原始特征集的物理含義,從而使得新得到的特征子集的可理解性差;特征選擇可以剔除掉無關(guān)的、冗余的及對虛擬機(jī)故障預(yù)測起副作用的狀態(tài)特征后,得到與故障預(yù)測強(qiáng)相關(guān)的精簡數(shù)據(jù)特征子集,更能反映故障規(guī)律的本質(zhì)特征[11]。且在云計算的環(huán)境中,一旦發(fā)現(xiàn)故障,可根據(jù)特征子集進(jìn)行反差其故障原因,可解釋性強(qiáng)。因此,本文利用特征選擇的方法,即Relief 算法來獲取與虛擬機(jī)故障預(yù)測具有強(qiáng)相關(guān)的特征。
通過第2.2 節(jié)中的特征選擇方法,得到了和虛擬機(jī)的故障預(yù)測具有強(qiáng)相關(guān)的精簡特征子集,該特征子集能反映故障規(guī)律的本質(zhì)特征,且能夠很好地判別出虛擬機(jī)的運(yùn)行狀態(tài)。由于虛擬機(jī)上的負(fù)載具有復(fù)雜性、動態(tài)性,其運(yùn)行數(shù)據(jù)的波動性大,所以虛擬機(jī)在故障狀態(tài)下和在正常狀態(tài)下所表現(xiàn)出的特征具有很大的差異性。根據(jù)歸屬同一類別的對象之間具有很強(qiáng)的相似性,反之具有極大的差異性這一特點,選取能夠刻畫不同類標(biāo)簽的代表性對象實例作為參考目標(biāo),并利用其余對象與代表性對象之間的差異性來判斷其余對象的類別。本文根據(jù)差異性判別的基本思想是:訓(xùn)練樣本集E中包含正常數(shù)據(jù)訓(xùn)練集M和故障數(shù)據(jù)訓(xùn)練集F。正常訓(xùn)練集M中包含n個對象實例,故障訓(xùn)練集F中包含n個對象實例,即M={x1,x2,…,xn},F(xiàn)={f1,f2,…,fn},分別從各自的訓(xùn)練集中選取r個對象構(gòu)成原型集Y1,Y2,Y1={q1,q2,…,qr},Y2={s1,s2,…,sr},要求該r個對象實例能夠顯著刻畫該類標(biāo)簽的特征。i∈E,q1∈Y1,s1∈Y2,Label(q1)=A,Label(s1)=B,若dis(i,q1)>dis(i,s1),則Label(i)=B,其中dis(·)函數(shù)表示兩個樣本間的距離函數(shù),本文根據(jù)樣本之間的距離大小來表示差異度。
在差異度計算的方法中,原型集代表了一類對類標(biāo)簽具有顯著識別能力的有用的樣本子集,將其作為差異度計算過程中的參考數(shù)據(jù)集[12]。本文采用文獻(xiàn)[12]中的二進(jìn)制粒子群優(yōu)化算法選取最佳的樣本子集作為原型集。通過分析虛擬機(jī)當(dāng)前運(yùn)行數(shù)據(jù)與不同的原型集之間的差異度判斷虛擬機(jī)當(dāng)前的故障狀態(tài)。根據(jù)特征差異度判斷虛擬機(jī)狀態(tài)算法,如算法1 所示。
算法1:根據(jù)特征差異度判斷虛擬機(jī)狀態(tài)
輸入:虛擬機(jī)歷史正常數(shù)據(jù)ntraindata 和標(biāo)簽nlabel,歷史故障數(shù)據(jù)ftraindata 和標(biāo)簽flabel,虛擬機(jī)當(dāng)前數(shù)據(jù)cdata
輸出:虛擬機(jī)故障狀態(tài)plabel
第2.3 節(jié)中利用虛擬機(jī)歷史運(yùn)行數(shù)據(jù)得到了通過特征差異,來對虛擬機(jī)當(dāng)前的故障狀態(tài)進(jìn)行判定,然后在當(dāng)前狀態(tài)的基礎(chǔ)上對虛擬機(jī)進(jìn)行故障預(yù)測。雖然虛擬機(jī)的運(yùn)行情況是根據(jù)其負(fù)載情況而動態(tài)變化的,但是虛擬機(jī)下一時刻的運(yùn)行情況往往只受當(dāng)前情況的影響,即虛擬機(jī)下一個時刻的運(yùn)行狀態(tài)受當(dāng)前狀態(tài)的影響較大而受除當(dāng)前狀態(tài)之前的狀態(tài)影響較小。基于虛擬機(jī)運(yùn)行情況的無后效性特點,本文提出了基于一階馬爾可夫鏈的故障預(yù)測方法,利用上文所述的虛擬機(jī)當(dāng)前狀態(tài)的判定方法判定虛擬機(jī)的當(dāng)前狀態(tài),并通過虛擬機(jī)的歷史運(yùn)行狀態(tài)來得出其馬爾可夫的預(yù)測方法。
馬爾可夫鏈?zhǔn)怯啥韲鴶?shù)學(xué)家安德雷馬爾可夫提出,相關(guān)定義和性質(zhì)在文獻(xiàn)[13]中有詳細(xì)的介紹,本文中簡單地引入介紹在故障模型建立的過程中所用到的一些相關(guān)的定義和性質(zhì)。馬爾可夫鏈?zhǔn)且唤M具有馬爾可夫性質(zhì)的離散隨機(jī)變量的集合,具體而言,假設(shè)隨機(jī)過程{Xn,n∈T}的參數(shù)集T是離散的時間集合,其相應(yīng)Xn的狀態(tài)空間是離散的狀態(tài)集I={i1,i2,…},如果對于任意的整數(shù)n∈T和任意的i1,i2,…,in+1∈I,條件概率滿足P{Xn+1=in+1|X0=i0,X1=i1,X2=i2,…,Xn=in}=P{Xn+1=in+1|Xn=in},則稱{Xn,n∈T}為馬爾可夫鏈[14]。通過上述馬爾科夫鏈的定義不難看出,馬爾可夫鏈具有無后效性,即系統(tǒng)下一次的狀態(tài)只與當(dāng)前狀態(tài)有關(guān)。
在一個完整的馬爾可夫鏈預(yù)測過程中,條件轉(zhuǎn)移概率是至關(guān)重要的,條件轉(zhuǎn)移概率:pij(n)=P{Xn+1=j|Xn=i},即馬爾可夫鏈Xn在時刻n的一步轉(zhuǎn)移概率,其中i,j為狀態(tài)集中的狀態(tài)。根據(jù)一步轉(zhuǎn)移概率可以得出系統(tǒng)狀態(tài)的一步轉(zhuǎn)移概率矩陣P。虛擬機(jī)歷史階段中每一次狀態(tài)與下一次狀態(tài)發(fā)生的種類轉(zhuǎn)移的次數(shù),即為狀態(tài)轉(zhuǎn)移矩陣K。公式如下:
式中:kij的物理意義為上次系統(tǒng)的狀態(tài)是i而下一次系統(tǒng)的狀態(tài)是j的次數(shù);pij為條件概率,其物理意義為上一次發(fā)生的是狀態(tài)i的條件下,下一次發(fā)生的是狀態(tài)j的概率。根據(jù)條件概率的定義,得:
根據(jù)概率的加法公式得到:
綜合以上兩個公式并考慮kij的物理意義,則P{xs=因此有
根據(jù)其物理意義統(tǒng)計虛擬機(jī)歷史數(shù)據(jù)狀態(tài)轉(zhuǎn)移次數(shù)即狀態(tài)轉(zhuǎn)移矩陣K,并計算一步轉(zhuǎn)移概率矩陣P,并將當(dāng)前虛擬機(jī)的狀態(tài)作為初始概率向量。根據(jù)初始概率向量和轉(zhuǎn)移概率矩陣計算出下一時刻的故障概率,根據(jù)概率判斷是否發(fā)生故障?;谔摂M機(jī)歷史數(shù)據(jù)構(gòu)建的馬爾可夫鏈預(yù)測算法如算法2 所示。
算法2:根據(jù)虛擬機(jī)歷史數(shù)據(jù)構(gòu)建一階馬爾可夫鏈預(yù)測算法
輸入:虛擬機(jī)歷史狀態(tài)集transition
輸出:預(yù)測狀態(tài)state
根據(jù)第2.3 節(jié)中對虛擬機(jī)當(dāng)前狀態(tài)判定的結(jié)果和第2.4 節(jié)中的一階馬爾可夫鏈預(yù)測方法,可以預(yù)測虛擬機(jī)下一時刻的運(yùn)行狀態(tài)。
具體過程為:根據(jù)第2.3 節(jié)中介紹的差異度計算方式求出當(dāng)前虛擬機(jī)當(dāng)前的運(yùn)行狀態(tài),確定初始概率向量,并根據(jù)轉(zhuǎn)移概率矩陣和初始概率矩陣構(gòu)建虛擬機(jī)故障預(yù)測方法,預(yù)測下一時刻虛擬機(jī)故障;然后動態(tài)更新訓(xùn)練數(shù)據(jù)。在動態(tài)更新訓(xùn)練數(shù)據(jù)時,首先是利用測試集來驗證預(yù)測方法的準(zhǔn)確性,將預(yù)測的結(jié)果保存下來,預(yù)測結(jié)束后將預(yù)測結(jié)果與真實結(jié)果進(jìn)行對比,計算其預(yù)測準(zhǔn)確率,然后將測試集當(dāng)作訓(xùn)練集,繼續(xù)訓(xùn)練來修正預(yù)測誤差。具體算法如算法3 所示。
算法3:預(yù)測虛擬機(jī)故障算法
輸入:虛擬機(jī)運(yùn)行測試數(shù)據(jù)集data
輸出:下一時刻的虛擬機(jī)故障狀態(tài)fstate
為了驗證所提方法的有效性,本文在實驗部分搭建了Hadoop 平臺,并對平臺中虛擬機(jī)運(yùn)行的真實數(shù)據(jù)進(jìn)行了采集。該平臺有1 個NameNode 節(jié)點、9 個DataNode節(jié)點,共10 個虛擬機(jī)節(jié)點,分別部署在3 臺不同的物理節(jié)點上,其中2 臺為工作站,另外1 臺為服務(wù)器。數(shù)據(jù)采集部分,利用dstat 監(jiān)測工具和筆者開發(fā)的監(jiān)控程序獲取各個虛擬機(jī)運(yùn)行狀態(tài)相關(guān)的數(shù)據(jù)。NameNode 節(jié)點為Master 節(jié)點,DataNode 節(jié)點為Slave 節(jié)點。DataNode 節(jié)點負(fù)責(zé)獲取虛擬機(jī)的運(yùn)行數(shù)據(jù),NameNode 節(jié)點負(fù)責(zé)處理各個虛擬機(jī)的運(yùn)行數(shù)據(jù)并進(jìn)行故障預(yù)測。物理節(jié)點的配置如表1所示。DELL Precesion(3630)是工作站,SR650 是服務(wù)器。本文搭建的Hadoop 平臺中每臺虛擬機(jī)的環(huán)境配置都是相同的,即全都采用CentOS 7.6 版本的操作系統(tǒng),3 個VCPU,3GB 運(yùn)行內(nèi)存,30 GB 的磁盤大小,Name Node 節(jié)點的IP 地址為192.168.100.223,DataNode1~DataNode9 節(jié)點的IP 地址為192.168.100.171~192.168.100.179。
表1 物理節(jié)點配置表
NameNode 部署在服務(wù)器上,DataNode1~DataNode5部署在工作站A 上,DataNode6~DataNode9 部署在工作站B 上。將云平臺下的各個虛擬機(jī)設(shè)置在同一個網(wǎng)段中,使得其能夠相互通信和執(zhí)行分布式的工作。
將采集到的原始屬性通過特征選擇,選擇出16 個和虛擬機(jī)故障預(yù)測具有密切相關(guān)的屬性特征,特征信息表如表2所示。
表2 特征信息表
表2是通過特征選擇方法選擇的16 個特征,其能夠很好地表現(xiàn)虛擬機(jī)的運(yùn)行狀態(tài),且和故障預(yù)測有較強(qiáng)的相關(guān)性。故障預(yù)測效果的評估方法有很多種,比較常見的評估方法有準(zhǔn)確率(Accuracy)、召回率、精確度(Precision)和F值(召回率與精確度的調(diào)和平均)等[15]。本文的實驗評價指標(biāo)是以預(yù)測準(zhǔn)確率和預(yù)測效率作為評價指標(biāo)。其中預(yù)測準(zhǔn)確率是正確預(yù)測到的虛擬機(jī)運(yùn)行狀態(tài)的樣本數(shù)占總樣本數(shù)的比率,預(yù)測效率是預(yù)測出虛擬機(jī)狀態(tài)所花費(fèi)的時間。
實驗部分一共采集各虛擬機(jī)的運(yùn)行數(shù)據(jù)540 936條,其中包括140 532 條故障數(shù)據(jù)。本文將前270 000 條數(shù)據(jù)作為訓(xùn)練數(shù)據(jù),剩下的數(shù)據(jù)作為測試數(shù)據(jù)。訓(xùn)練數(shù)據(jù)用以獲取正常數(shù)據(jù)原型集和故障數(shù)據(jù)原型集作為差異度計算依據(jù),以及構(gòu)建一階馬爾可夫鏈預(yù)測方法,并將訓(xùn)練完成的方法保存在NameNode 節(jié)點上。
在本次實驗中使用270 000 條訓(xùn)練數(shù)據(jù),按照本文的方法和文獻(xiàn)[9]的方法分別進(jìn)行了訓(xùn)練,270 000 條數(shù)據(jù)中有故障數(shù)據(jù)68 522 條。然后將虛擬機(jī)所發(fā)送的25 000 條測試據(jù)作為測試集,分別輸入以上兩個預(yù)測方法中進(jìn)行驗證。實驗過程中通過記錄各個方法的預(yù)測準(zhǔn)確率和預(yù)測效率來進(jìn)行實驗效果的對比。兩種方法的預(yù)測準(zhǔn)確率和預(yù)測效率如圖2、圖3所示。
圖2 故障預(yù)測準(zhǔn)確率
圖3 故障預(yù)測效率
圖2和圖3中S1~S9表示虛擬機(jī)DataNode1~DataNode9。通過以上實驗的結(jié)果可知:本文方法在對各臺虛擬機(jī)進(jìn)行故障預(yù)測時,預(yù)測準(zhǔn)確率平均在85%,預(yù)測效率為0.19 s;而文獻(xiàn)[9]方法,預(yù)測準(zhǔn)確率平均在76%,效率為7.50 s。對比實驗結(jié)果可以看出,本文方法在預(yù)測準(zhǔn)確率和預(yù)測效率上均優(yōu)于文獻(xiàn)[9]方法。因為文獻(xiàn)[9]方法利用Adaboost 進(jìn)行預(yù)測,而Adaboost 集成了很多的弱分類器,每次通過迭代來更新不同分類器的權(quán)值,相對比較耗時,且文獻(xiàn)[9]方法針對預(yù)測的觀測結(jié)果和虛擬機(jī)隱狀態(tài)之間尚存在不確定性,所以預(yù)測準(zhǔn)確率欠佳。
在本次實驗中,利用每臺虛擬機(jī)所發(fā)送的25 000 條數(shù)據(jù)作為測試數(shù)據(jù)來驗證預(yù)測方法,在NameNode 節(jié)點上將每個虛擬機(jī)的25 000 條數(shù)據(jù)分為5 個批次進(jìn)行測試和訓(xùn)練,每個批次為連續(xù)的5 000 條數(shù)據(jù)。首先用第1 批次的數(shù)據(jù)在本文的預(yù)測方法上進(jìn)行驗證,得出其預(yù)測預(yù)測準(zhǔn)確率和預(yù)測效率;然后將第1 批次的測試數(shù)據(jù)作為訓(xùn)練數(shù)據(jù)在之前訓(xùn)練好的方法的基礎(chǔ)之上繼續(xù)訓(xùn)練,學(xué)習(xí)新運(yùn)行數(shù)據(jù)的故障規(guī)律。在第1 批次數(shù)據(jù)訓(xùn)練結(jié)束后,以第2 批次的數(shù)據(jù)繼續(xù)作為測試數(shù)據(jù)進(jìn)行測試,得出其預(yù)測結(jié)果;接著將第2 批數(shù)據(jù)作為訓(xùn)練數(shù)據(jù),在第1 批數(shù)據(jù)訓(xùn)練完成的基礎(chǔ)上進(jìn)行繼續(xù)訓(xùn)練,繼續(xù)學(xué)習(xí)新的運(yùn)行數(shù)據(jù)所包含的故障規(guī)律,依次進(jìn)行迭代,直到將第5 批數(shù)迭代完成,最終得到通過迭代更新訓(xùn)練數(shù)據(jù)集的故障預(yù)測方法對每臺虛擬機(jī)的預(yù)測效果。
在訓(xùn)練數(shù)據(jù)未更新之前,以及加入前一批次作為訓(xùn)練數(shù)據(jù),相鄰的后一批次作為測試數(shù)據(jù),在本文故障預(yù)測方法上進(jìn)行驗證的預(yù)測效果如圖4所示。
圖4 訓(xùn)練數(shù)據(jù)更新之后故障預(yù)測準(zhǔn)確率
由圖4實驗結(jié)果可以看出:在未對訓(xùn)練數(shù)據(jù)集進(jìn)行迭代更新之前,本文方法對各個虛擬機(jī)的預(yù)測準(zhǔn)確率為85%左右;在每次進(jìn)行訓(xùn)練集迭代更新之后,對故障的預(yù)測準(zhǔn)確率都有不同程度的提高,在測試集的5 批數(shù)據(jù)迭代更新完之后,該方法最終的預(yù)測準(zhǔn)確率達(dá)到了90%左右。該實驗結(jié)果說明了通過對訓(xùn)練集的迭代更新能夠提升對故障的預(yù)測準(zhǔn)確率。
在訓(xùn)練數(shù)據(jù)未進(jìn)行更新迭代時,本文預(yù)測方法的預(yù)測效率是0.2 s,隨著訓(xùn)練樣本進(jìn)行累計更新,預(yù)測效率是2.2 s,預(yù)測效率隨著樣本累計而有所降低,但仍高于文獻(xiàn)[9]的預(yù)測效率。
從實驗結(jié)果可以看出,本文預(yù)測方法的初始預(yù)測準(zhǔn)確率不高,數(shù)據(jù)更新迭代之后存在一定的收斂等,通過分析認(rèn)為,本文方法對于突變情況下預(yù)測虛擬機(jī)狀態(tài)的效果有待提高。
針對云計算環(huán)境下虛擬機(jī)故障預(yù)測,本文提出了一種基于馬爾可夫鏈的故障預(yù)測算法。首先對虛擬機(jī)運(yùn)行數(shù)據(jù)進(jìn)行預(yù)處理;然后對運(yùn)行數(shù)據(jù)進(jìn)行特征選擇,選擇出和故障預(yù)測具有強(qiáng)相關(guān)性的最佳特征子集;接著利用特征差異來判斷虛擬機(jī)當(dāng)前的故障狀態(tài);最后利用虛擬機(jī)的歷史運(yùn)行數(shù)據(jù)建立馬爾可夫鏈故障預(yù)測方法,并持續(xù)地將虛擬機(jī)的運(yùn)行數(shù)據(jù)加入到訓(xùn)練集對訓(xùn)練集進(jìn)行持續(xù)更新。實驗結(jié)果表明,本文建立的故障預(yù)測方法對虛擬機(jī)故障的預(yù)測是有效的,且對訓(xùn)練數(shù)據(jù)進(jìn)行持續(xù)的更新能夠提高故障的預(yù)測準(zhǔn)確率。但是本文中也存在對于突發(fā)性故障的預(yù)測性不是很好,下一步將針對虛擬機(jī)突發(fā)故障開展相關(guān)研究。