同步異步中的一致性

簡述一致性中關於同步與異步環境下的共識理論 (##轉載請註明

  共識問題:可稱作協作,所有正確的進程對提議的值達成一致。分佈式系統中,節點之間通過通信,對請求達成一致的定序。

  問題定義:進程Pi處於未決狀態(undecideed),提議集合D中的某個值Vi。進程之間相互通信,交換各自的提議。每個進程設置自己的決定變量(decision variable),進入決定狀態(decided),此狀態下不改變di的數值。

  要求滿足如下幾個性質:

  • 終止性(Termination):正確的進程最終都可以設置自己的決定變量;
  • 協定性(Agreement):所有正確的進程的決定變量di一致;
  • 完整性(Integrity):正確的進程只能決定一個決定變量,且該執行變量必須來自於某些正確進程的提議。

  進程可發生各種類型的錯誤,錯誤可以大致分爲:

  • 良性錯誤:進程崩潰,節點崩潰,網絡故障;
  • 拜占庭(Byzantine)故障:隨機方式出現故障,例如出現漏洞,被挾持並以任意方式向正確進程/節點發送數據,阻止正確進程達成一致。

  Byzantine Generals Problem 由Lamport 1982年提出,考慮信道安全,但是出錯節點發送的信息任意。在區塊鏈中,考慮此類別的問題是必要的。

  交互一致性問題:共識問題的一個變種,指所有正確的進程對一個值向量(決定向量)達成一致。向量中的分量對應一個進程的值。

  同步與異步:異步與同步通信的最大區別是沒有時鐘、不能時間同步、不能使用超時、不能探測失敗、消息可任意延遲、消息可亂序。同步是指可以在指定的時間內完成消息的傳遞,因此,它存在有消息傳輸的絕對界限,超過這個界限,可以認爲進程已經崩潰,所以,同步下存在有可靠的故障檢測器(reliable failure detector),對進程的詢問,可以回unsuspected或者failed。異步情況下的故障檢測器是不可靠的(unreliable),只可以產生unsuspected和suspected,但是選擇的超時值可以動態改變,可以增加檢測的精度。

  通信健壯:只要進程非失敗,消息雖會被無限延遲,但最終會被送達,並且消息僅會被送達一次(無重複),使用TCP協議有效保證通信的健壯。

  同步系統中的共識問題已被證明可以實現,消息可以分爲“口頭的”和“正式的”,即消息是否經過簽名。Lamport【1982】討論了3個進程相互發送未簽名消息,若有一個進程出現BFT故障,則無法達成共識,並延伸到了N≤3f的情況。Pease等人證明了N≤3f下BFT共識的不可能性(證明未細看),並提出了在N>3f+1時的解決方案。

  進行多少輪通信和發送多少消息(消息的長度)非常重要。通信階段數影響終止的時間,消息的長度影響帶寬的利用率,也影響時間。

  Fischer、Lynch【1982】證明,如果允許BFT故障,則任何確定性的解決共識問題的算法至少需要f+1輪消息傳遞(證明未看)。

  --------------------------------------

  異步情況下的不可能性(FLP Impossibility):即使只有一個進程發生崩潰故障,也沒有算法可以保證達到共識。由於異步系統中,沒有辦法分辨一個進程是速度很慢還是已經崩潰,即不能探測失敗。(證明過程未細看):在任何算法之上,都能構造出這樣一些永遠都不確定的Configuration。有三個引理:連通性、初始Configuration不確定性、不可終止性(不確定Configuration經過一些步驟後依然可能是不確定的),通過連通性來證明不可終止性。

 

  繞過不可能性的三個方法(考慮部分同步系統 partially synchronous system,使共識問題可以被解決 Dwork et al.【1988】):

  • 故障屏蔽:屏蔽進程故障,使進程可以恢復,利用持久存儲保留足夠的信息;
  • 使用故障檢測器:使用“不完美”的故障檢測器,即被懷疑的進程依然可以行動,使用故障檢測器是將異步系統轉化到同步系統;
  • 使用隨機化達成共識:引入一個關於進程行爲的可能性元素,使得敵人不能有效地來實施他們的阻礙戰術。Canetti、Rabin【1993】提出一種概率算法可以解決該問題。

參考:Distributed Systems Concepts and Design -fifth edition

http://blog.csdn.net/chen77716/article/details/27963079

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章