李雪莉
(四川大學計算機學院 成都 610065)
失效檢測是系統可靠性保障的基本技術[1],它是一種應用或者子系統,負責在分布式系統中檢測節點失效,它是分布式系統中的基礎模塊,用來確保容錯性.傳統的失效檢測通過發送心跳信息和設定超時時間進行檢測[2].OpenStack是一個先進的、開源的以基礎設施為服務(IaaS)的開源云計算軟件[3],它提供多種服務.OpenStack中的失效檢測方法是基于傳統的心跳和超時機制部署,但固定的超時時間設定以及懷疑度的簡單二元結果不能適應云計算環境下實時且動態變化的網絡狀況,導致誤判率較高.
針對傳統失效檢測方法存在的誤判問題,Chen等人[4]和Bertier等人[5]提出了自適應失效檢測方法,它主要考慮到了網絡變化情況:Chen等人提出的Chen-FD方法首先是對心跳到達時間進行抽樣,利用抽樣估算下一個心跳到達的時間,其Δto是基于估算加安全邊界α.Bertier等人提出的Bertier-FD方法和Chen等人的方法類似,只是它的Δto的計算是結合Chen的估算加上網絡往返時間計算安全邊界值α.這種自適應檢測方法相對于傳統的超時檢測考慮了網絡通信質量的變化,提供了較好的估計方法來預測下一個心跳的到達時間.但是固定的安全邊界值以及網絡往返時間并不能準確地反映動態變化的網絡情況,因而不能很好地減少因網絡延遲而造成的誤判.
本文因此研究了累積型失效檢測方法,提出了一種基于正太分布并帶二次確認機制的累積型失效檢測算法P-FD.P-FD檢測方法使用了與大多數廣域網特征相符的正太分布[6]作為心跳到達間隔時間的分布假設,并根據時間累積計算懷疑度,因此能更好地適應實時變化的網絡環境;同時,采用Pull和閾值結合的二次確認策略,極大地降低了誤判率.本文通過實驗用該檢測方法替換現有心跳檢測算法,并部署在OpenStack云平臺上,在確保檢測準確率的前提下削弱了網絡延遲以及丟包對平臺失效檢測的影響,降低了誤判率.
累積型失效檢測方法提供了在大型分布式系統中比較靈活的失效檢測機制[7],基于過去心跳間隔到達時間的分布,輸出一個累積的與時間相關的懷疑度的值,而不是二元結果(信任或懷疑)對節點是否失效進行判斷.如果一個進程確實崩潰了,這個值可以保證隨著時間累積并趨向于無窮大.
P-FD方法是一種基于正太分布[8]同時結合Pull方法進行二次確認的按照時間累積計算懷疑度的失效檢測方法,是對累積型失效檢測的一種實現方法.它使用心跳檢測作為基本檢測策略,并假定心跳間隔到達時間服從正太分布.
如圖1所示,懷疑度基于上一次心跳信息的時間計算,一個進程的懷疑度是漸進上升的.

圖1 P-FD方法示意圖
一個應用可以根據自己的服務質量需求設置自己的閾值,當懷疑度超過閾值時懷疑節點失效同時觸發二次確認機制,二次確認失效后判定失效.進行失效檢測的監控節點和被監控節點無需建立永久連接,所以使用UDP連接進行通信.假定2臺節點是時間同步的,具體檢測流程如下:
1) 首先采樣心跳到達時間.被監控進程(p進程)給每個心跳信息添加一個序列號,用于監控的進程(q進程)將心跳到達時間存儲到固定大小(N,N可以配置)的滑動窗口中,每當新的心跳到來,其到達時間就被存儲到這個窗口中,然后將相對最舊的心跳消息從當前窗口中刪除.
2) 用這些樣本來確定后面心跳間隔的分布,根據滑動窗口中的數據可以計算心跳到達間隔時間.
3) 不斷確定心跳間隔的平均值μ和方差σ.
4) 利用這些間隔時間計算當前失效懷疑度S值,S通過式(1)計算:
(1)
其中,tlast是最新收到心跳的時間,tnow是當前時間,Plater(t)是下一次心跳從上一次心跳再經過t時間后到達的概率,其含義為如果在時間tnow判斷節點失效,則誤判可能性為P=Plater(tnow-Tlast),也就是心跳在tnow之后到達的概率.所以P越大說明誤判概率越大,而0
(2)
=1-F(t),
(3)
其中,F(t) 是μ和方差σ2正態分布的累積分布函數.
5) 比較S的值和其閾值λ,閾值λ根據不同應用需求給出.閾值λ對應的超時檢測時間記為Tfirst.如果S>λ,我們將采用Pull方法,即進程q主動向進程p發送一個檢測消息,進程p收到進程q的詢問消息后,返回一個響應,如果進程q在一個Tfirst等待時間內沒有收到p的響應,則判定p失效.采用Pull方法主動檢測心跳,可以縮短一定的檢測時間.
本次實驗的目標是研究不同閾值λ對P-FD方法的影響,其次比較P-FD方法和Chen-FD以及OpenStack平臺自身使用的失效檢測方法的誤判率.
為了量化表示檢測速度和準確度,Chen等人[9]提出了一系列指標來規范失效檢測器的服務質量,以下2個主要指標用來描述失效檢測器的服務質量:
1) 檢測時間.表示從某個進程崩潰時刻開始到該進程被懷疑所經過的時間.
2) 誤判率.表示每單位時間失效檢測方法出錯數,即失效檢測方法出錯的頻率.
我們的實驗將基于以上2個指標描述和對比失效檢測算法的效率.
本實驗采用OpenStack云平臺的Kilo版本,部署如下:有2個節點,一個是計算節點,即被監控的節點;另一個是控制節點,用于監控節點的狀態.2個節點硬件和軟件配置如表1 所示:

