想理解paxos得先知道paxos解決的問題是什麼。paxos解決的是2pc,3pc存在的節點阻塞,腦裂,低容錯性,單點問題。而且還能做到2pc,3pc不能做到的事,master選舉。3pc是主從結構,如果主節點崩潰了,3pc並沒有提供master選舉的演算法。
假設有一系列proposer可以發起關於proposal(比如競選master),乙個共識演算法保證只有乙個值最終被chose(即乙個proposal被多數acceptor通過)。
演算法的safety定義如下:
paxos是分布式系統下的具有容錯性的共識演算法。它的目的是在乙個沒有拜占庭問題的非同步系統中,達成共識,最終chose乙個proposal
這個模型有如下假設:
paoxos是根據safety的三條規則不斷加強約束得到的,特別是第二條。
最簡單的方式就是乙個proposer,acceptor直接通過proposal就ok了,我們假設只有乙個proposal,則可以得到約束p1
p1 :acceptor必須通過第乙個收到的proposal
這樣當然是不行的,存在單點問題。實際上存在一系列proposer和acceptor。併發的情況下不同的proposer如果提出不同的提案,根據p1,這會導致系統無法達成一致。因此我們需要給每個提案加編編不同的號(相當於排序),定義proposal(n,v)。n為編號(標識proposal的順序),v為value,要保證acceptor最終只chose乙個proposal,則必須有以下約束:
p2:如果提案 (n,v)已經被chose,每乙個更高編號的提案必須包含v才能被chose
繼續則可以推出p2a:
p2a:如果提案 (n,v)已經被chose,每乙個更高編號的提案必須包含v才會被acceptor通過
我們如何能夠維持p2a了,於是有了更強的約束
p2b:如果提案 (n,v)已經被chose, 每個發起的更高編號的提案必須包含v
p2b -> p2a -> p2
如何能過實現p2b呢,可以使用乙個更強的約束p2c
p2c: 對於所有n,v,如果乙個提案(n,v)被發起,必然存在乙個有大多數 acceptor組成的集合滿足以下兩個條件之一:
(a) s中沒有任何acceptor通過編號小於n的提案
(b) v 是所有acceptor都通過的編號小於n的最大編號的提案的值
取編號小於n的最大編號的提案的值是乙個很巧妙的技巧,可以使得兩個分割槽恢復之後丟棄舊值達成一致。
階段2:
這裡其實存在乙個很小概率的無限迴圈:假設兩個proposer p1 , p2分別提案, 提案編號分別是n1,n2,且n1 < n2, 假設p1和p2都進入了階段2, 則p1在階段2發起的請求不會被通過。n1繼續增加提案編號n3, n3 > n2, 如何n3很快進入階段2,則p2階段2又不會通過。
為了避免這個小概率事件,實際上都會先選舉乙個proposer類似於master。定時檢測住proposer是否掛了,掛了的話重新選舉。像google的chubby,zookeeper(基於zab協議,和paxos類似)都是這樣。
paxos vs 3pc:
3pc協調者需要所有的參與者事物都執行成功,只要有乙個參與者不成功就回滾。和3pc相比,paxos執行事物的時候只需要大多數執行成功就行了,這樣是可以保證最終一致性的,而且效能高了太多,不需要所有參與者都阻塞在那。
paxos的fault tolerant體現在:
paxos vs raft
paxos只是提了乙個理論,但是這個理論抽象度太高,而且沒有說明具體的使用場景以及最佳實踐,所以不同的使用到的地方都不一樣,比如chubby,zookeeper,最終實現都不一樣。實現一致性演算法的系統。 chubby 和 spanner 的演算法並沒有公開發表其技術細節,儘管他們都聲稱是基於 paxos 的。zookeeper 的演算法細節已經發表,但是和 paxos 有著很大的差別。paxos不易理解而且對於如何使用paxos構建系統沒有理論指導。因此出現了raft。看raft之前,我自己想怎麼構建乙個分布式系統的時候也是覺得先選乙個leader比較好。raft將分布式系統的各個組成部分結構,詳細的說每一步的協議。非常清晰,看完raft**感覺自己都能上手寫乙個簡單的分布式系統了。而paxos看完之後感覺很難運用。
Paxos協議筆記
對paxos協議的介紹,可以通過leslie lamport的 paxos made 展開學習和了解。paxos演算法在允許失敗的分布式系統環境下,實現系統一致性。失敗的情況有很多,譬如由於網路問題導致的通訊資料丟失,參與paxos演算法的機器宕機等情況。paxos演算法將分布式系統一致性問題進行抽...
Paxos演算法 Zookeeper使用協議
paxos演算法是分布式選舉演算法,zookeeper使用的 zab協議 zookeeper原子廣播 二者有相同的地方,比如都有乙個leader,用來協調n個follower的執行 leader要等待超半數的follower做出正確反饋之後才進行提案 二者都有乙個值來代表leader的週期。不同的地...
paxos演算法學習
paxos演算法可以說是大名鼎鼎,一方面是因為它是乙個很優秀的分布式一致性演算法,另一方面也是由於它的晦澀難懂。今天看到了乙個部落格 paxos演算法原理與推導 深入淺出的講了一下這個演算法,感覺收穫很大,於是藉此平台寫一下自己對該演算法的理解,同時也希望能夠通過自己寫的過程加深對這個演算法的理解。...