**首先我們來回顧一下multi paxos,multi paxos在basic paxos的基礎上確定一系列值,其決議過程如下:
multi paxos中leader用於避免活鎖,但leader的存在會帶來其他問題,一是如何選舉和保持唯一leader(雖然無leader或多leader不影響一致性,但影響決議程序progress),二是充當leader的節點會承擔更多壓力,如何均衡節點的負載。mencius[1]提出節點輪流擔任leader,以達到均衡負載的目的;租約(lease)可以幫助實現唯一leader,但leader故障情況下可導致服務短期不可用。
在multi paxos中,proposer -> leader -> acceptor -> learner,從提議到完成決議共經過3次通訊,能不能減少通訊步驟?
對multi paxos phase2a,如果可以自由提議value,則可以讓proposer直接發起提議、leader退出通訊過程,變為proposer -> acceptor -> learner,這就是fast paxos[2]的由來。
multi paxos裡提議都由leader提出,因而不存在一次決議出現多個value,fast paxos裡由proposer直接提議,一次決議裡可能有多個proposer提議、出現多個value,即出現提議衝突(collision)。leader起到初始化決議程序(progress)和解決衝突的作用,當衝突發生時leader重新參與決議過程、回退到3次通訊步驟。
paxos自身隱含的乙個特性也可以達到減少通訊步驟的目標,如果acceptor上一次確定(chosen)的提議來自proposera,則當次決議proposera可以直接提議減少一次通訊步驟。如果想實現這樣的效果,需要在proposer、acceptor記錄上一次決議確定(chosen)的歷史,用以在提議前知道哪個proposer的提議上一次被確定、當次決議能不能節省一次通訊步驟。
除了從減少通訊步驟的角度提高paxos決議效率外,還有其他方面可以降低paxos決議時延,比如generalized paxos[3]提出不衝突的提議(例如對不同key的寫請求)可以同時決議、以降低paxos時延。
更進一步地,epaxos[4](egalitarian paxos)提出一種既支援不衝突提議同時提交降低時延、還均衡各節點負載、同時將通訊步驟減少到最少的paxos優化方法。
為達到這些目標,epaxos的實現有幾個要點。一是epaxos中沒有全域性的leader,而是每一次提議發起提議的proposer作為當次提議的leader(command leader);二是不相互影響(interfere)的提議可以同時提交;三是跳過prepare,直接進入accept階段。epaxos決議的過程如下:
左側展示了互不影響的兩個update請求的決議過程,右側展示了相互影響的兩個update請求的決議。multi paxos、mencius、epaxos時延和吞吐量對比:
為判斷決議是否相互影響,實現epaxos得記錄決議之間的依賴關係。
以上介紹了幾個基於paxos的變種,mencius中節點輪流做leader、均衡節點負載,fast paxos減少一次通訊步驟,generalized paxos允許互不影響的決議同時進行,epaxos無全域性leader、各節點平等分擔負載。
分布式系統理論高階 Paxos變種和優化
有很多基於paxos的優化,在保證一致性協議正確 safety 的前提下,減少paxos決議通訊步驟 避免單點故障 實現節點負載均衡,從而降低時延 增加吞吐量 提公升可用性,下面我們就來了解這些paxos變種。multi paxos 首先我們來回顧一下multi paxos,multi paxos在...
分布式系統理論高階 Paxos變種和優化
有很多基於paxos的優化,在保證一致性協議正確 safety 的前提下,減少paxos決議通訊步驟 避免單點故障 實現節點負載均衡,從而降低時延 增加吞吐量 提公升可用性,下面我們就來了解這些paxos變種。首先我們來回顧一下multi paxos,multi paxos在basic paxos的...
分布式系統 Paxos演算法
paxos演算法解決的問題正是分布式一致性問題,即乙個分布式系統中的各個程序如何就某個值 決議 達成一致。paxos演算法執行在允許宕機故障的非同步系統中,不要求可靠的訊息傳遞,可容忍訊息丟失 延遲 亂序以及重複。它利用大多數 majority 機制保證了2f 1的容錯能力,即2f 1個節點的系統最...