李雪莉
(四川大學(xué)計算機學(xué)院 成都 610065)
失效檢測是系統(tǒng)可靠性保障的基本技術(shù)[1],它是一種應(yīng)用或者子系統(tǒng),負責(zé)在分布式系統(tǒng)中檢測節(jié)點失效,它是分布式系統(tǒng)中的基礎(chǔ)模塊,用來確保容錯性.傳統(tǒng)的失效檢測通過發(fā)送心跳信息和設(shè)定超時時間進行檢測[2].OpenStack是一個先進的、開源的以基礎(chǔ)設(shè)施為服務(wù)(IaaS)的開源云計算軟件[3],它提供多種服務(wù).OpenStack中的失效檢測方法是基于傳統(tǒng)的心跳和超時機制部署,但固定的超時時間設(shè)定以及懷疑度的簡單二元結(jié)果不能適應(yīng)云計算環(huán)境下實時且動態(tài)變化的網(wǎng)絡(luò)狀況,導(dǎo)致誤判率較高.
針對傳統(tǒng)失效檢測方法存在的誤判問題,Chen等人[4]和Bertier等人[5]提出了自適應(yīng)失效檢測方法,它主要考慮到了網(wǎng)絡(luò)變化情況:Chen等人提出的Chen-FD方法首先是對心跳到達時間進行抽樣,利用抽樣估算下一個心跳到達的時間,其Δto是基于估算加安全邊界α.Bertier等人提出的Bertier-FD方法和Chen等人的方法類似,只是它的Δto的計算是結(jié)合Chen的估算加上網(wǎng)絡(luò)往返時間計算安全邊界值α.這種自適應(yīng)檢測方法相對于傳統(tǒng)的超時檢測考慮了網(wǎng)絡(luò)通信質(zhì)量的變化,提供了較好的估計方法來預(yù)測下一個心跳的到達時間.但是固定的安全邊界值以及網(wǎng)絡(luò)往返時間并不能準確地反映動態(tài)變化的網(wǎng)絡(luò)情況,因而不能很好地減少因網(wǎng)絡(luò)延遲而造成的誤判.
本文因此研究了累積型失效檢測方法,提出了一種基于正太分布并帶二次確認機制的累積型失效檢測算法P-FD.P-FD檢測方法使用了與大多數(shù)廣域網(wǎng)特征相符的正太分布[6]作為心跳到達間隔時間的分布假設(shè),并根據(jù)時間累積計算懷疑度,因此能更好地適應(yīng)實時變化的網(wǎng)絡(luò)環(huán)境;同時,采用Pull和閾值結(jié)合的二次確認策略,極大地降低了誤判率.本文通過實驗用該檢測方法替換現(xiàn)有心跳檢測算法,并部署在OpenStack云平臺上,在確保檢測準確率的前提下削弱了網(wǎng)絡(luò)延遲以及丟包對平臺失效檢測的影響,降低了誤判率.
累積型失效檢測方法提供了在大型分布式系統(tǒng)中比較靈活的失效檢測機制[7],基于過去心跳間隔到達時間的分布,輸出一個累積的與時間相關(guān)的懷疑度的值,而不是二元結(jié)果(信任或懷疑)對節(jié)點是否失效進行判斷.如果一個進程確實崩潰了,這個值可以保證隨著時間累積并趨向于無窮大.
P-FD方法是一種基于正太分布[8]同時結(jié)合Pull方法進行二次確認的按照時間累積計算懷疑度的失效檢測方法,是對累積型失效檢測的一種實現(xiàn)方法.它使用心跳檢測作為基本檢測策略,并假定心跳間隔到達時間服從正太分布.
如圖1所示,懷疑度基于上一次心跳信息的時間計算,一個進程的懷疑度是漸進上升的.
圖1 P-FD方法示意圖
一個應(yīng)用可以根據(jù)自己的服務(wù)質(zhì)量需求設(shè)置自己的閾值,當(dāng)懷疑度超過閾值時懷疑節(jié)點失效同時觸發(fā)二次確認機制,二次確認失效后判定失效.進行失效檢測的監(jiān)控節(jié)點和被監(jiān)控節(jié)點無需建立永久連接,所以使用UDP連接進行通信.假定2臺節(jié)點是時間同步的,具體檢測流程如下:
1) 首先采樣心跳到達時間.被監(jiān)控進程(p進程)給每個心跳信息添加一個序列號,用于監(jiān)控的進程(q進程)將心跳到達時間存儲到固定大小(N,N可以配置)的滑動窗口中,每當(dāng)新的心跳到來,其到達時間就被存儲到這個窗口中,然后將相對最舊的心跳消息從當(dāng)前窗口中刪除.
2) 用這些樣本來確定后面心跳間隔的分布,根據(jù)滑動窗口中的數(shù)據(jù)可以計算心跳到達間隔時間.
3) 不斷確定心跳間隔的平均值μ和方差σ.
4) 利用這些間隔時間計算當(dāng)前失效懷疑度S值,S通過式(1)計算:
(1)
其中,tlast是最新收到心跳的時間,tnow是當(dāng)前時間,Plater(t)是下一次心跳從上一次心跳再經(jīng)過t時間后到達的概率,其含義為如果在時間tnow判斷節(jié)點失效,則誤判可能性為P=Plater(tnow-Tlast),也就是心跳在tnow之后到達的概率.所以P越大說明誤判概率越大,而0
(2)
=1-F(t),
(3)
其中,F(t) 是μ和方差σ2正態(tài)分布的累積分布函數(shù).
5) 比較S的值和其閾值λ,閾值λ根據(jù)不同應(yīng)用需求給出.閾值λ對應(yīng)的超時檢測時間記為Tfirst.如果S>λ,我們將采用Pull方法,即進程q主動向進程p發(fā)送一個檢測消息,進程p收到進程q的詢問消息后,返回一個響應(yīng),如果進程q在一個Tfirst等待時間內(nèi)沒有收到p的響應(yīng),則判定p失效.采用Pull方法主動檢測心跳,可以縮短一定的檢測時間.
本次實驗的目標是研究不同閾值λ對P-FD方法的影響,其次比較P-FD方法和Chen-FD以及OpenStack平臺自身使用的失效檢測方法的誤判率.
為了量化表示檢測速度和準確度,Chen等人[9]提出了一系列指標來規(guī)范失效檢測器的服務(wù)質(zhì)量,以下2個主要指標用來描述失效檢測器的服務(wù)質(zhì)量:
1) 檢測時間.表示從某個進程崩潰時刻開始到該進程被懷疑所經(jīng)過的時間.
2) 誤判率.表示每單位時間失效檢測方法出錯數(shù),即失效檢測方法出錯的頻率.
我們的實驗將基于以上2個指標描述和對比失效檢測算法的效率.
本實驗采用OpenStack云平臺的Kilo版本,部署如下:有2個節(jié)點,一個是計算節(jié)點,即被監(jiān)控的節(jié)點;另一個是控制節(jié)點,用于監(jiān)控節(jié)點的狀態(tài).2個節(jié)點硬件和軟件配置如表1 所示:
表1 節(jié)點軟硬件配置情況
2個節(jié)點相互通信時在本地產(chǎn)生一定的延遲,用來模擬互聯(lián)網(wǎng)中的網(wǎng)絡(luò)延遲,延遲數(shù)據(jù)來自廣域網(wǎng),所有消息都通過UDP協(xié)議傳送,對百度進行ping響應(yīng)測試,歷時9 h,共采集4萬條數(shù)據(jù),已發(fā)送36 537條,接收36 380條,其中丟失157條,丟包率為0.42%,最小響應(yīng)時間50 ms,最大響應(yīng)時間3 286 ms,平均值74 ms,我們在每小時拿到的數(shù)據(jù)中各隨機取2 000條記錄,共18 000條作為心跳信息延遲時間,心跳記錄的分布如圖2所示.從數(shù)據(jù)特點來看,滿足云計算環(huán)境下網(wǎng)絡(luò)信息延遲和丟包特點.
圖2 心跳延遲時間分布
在OpenStack中應(yīng)用P-FD失效檢測方法,取發(fā)送周期Δt=1 s,滑動窗口N=1 000,對P-FD算法進行檢測.其閾值λ和誤判率(采用了對數(shù)刻度)如圖3所示,閾值λ和檢測時間如圖4所示.
圖3 閾值λ和誤判率
圖4 閾值λ和檢測時間
綜合考慮檢測時間和誤判率,在P-FD中,取閾值λ=9.之后與OpenStack現(xiàn)有失效檢測方法以及Chen-FD算法進行對比,實驗結(jié)果如圖5所示:
圖5 3種方法檢測時間和誤判率對比
圖3和圖4表明當(dāng)閾值λ取值越大,其誤判率越低而檢測時間越長.實驗結(jié)果基本符合理論研究分析,證明P-FD算法可以根據(jù)不同的服務(wù)質(zhì)量需求對閾值進行設(shè)置,適用性廣泛.從圖3可以看出,λ∈[8,12]之間誤判率顯著降低.圖4顯示當(dāng)閾值λ∈[9,16],檢測時間顯著增加.實驗證明當(dāng)λ=9時,檢測時間較短且誤判率較低.
圖5顯示了3種失效檢測方法的檢測時間和誤判率對比.從圖5可以看出,OpenStack本身的失效檢測方法在云環(huán)境下效率不好,因為它并沒有考慮到網(wǎng)絡(luò)變化情況,將一些因為網(wǎng)絡(luò)延遲導(dǎo)致的心跳信息延遲也當(dāng)作失效,所以誤判率高.而P-FD相對于Chen-FD具有更低的誤判率,誤判率相同時P-FD方法檢測時間更短.實驗表明,使用累積型失效檢測方法和Pull二次確認機制有效降低了復(fù)雜不穩(wěn)定網(wǎng)絡(luò)環(huán)境下的誤判率.因此將其應(yīng)用到OpenStack平臺上是可行的.
失效檢測對于OpenStack這種有高可用需求的云平臺而言是一個重要組成部分,需要適應(yīng)云平臺下復(fù)雜不穩(wěn)定的網(wǎng)絡(luò)狀況.但是OpenStack現(xiàn)有失效檢測方法的實現(xiàn)只適應(yīng)于較好且穩(wěn)定的網(wǎng)絡(luò)狀況,不能適應(yīng)云計算下復(fù)雜且實時變化的網(wǎng)絡(luò)環(huán)境,誤判率高.將基于累積型失效檢測的P-FD方法應(yīng)用到OpenStack平臺中能夠更好地適應(yīng)大型云計算模式中動態(tài)且不穩(wěn)定的網(wǎng)絡(luò)環(huán)境,降低了誤判率.
[1]Liu J, Wu Z, Wu J, et al. A Weibull distribution accrual failure detector for cloud computing[J]. PloS One, 2017, 12(3): e0173666
[2]殷家琪. 基于虛擬機的快速故障恢復(fù)技術(shù)的研究[D]. 哈爾濱: 哈爾濱工業(yè)大學(xué), 2013
[3]劉飛宇. OpenStack 云平臺下的虛擬機監(jiān)控與控制的研究與實現(xiàn)[D]. 成都: 電子科技大學(xué)計算機應(yīng)用技術(shù)學(xué)院, 2013
[4]Chen N J, Wei J, Yang B, et al. Adaptive failure detection in Web application server[J]. Journal of Software, 2005, 16(11): 1929-1938
[5]Bertier M, Marin O, Sens P. Implementation and performance evaluation of an adaptable failure detector[C] //Proc of Int Conf on Dependable Systems and Networks, Piscataway, NJ: IEEE, 2002: 354-363
[6]Casimiro A, Verissimo P. Using the timely computing base for dependable QoS adaptation[C] //Proc of the 20th IEEE Symp on Reliable Distributed Systems. Piscataway, NJ: IEEE, 2001: 208-217
[7]Défago X, Urbán P, Hayashibara N, et al. Definition and specification of accrual failure detectors[C] //Proc of Int Conf on Dependable Systems and Networks. Piscataway, NJ: IEEE, 2005: 206-215
[8]Hayashibara N, Defago X, Yared R, et al. The/spl phi/accrual failure detector[C] //Proc of the 23rd IEEE Int Symp on Reliable Distributed Systems. Piscataway, NJ: IEEE, 2004: 66-78
[9]Chen W, Toueg S, Aguilera M K. On the quality of service of failure detectors[J]. IEEE Trans on Computers, 2002, 51(1): 13-32