paxos是一種基於訊息傳遞的分布式一致性演算法,由leslie lamport(萊斯利·蘭伯特)於1990提出。是目前公認的解決分布式一致性問題的最有效演算法之一。
paxos協議是乙個解決分布式系統中,多個節點之間就某個值(提案)達成一致(決議)的通訊協議。它能夠處理在少數節點離線的情況下,剩餘的多數節點仍然能達成一致。
proposal:為了就某乙個值達成一致而發起的提案,包括提案編號和提案的值。
涉及角色如下:
proposer:提案發起者,為了就某乙個值達成一致,proposer可以以任意速度、發起任意數量的提案,可以停止或重啟。
acceptor:提案批准者,負責處理接收到的提案,響應、作出承諾、或批准提案。
learner:提案學習者,可以從acceptor處獲取已被批准的提案。
paxos需要遵循如下約定:
乙個acceptor必須批准它收到的第乙個提案。
如果編號為n的提案被批准了,那麼所有編號大於n的提案,其值必須與編號為n的提案的值相同。
paxos 協議是乙個兩階段協議,分為prepare 階段 和 accept階段。
proposer 傳送 prepare
proposer
生成乙個全域性唯一且遞增的提案id,向acceptor
傳送請求,只攜帶提案id即可。
acceptor 應答 prepare
acceptor
接收到提案請求後,如下情況會收到應答
proposer 傳送 accept
如果proposer收到半數以上acceptor對其發出的編號為n的prepare請求的響應,那麼它就會傳送乙個針對[n,v]提案的accept請求給半數以上的acceptor。注意:v就是收到的響應中編號最大的提案的value,如果響應中不包含任何提案,那麼v就由proposer自己決定。
acceptor 應答 accept
如果acceptor收到乙個針對編號為n的提案的accept請求,只要該acceptor沒有對編號大於n的prepare請求做出過響應,它就接受該提案。
一旦acceptor批准了某個提案,即將該提案發給所有的learner。為了避免大量通訊,acceptor也可以將批准的提案,發給主learner,由主learner分發給其他learner。考慮到主learner單點問題,也可以考慮acceptor將批准的提案,發給主learner組,由主learner組分發給其他learner。
如果proposer1提出編號為n1的提案,並完成了階段一。與此同時proposer2提出了編號為n2的提案,n2>n1,同樣也完成了階段一。於是acceptor承諾不再批准編號小於n2的提案,當proposer1進入階段二時,將會被忽略。同理,此時,proposer1可以提出編號為n3的提案,n3>n2,又會導致proposer2的編號為n2的提案進入階段二時被忽略。以此類推,將進入死迴圈。
解決辦法:
可以選擇乙個proposer作為主proposer,並約定只有主proposer才可以提出提案。因此,只要主proposer可以與過半的acceptor保持通訊,那麼但凡主proposer提出的編號更高的提案,均會被批准。
分布式一致性演算法之Paxos
paxos的重要概念 提案 proposal proposal訊息包括提案編號 proposal id 和提案的值 最終一致值value paxos演算法角色 client 客戶端,主要是向分布式系統發出請求,並等待響應。例如 對分布式檔案伺服器中檔案的寫請求 proposer 提案發起者,提倡客戶...
強一致性 弱一致性 最終一致性
這種方式在es等分布式系統中也有體現,可以設定主shard提交即返回成功,或者需要replica shard提交成功再返回。提到分布式架構就一定繞不開 一致性 問題,而 一致性 其實又包含了資料一致性和事務一致性兩種情況,本文主要討論資料一致性 事務一致性指acid 複製是導致出現資料一致性問題的唯...
一致性hash演算法 面試必備 一致性hash演算法
最近公司在招人,我們準備的問題中有一道是關於一致性hash演算法的問題,只有一些面試者能夠回答上來,而且答的也不是很全面,有的面試者只是聽說過,有的連聽都沒聽過,下面我把一致性hash演算法整理一下分享給大家 一致性雜湊演算法在1997年由麻省理工學院的karger等人在解決分布式cache中提出的...