表1 節點軟硬件配置情況
2個節點相互通信時在本地產生一定的延遲,用來模擬互聯網中的網絡延遲,延遲數據來自廣域網,所有消息都通過UDP協議傳送,對百度進行ping響應測試,歷時9 h,共采集4萬條數據,已發送36 537條,接收36 380條,其中丟失157條,丟包率為0.42%,最小響應時間50 ms,最大響應時間3 286 ms,平均值74 ms,我們在每小時拿到的數據中各隨機取2 000條記錄,共18 000條作為心跳信息延遲時間,心跳記錄的分布如圖2所示.從數據特點來看,滿足云計算環境下網絡信息延遲和丟包特點.

圖2 心跳延遲時間分布
在OpenStack中應用P-FD失效檢測方法,取發送周期Δt=1 s,滑動窗口N=1 000,對P-FD算法進行檢測.其閾值λ和誤判率(采用了對數刻度)如圖3所示,閾值λ和檢測時間如圖4所示.

圖3 閾值λ和誤判率

圖4 閾值λ和檢測時間
綜合考慮檢測時間和誤判率,在P-FD中,取閾值λ=9.之后與OpenStack現有失效檢測方法以及Chen-FD算法進行對比,實驗結果如圖5所示:

圖5 3種方法檢測時間和誤判率對比
圖3和圖4表明當閾值λ取值越大,其誤判率越低而檢測時間越長.實驗結果基本符合理論研究分析,證明P-FD算法可以根據不同的服務質量需求對閾值進行設置,適用性廣泛.從圖3可以看出,λ∈[8,12]之間誤判率顯著降低.圖4顯示當閾值λ∈[9,16],檢測時間顯著增加.實驗證明當λ=9時,檢測時間較短且誤判率較低.
圖5顯示了3種失效檢測方法的檢測時間和誤判率對比.從圖5可以看出,OpenStack本身的失效檢測方法在云環境下效率不好,因為它并沒有考慮到網絡變化情況,將一些因為網絡延遲導致的心跳信息延遲也當作失效,所以誤判率高.而P-FD相對于Chen-FD具有更低的誤判率,誤判率相同時P-FD方法檢測時間更短.實驗表明,使用累積型失效檢測方法和Pull二次確認機制有效降低了復雜不穩定網絡環境下的誤判率.因此將其應用到OpenStack平臺上是可行的.
失效檢測對于OpenStack這種有高可用需求的云平臺而言是一個重要組成部分,需要適應云平臺下復雜不穩定的網絡狀況.但是OpenStack現有失效檢測方法的實現只適應于較好且穩定的網絡狀況,不能適應云計算下復雜且實時變化的網絡環境,誤判率高.將基于累積型失效檢測的P-FD方法應用到OpenStack平臺中能夠更好地適應大型云計算模式中動態且不穩定的網絡環境,降低了誤判率.
[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]殷家琪. 基于虛擬機的快速故障恢復技術的研究[D]. 哈爾濱: 哈爾濱工業大學, 2013
[3]劉飛宇. OpenStack 云平臺下的虛擬機監控與控制的研究與實現[D]. 成都: 電子科技大學計算機應用技術學院, 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