參考書籍:《從paxos到zookeeper-分布式一致性原理與實踐》
這兩天在看paxos演算法,看到很多版本的理解和比喻,今天看教程終於感覺看懂了一點,於是打算自己描述一下試試.
然而發現後面看不懂.....t^t 總之先發出來,有好心人一起交流下。
背景: 某公司組織團建活動,有3個備選去處,需要挑選出乙個,上報給公司管理部門申請團建流程。
目的地:香港、東京、新加坡
決策人(acceptor):李總、張總、楊總
投票人(proposer):員工1,員工2,員工3.......員工n(這裡的1,2,3等數字不代表投票順序)
以上是基礎規則,然而這個規則會遇到很多問題,需要逐一補充完善;首先
[問題一]
如果所有人都選了同乙個地方,但該地方又被3位決策人駁回,會導致這輪投票選不出團建地點
比如,李總不想去東京;這時他收到了來自員工1的提案[東京];於是駁回了員工1,等待有人發給他[香港]或[新加坡]。結果所有員工發給李總的都是東京,於是李總駁回了所有人的提案,啥也沒批准。張總,楊總也是一樣。
於是場面就十分尷尬了。。。。由於3位領導都不喜歡東京,所以都沒有批准東京,但所有人都只投了東京,沒有其它提案,導致本輪啥也沒選出來。
[解決方法]
規則補充:決策人必須同意自己收到的第乙個提案
這樣,即使李總,張總,楊總都不喜歡東京,但由於收到的第乙個提案是東京(不管來自哪位員工),東京會被批准;
而後續也沒有再收到任何其它地點,所以最終會批准東京。
這就保證了哪怕只有乙個提案被提出,也仍然可以選出乙個。
[問題二]
3個人都批准了不一樣的地點,等於啥也沒選定
如:
張總:東京
李總:香港
楊總:新加坡
[問題三]
即使某個地點被差不多一半的人選中了,但有乙個決策人故障,就會導致選不出
如:
張總:東京
李總:東京
楊總:新加坡
但周一李總沒來上班,也聯絡不上,導致張總批准東京,楊總批准新加坡;還是等於啥都沒選定
【解決方法】:
規則:允許乙個決策人批准多個提案,比如
張總:東京,香港
李總:東京,新加坡
楊總:東京,新加坡
那麼即使周一聯絡不上李總,東京仍然以2票獲勝成為團建地點(李總失聯,東京:香港:新加坡 = 2:1:1)。
但此時又引發了乙個新問題
【問題四】
又回到了可能發生多個提案被選定的情況;由於決策人可以批准多個提案;如果批准狀況如下:
張總:東京,香港
李總:東京,新加坡,香港
楊總:東京,新加坡,香港
會導致【東京】和【香港】都被選定為團建地點
【解決方法】
此處我們要引入乙個【全域性唯一編號】,來標識每乙個被決策人批准的提案;【編號,地點(值)】
【全域性唯一】的意思是指,用來表示id的數字只會出現一次,而且是全序遞增的。
增加規則:雖然允許多個提案被選定,但同時也必須保證所有被選定的提案都有相同的值;注意此處的提案不等同於地點了,而是【編號,地點(值)】共同表示乙個提案
即:
如果編號為m0,value為v0的提案被選定【m0,v0】,那麼所有m0編號更高的,且被選定的提案,其value值也必須是v0。
例如:張總:【1,東京】,【2,香港】
李總:【3,東京】,【4,新加坡】,【7,香港】
楊總:【5,東京】,【6,香港】
此時【東京】被選定,那麼
我就不知道上面這句要怎麼解釋了!!!
paxos演算法之粗淺理解
paxos出身 paxos出身名門,它爹是沒多久前獲得圖靈獎的在分布式領域大名鼎鼎的leslie lamport。paxos為何而生 那麼lamport 他老人家為什麼要搞這個東東呢 不是吃飽了撐的,而是為了解決分布式系統的大難題。分布式系統一 般要求具有高可用性,高可用性一般又是通過冗餘也就是多副...
分布式系統之Paxos變種和優化
首先我們來回顧一下multi paxos,multi paxos在basic paxos的基礎上確定一系列值,其決議過程如下 multi paxos中leader用於避免活鎖,但leader的存在會帶來其他問題,一是如何選舉和保持唯一leader 雖然無leader或多leader不影響一致性,但影...
分布式一致性演算法之Paxos
paxos的重要概念 提案 proposal proposal訊息包括提案編號 proposal id 和提案的值 最終一致值value paxos演算法角色 client 客戶端,主要是向分布式系統發出請求,並等待響應。例如 對分布式檔案伺服器中檔案的寫請求 proposer 提案發起者,提倡客戶...