同步非同步中的一致性

2022-07-03 14:00:20 字數 1497 閱讀 5705

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

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

要求滿足如下幾個性質:

程序可發生各種型別的錯誤,錯誤可以大致分為:

byzantine generals problem 由lamport 2023年提出,考慮通道安全,但是出錯節點傳送的資訊任意。在區塊鏈中,考慮此類別的問題是必要的。

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

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

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

同步系統中的共識問題已被證明可以實現,訊息可以分為「口頭的」和「正式的」,即訊息是否經過簽名。lamport討論了3個程序相互傳送未簽名訊息,若有乙個程序出現bft故障,則無法達成共識,並延伸到了n≤3f的情況。pease等人證明了n≤3f下bft共識的不可能性(證明未細看),並提出了在n>3f+1時的解決方案。

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

fischer、lynch證明,如果允許bft故障,則任何確定性的解決共識問題的演算法至少需要f+1輪訊息傳遞(證明未看)。

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

非同步情況下的不可能性(flp impossibility):即使只有乙個程序發生崩潰故障,也沒有演算法可以保證達到共識。由於非同步系統中,沒有辦法分辨乙個程序是速度很慢還是已經崩潰,即不能探測失敗。(證明過程未細看):在任何演算法之上,都能構造出這樣一些永遠都不確定的configuration。有三個引理:連通性、

初始configuration不確定性、不可終止

性(不確定configuration經過一些步驟後依然可能是不確定的),通過連通性來證明不可終止性。

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

參考:distributed systems concepts and design -fifth edition

強一致性 弱一致性 最終一致性

這種方式在es等分布式系統中也有體現,可以設定主shard提交即返回成功,或者需要replica shard提交成功再返回。提到分布式架構就一定繞不開 一致性 問題,而 一致性 其實又包含了資料一致性和事務一致性兩種情況,本文主要討論資料一致性 事務一致性指acid 複製是導致出現資料一致性問題的唯...

保證一致性嗎 Kafka的一致性保證

魚和熊掌不可兼得。系統設計需要根據具體的應用場景做出權衡。系統設計者可以通過配置kafka,來得到不同程度的需求滿足。每個kafka主題 topic 都分為多個分割槽 partitions 每個分割槽可以具有多個副本 replica 其中乙個副本是主分割槽 leader 所有讀寫請求都由主分割槽提供...

一致性雜湊

直接貼出一篇介紹的很清楚的博文。關鍵字一致性雜湊 平衡性,單調性,分散性,負載 其實說白了,就是解決把請求分散到不同的機器上運算,怎麼做分散的平均,機器少一台多一台,或者壞掉一台,成很好的自適應和拓展。最簡單的實現分布式演算法,取模嘛,但是它就上述的一些問題,所以不算好的雜湊函式。一致性雜湊演算法,...