李雪莉
(四川大學(xué)計(jì)算機(jī)學(xué)院 成都 610065)
失效檢測(cè)是系統(tǒng)可靠性保障的基本技術(shù)[1],它是一種應(yīng)用或者子系統(tǒng),負(fù)責(zé)在分布式系統(tǒng)中檢測(cè)節(jié)點(diǎn)失效,它是分布式系統(tǒng)中的基礎(chǔ)模塊,用來(lái)確保容錯(cuò)性.傳統(tǒng)的失效檢測(cè)通過(guò)發(fā)送心跳信息和設(shè)定超時(shí)時(shí)間進(jìn)行檢測(cè)[2].OpenStack是一個(gè)先進(jìn)的、開(kāi)源的以基礎(chǔ)設(shè)施為服務(wù)(IaaS)的開(kāi)源云計(jì)算軟件[3],它提供多種服務(wù).OpenStack中的失效檢測(cè)方法是基于傳統(tǒng)的心跳和超時(shí)機(jī)制部署,但固定的超時(shí)時(shí)間設(shè)定以及懷疑度的簡(jiǎn)單二元結(jié)果不能適應(yīng)云計(jì)算環(huán)境下實(shí)時(shí)且動(dòng)態(tài)變化的網(wǎng)絡(luò)狀況,導(dǎo)致誤判率較高.
針對(duì)傳統(tǒng)失效檢測(cè)方法存在的誤判問(wèn)題,Chen等人[4]和Bertier等人[5]提出了自適應(yīng)失效檢測(cè)方法,它主要考慮到了網(wǎng)絡(luò)變化情況:Chen等人提出的Chen-FD方法首先是對(duì)心跳到達(dá)時(shí)間進(jìn)行抽樣,利用抽樣估算下一個(gè)心跳到達(dá)的時(shí)間,其Δto是基于估算加安全邊界α.Bertier等人提出的Bertier-FD方法和Chen等人的方法類似,只是它的Δto的計(jì)算是結(jié)合Chen的估算加上網(wǎng)絡(luò)往返時(shí)間計(jì)算安全邊界值α.這種自適應(yīng)檢測(cè)方法相對(duì)于傳統(tǒng)的超時(shí)檢測(cè)考慮了網(wǎng)絡(luò)通信質(zhì)量的變化,提供了較好的估計(jì)方法來(lái)預(yù)測(cè)下一個(gè)心跳的到達(dá)時(shí)間.但是固定的安全邊界值以及網(wǎng)絡(luò)往返時(shí)間并不能準(zhǔn)確地反映動(dòng)態(tài)變化的網(wǎng)絡(luò)情況,因而不能很好地減少因網(wǎng)絡(luò)延遲而造成的誤判.
本文因此研究了累積型失效檢測(cè)方法,提出了一種基于正太分布并帶二次確認(rèn)機(jī)制的累積型失效檢測(cè)算法P-FD.P-FD檢測(cè)方法使用了與大多數(shù)廣域網(wǎng)特征相符的正太分布[6]作為心跳到達(dá)間隔時(shí)間的分布假設(shè),并根據(jù)時(shí)間累積計(jì)算懷疑度,因此能更好地適應(yīng)實(shí)時(shí)變化的網(wǎng)絡(luò)環(huán)境;同時(shí),采用Pull和閾值結(jié)合的二次確認(rèn)策略,極大地降低了誤判率.本文通過(guò)實(shí)驗(yàn)用該檢測(cè)方法替換現(xiàn)有心跳檢測(cè)算法,并部署在OpenStack云平臺(tái)上,在確保檢測(cè)準(zhǔn)確率的前提下削弱了網(wǎng)絡(luò)延遲以及丟包對(duì)平臺(tái)失效檢測(cè)的影響,降低了誤判率.
累積型失效檢測(cè)方法提供了在大型分布式系統(tǒng)中比較靈活的失效檢測(cè)機(jī)制[7],基于過(guò)去心跳間隔到達(dá)時(shí)間的分布,輸出一個(gè)累積的與時(shí)間相關(guān)的懷疑度的值,而不是二元結(jié)果(信任或懷疑)對(duì)節(jié)點(diǎn)是否失效進(jìn)行判斷.如果一個(gè)進(jìn)程確實(shí)崩潰了,這個(gè)值可以保證隨著時(shí)間累積并趨向于無(wú)窮大.
P-FD方法是一種基于正太分布[8]同時(shí)結(jié)合Pull方法進(jìn)行二次確認(rèn)的按照時(shí)間累積計(jì)算懷疑度的失效檢測(cè)方法,是對(duì)累積型失效檢測(cè)的一種實(shí)現(xiàn)方法.它使用心跳檢測(cè)作為基本檢測(cè)策略,并假定心跳間隔到達(dá)時(shí)間服從正太分布.
如圖1所示,懷疑度基于上一次心跳信息的時(shí)間計(jì)算,一個(gè)進(jìn)程的懷疑度是漸進(jìn)上升的.
圖1 P-FD方法示意圖
一個(gè)應(yīng)用可以根據(jù)自己的服務(wù)質(zhì)量需求設(shè)置自己的閾值,當(dāng)懷疑度超過(guò)閾值時(shí)懷疑節(jié)點(diǎn)失效同時(shí)觸發(fā)二次確認(rèn)機(jī)制,二次確認(rèn)失效后判定失效.進(jìn)行失效檢測(cè)的監(jiān)控節(jié)點(diǎn)和被監(jiān)控節(jié)點(diǎn)無(wú)需建立永久連接,所以使用UDP連接進(jìn)行通信.假定2臺(tái)節(jié)點(diǎn)是時(shí)間同步的,具體檢測(cè)流程如下:
1) 首先采樣心跳到達(dá)時(shí)間.被監(jiān)控進(jìn)程(p進(jìn)程)給每個(gè)心跳信息添加一個(gè)序列號(hào),用于監(jiān)控的進(jìn)程(q進(jìn)程)將心跳到達(dá)時(shí)間存儲(chǔ)到固定大小(N,N可以配置)的滑動(dòng)窗口中,每當(dāng)新的心跳到來(lái),其到達(dá)時(shí)間就被存儲(chǔ)到這個(gè)窗口中,然后將相對(duì)最舊的心跳消息從當(dāng)前窗口中刪除.
2) 用這些樣本來(lái)確定后面心跳間隔的分布,根據(jù)滑動(dòng)窗口中的數(shù)據(jù)可以計(jì)算心跳到達(dá)間隔時(shí)間.
3) 不斷確定心跳間隔的平均值μ和方差σ.
4) 利用這些間隔時(shí)間計(jì)算當(dāng)前失效懷疑度S值,S通過(guò)式(1)計(jì)算:
(1)
其中,tlast是最新收到心跳的時(shí)間,tnow是當(dāng)前時(shí)間,Plater(t)是下一次心跳從上一次心跳再經(jīng)過(guò)t時(shí)間后到達(dá)的概率,其含義為如果在時(shí)間tnow判斷節(jié)點(diǎn)失效,則誤判可能性為P=Plater(tnow-Tlast),也就是心跳在tnow之后到達(dá)的概率.所以P越大說(shuō)明誤判概率越大,而0
(2)
=1-F(t),
(3)
其中,F(t) 是μ和方差σ2正態(tài)分布的累積分布函數(shù).
5) 比較S的值和其閾值λ,閾值λ根據(jù)不同應(yīng)用需求給出.閾值λ對(duì)應(yīng)的超時(shí)檢測(cè)時(shí)間記為Tfirst.如果S>λ,我們將采用Pull方法,即進(jìn)程q主動(dòng)向進(jìn)程p發(fā)送一個(gè)檢測(cè)消息,進(jìn)程p收到進(jìn)程q的詢問(wèn)消息后,返回一個(gè)響應(yīng),如果進(jìn)程q在一個(gè)Tfirst等待時(shí)間內(nèi)沒(méi)有收到p的響應(yīng),則判定p失效.采用Pull方法主動(dòng)檢測(cè)心跳,可以縮短一定的檢測(cè)時(shí)間.
本次實(shí)驗(yàn)的目標(biāo)是研究不同閾值λ對(duì)P-FD方法的影響,其次比較P-FD方法和Chen-FD以及OpenStack平臺(tái)自身使用的失效檢測(cè)方法的誤判率.
為了量化表示檢測(cè)速度和準(zhǔn)確度,Chen等人[9]提出了一系列指標(biāo)來(lái)規(guī)范失效檢測(cè)器的服務(wù)質(zhì)量,以下2個(gè)主要指標(biāo)用來(lái)描述失效檢測(cè)器的服務(wù)質(zhì)量:
1) 檢測(cè)時(shí)間.表示從某個(gè)進(jìn)程崩潰時(shí)刻開(kāi)始到該進(jìn)程被懷疑所經(jīng)過(guò)的時(shí)間.
2) 誤判率.表示每單位時(shí)間失效檢測(cè)方法出錯(cuò)數(shù),即失效檢測(cè)方法出錯(cuò)的頻率.
我們的實(shí)驗(yàn)將基于以上2個(gè)指標(biāo)描述和對(duì)比失效檢測(cè)算法的效率.
本實(shí)驗(yàn)采用OpenStack云平臺(tái)的Kilo版本,部署如下:有2個(gè)節(jié)點(diǎn),一個(gè)是計(jì)算節(jié)點(diǎn),即被監(jiān)控的節(jié)點(diǎn);另一個(gè)是控制節(jié)點(diǎn),用于監(jiān)控節(jié)點(diǎn)的狀態(tài).2個(gè)節(jié)點(diǎn)硬件和軟件配置如表1 所示:
表1 節(jié)點(diǎn)軟硬件配置情況
2個(gè)節(jié)點(diǎn)相互通信時(shí)在本地產(chǎn)生一定的延遲,用來(lái)模擬互聯(lián)網(wǎng)中的網(wǎng)絡(luò)延遲,延遲數(shù)據(jù)來(lái)自廣域網(wǎng),所有消息都通過(guò)UDP協(xié)議傳送,對(duì)百度進(jìn)行ping響應(yīng)測(cè)試,歷時(shí)9 h,共采集4萬(wàn)條數(shù)據(jù),已發(fā)送36 537條,接收36 380條,其中丟失157條,丟包率為0.42%,最小響應(yīng)時(shí)間50 ms,最大響應(yīng)時(shí)間3 286 ms,平均值74 ms,我們?cè)诿啃r(shí)拿到的數(shù)據(jù)中各隨機(jī)取2 000條記錄,共18 000條作為心跳信息延遲時(shí)間,心跳記錄的分布如圖2所示.從數(shù)據(jù)特點(diǎn)來(lái)看,滿足云計(jì)算環(huán)境下網(wǎng)絡(luò)信息延遲和丟包特點(diǎn).
圖2 心跳延遲時(shí)間分布
在OpenStack中應(yīng)用P-FD失效檢測(cè)方法,取發(fā)送周期Δt=1 s,滑動(dòng)窗口N=1 000,對(duì)P-FD算法進(jìn)行檢測(cè).其閾值λ和誤判率(采用了對(duì)數(shù)刻度)如圖3所示,閾值λ和檢測(cè)時(shí)間如圖4所示.
圖3 閾值λ和誤判率
圖4 閾值λ和檢測(cè)時(shí)間
綜合考慮檢測(cè)時(shí)間和誤判率,在P-FD中,取閾值λ=9.之后與OpenStack現(xiàn)有失效檢測(cè)方法以及Chen-FD算法進(jìn)行對(duì)比,實(shí)驗(yàn)結(jié)果如圖5所示:
圖5 3種方法檢測(cè)時(shí)間和誤判率對(duì)比
圖3和圖4表明當(dāng)閾值λ取值越大,其誤判率越低而檢測(cè)時(shí)間越長(zhǎng).實(shí)驗(yàn)結(jié)果基本符合理論研究分析,證明P-FD算法可以根據(jù)不同的服務(wù)質(zhì)量需求對(duì)閾值進(jìn)行設(shè)置,適用性廣泛.從圖3可以看出,λ∈[8,12]之間誤判率顯著降低.圖4顯示當(dāng)閾值λ∈[9,16],檢測(cè)時(shí)間顯著增加.實(shí)驗(yàn)證明當(dāng)λ=9時(shí),檢測(cè)時(shí)間較短且誤判率較低.
圖5顯示了3種失效檢測(cè)方法的檢測(cè)時(shí)間和誤判率對(duì)比.從圖5可以看出,OpenStack本身的失效檢測(cè)方法在云環(huán)境下效率不好,因?yàn)樗](méi)有考慮到網(wǎng)絡(luò)變化情況,將一些因?yàn)榫W(wǎng)絡(luò)延遲導(dǎo)致的心跳信息延遲也當(dāng)作失效,所以誤判率高.而P-FD相對(duì)于Chen-FD具有更低的誤判率,誤判率相同時(shí)P-FD方法檢測(cè)時(shí)間更短.實(shí)驗(yàn)表明,使用累積型失效檢測(cè)方法和Pull二次確認(rèn)機(jī)制有效降低了復(fù)雜不穩(wěn)定網(wǎng)絡(luò)環(huán)境下的誤判率.因此將其應(yīng)用到OpenStack平臺(tái)上是可行的.
失效檢測(cè)對(duì)于OpenStack這種有高可用需求的云平臺(tái)而言是一個(gè)重要組成部分,需要適應(yīng)云平臺(tái)下復(fù)雜不穩(wěn)定的網(wǎng)絡(luò)狀況.但是OpenStack現(xiàn)有失效檢測(cè)方法的實(shí)現(xiàn)只適應(yīng)于較好且穩(wěn)定的網(wǎng)絡(luò)狀況,不能適應(yīng)云計(jì)算下復(fù)雜且實(shí)時(shí)變化的網(wǎng)絡(luò)環(huán)境,誤判率高.將基于累積型失效檢測(cè)的P-FD方法應(yīng)用到OpenStack平臺(tái)中能夠更好地適應(yīng)大型云計(jì)算模式中動(dò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]殷家琪. 基于虛擬機(jī)的快速故障恢復(fù)技術(shù)的研究[D]. 哈爾濱: 哈爾濱工業(yè)大學(xué), 2013
[3]劉飛宇. OpenStack 云平臺(tái)下的虛擬機(jī)監(jiān)控與控制的研究與實(shí)現(xiàn)[D]. 成都: 電子科技大學(xué)計(jì)算機(jī)應(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