Accrual Failure Detector

本文是對論文《The Phi Accrual Failure Detector》的理解以及在cassandra中的實現。

背景

衆所周知,故障探測(failure detector)是分佈式系統的基礎模塊。有人建議把故障探測做成一個基本的服務,類似於DNS、NTP(始終同步),其在分佈式系統的重要性可見一斑。

妨礙故障探測稱爲一個服務的主要障礙在於:分佈式應用需要調整故障檢測以適用於不同的QOS需求,傳統的故障探測算法只能提供bool結果。

accrual failure detector的創新在於:產生結果是被監測的server crash的置信度(the degree of confidence),置信度是隨着時間變化的連續的值,分佈式應用根據自身的QOS需求定義適合自己的suspicion threshold,定義一個較低的threshold會導致探測到一個real creash時間短,但是其正確性不高;定義一個較高的 threshold會導致特測到real crash的時間長,但是其正確性高。

舉例。在一個分佈式系統中,有一個master server和多個worker server, master server需要把很多job分發到worker server上。很顯然,master server需要探測worker server的狀態。利用accrual failuer detector,當某個worker server的置信度達到low threshold時,master server不向此worker server派發新的job;當置信度達到moderate threshold時,master server會把在此woker server上的job派發到其它的worker server;當置信度達到high threshold,master server會把釋放關於此worker server的通信資源(比如關閉socket)。

 

failure detector基本概念

■基本概念之一:Unreliable failure detectors

failure detectors是不可靠的,原因是crash server很難與 slow server區分。

性質1: There is a time after which every process that crashes is permanently suspected by all correct processes.

性質2:There is a time after which correct processes are not suspected by any correct process.

 

■基本概念之二:Quality of service of failure detectors

       定義1 (Detection time TD):The detection time is the time that elapses since the crash of p and until q begins to suspect p permanently.

       定義2 (Average mistake rate _M): This measures the rate at which a failure detector generates wrong suspicions.

■基本概念之三:Heartbeat failure detectors

    Q監控P,P會定期的向Q發送心跳,發送心跳的間隔記爲△i。Q在△to時間內沒有收到新的心跳,則認爲P已經crash。△tr定義爲消息在網路上傳輸的時延。

    第一個方案,把△to設定爲一個固定的值。缺點:當△to設置的過低時,crash很快會被檢測到,但是結果的正確性不高。反之,crash被檢測到時間長,但正確性高。

    第二個方案,根據心跳的網絡時延△tr 和 心跳發送間隔△i 來確定△to。缺點:需要依賴△i,因爲the regularity of the sending of heartbeats cannot be ensured and a short interval makes the timing inaccuracies due to operating system scheduling take more importance。[s1] 

■基本概念之四:Adaptive failure detectors

       隨着網絡狀況不斷的變化,adaptive failuer detector也會不斷地調整。

A Chen-FD。 根據最近一段時間收到心跳的間隔來預測收到下個心跳的時間。作者提供了2個版本的協議:基於同步時鐘和基於異步始終的。

B Bertier-FD。基本算法與上同,不同的是在Chen的算法的基礎上增加了round-trip time 的考慮。測試表明:Bertier-FD 算法比 Chen-FD算法 更快的檢測到crash,但是其正確性降低了。

C 如何確定心跳發送間隔△i[s2] 。從常識來看,△i應該由應用自己的需求來確定。但是,M¨uller認爲應該由下層的系統(網絡,OS)來確定,如果△i遠遠小於△tr,故障特測時間由△tr確定,減小△i不會減少故障特測時間,相反還會增加網絡擁塞,從而增加△tr,進而增加故障探測時間;如果△i遠遠大於△tr,故障特測時間由△i確定,增加△i會增大故障特測時間,且不會明顯的減少網絡負載。所以△i應該與平均△tr相當。

accrual failure detector原理

    server q 探測 p。輸出值由如下函數表示,(suspiction level of p)

此函數必須滿足如下條件

    條件3:如果p已經crash,值隨着t趨近與無窮大。

    條件4:如果p已經crash,存在一個時間段,此時間段後,其值是單調遞增的。

    條件5:如果p是alive,值有一個上限(upper bound)。

    條件5:如果p是alive,存在一個時間段,此時間段後,其值爲0。

accrual failure detector實現

       設計一個隊列,存儲收到心跳的間隔,隊列的大小是一個固定值(稱爲window size),當收到新的心跳後,計算時間間隔並寫入隊列,刪除隊首的元素。μ表示隊列中的時間間隔的平均值,σ表示標準差。


cassandra 中的故障探測

cassandara使用的此論文中的方法來進行故障探測。在cassandra中,windows size設置爲1000, threshold設爲8,當φ值大於8時,則認爲此節點crash。不過,計算φ值的算法有所改進:

Plater(t) = e-t/μ

       其代碼參見FailureDetector.java 中的ArrivalWindow. phi()。

chubby中的故障探測

待研究。。。

 

發佈了28 篇原創文章 · 獲贊 1 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章