《從paxos到zookeeper分布式一致性原理與實踐》書中,滿足p2b的條件,即滿足p2a;滿足p2a的條件,即滿足p2,這樣的過程,比較好理解,本文就不再贅述了,主要來分析一下,滿足p2c為什麼就可以滿足p2b?
首先,我們要明確幾個前提:
我們看一下p2c的條件:
存在乙個由超過半數的acceptor組成的集合s:
(1)假設mn提案在提出的時候,滿足第乙個條件,那麼這樣的乙個acceptor集合分兩種情況:
第一種情況:假設acceptor集合沒有批准過任何提案,那麼此時一定沒有提案被選定。
我們可以用【反證法】來證明:假設此時有提案mb被選定,那麼必定存在乙個超過半數的acceptor集合批准了提案mb,那麼任意乙個超過半數的集合一定包含某些acceptor批准過提案mb,與條件矛盾。 如果沒有提案被選定,那麼mn提案中vn的值可以自由選定。
第二種情況:acceptor集合中存在acceptor批准過ma(a > n)提案。此時也存在兩種可能,
a:沒有提案被選定,那麼vn可以自由選定。
b:提案ma(a > n)被選定,那麼後續無論vn的值是多少,mn提案一定不會被選定。因為mn提案被批准的數量一定不超過半數,因為有超過半數acceptor集合批准了ma(a > n)提案,不能再批准mn。
總上,如果滿足第乙個條件,存在超過半數的acceptor集合中,沒有acceptor批准過小於mn的任何提案,mn提案的value值是多少都可以。
(2)假設mn提案在提出的時候,滿足第二個條件。此時也存在兩種可能,一:當前沒有提案被選定,那麼vn的值可以自定義,按照第二個條件選擇vn的值是可以的,但是為什麼?取決於第二種情況,存在乙個編號小於mn的提案已經被選定了。但是此時mn並不知道哪乙個提案被選定,按照p2b的要求,此時mn提案中的vn的值要和選定的提案值是一致的。
按照條件,只要保證此時vn的值取accpetor中批准過所有編號小於mn的提案中,編號最大的提案的value值,就可以。為什麼?
我們可以通過【第二數學歸納法】證明,假設此時有某乙個提案mc(書中使用m0,我覺得會讓人以為是第乙個提案)被選定了,假設比該提案編號大的提案為mn,
當mn = mc + 1,也就是mn是在mc提案選定後的第乙個提案,mn提案選定的任意乙個超過半數以上的acceptor集合比然包含mc,那麼mc編號是最大的,mn的value值就可以和mc保持一致。初始條件成立。
假設編號在mc + 1到mn -1 區間內的所有提案的value值都是vc,證明mn也成立。mn在選定乙個任意的超過半數的acceptor集合時,這個集合中假設存在mc + 1 到 mn -1的提案,那麼mn的天必定也是vc。如果不存在mc + 1 到 mn -1的提案,但是至少存在乙個選定的提案mc,mc是最大的,所以mn的value也只能是vc。
當mn被選定,假設有通訊延時的編號小於mc的提案傳送給acceptor,這些提案也不會被選定。
總上,第二種情況只要選擇acceptor集合編號最大提案的value值作為vn即可。
P2P路由演算法
p2p路由演算法 資源定位方法 dht distributed hash table 演算法 思想 每乙份資源都由一組關鍵字標示,系統對其中的每乙個關鍵字進行hash,根據hash的結果確定該關鍵字由哪個使用者負責儲存,使用者搜尋的同時,用同樣的演算法計算每乙個字的hash,再根據hash知道該關鍵...
P2談談演算法
1.談談演算法 資料結構與演算法的關係 好 一輩子 學習資料結構最好同時學習演算法,這樣效果最好,不然會難以理解資料結構 2.演算法初體驗 了解1 2 3 99 100的演算法,高斯先生.3.什麼是演算法 官方語言 演算法是解決特定問題求解步驟的描述,在計算機中表現為指令的有限序列,並且每條指令表示...
C 演算法總結 2
c 演算法在普通鍊錶中的應用也是非常多的,現在我將常見的鍊錶操作演算法總結下,示例如下 1.刪除鍊錶中指定值為value的所有值 void deletefromlist node phead,int value else 2.在鍊錶index位置插入新的值value void insertfroml...