Paxos and Raft ABC

Paxos

Paxos是全部分佈式環境中關於某個值達成一致的協議,Paxos 一個節點同時包括提議者和接受者。顧名思義:提議者是發起投票;接受者接受投票請求,根據投票請求和自身狀態進行響應的回覆。爲了防止異常丟狀態,Paxos在內部持久化三個參數:當前已接受的提案號;當前達成共識的value的值;當前最小的提案號。按照兩階段模式進行操做:分佈式

階段一:Prepare(n) 請求 阻塞新來的老的提案
爲何能夠這樣?由於 分佈式日誌進來的時候,Acceptor 會把日誌裏帶的請求裏的提案號n和本身的最小提案號進行比較。若是前者大,會更新本身的最小的提案號,向提案者響應贊成請求。
這樣就保證了提案號小的IO請求永遠不會獲得Acceptor的響應,因爲Propasl 的提案號都是遞增的,保證了前者服從後者的原則。ide

提案者接受到了上面的請求以後,若是贊成的數量達成了多數,接着廣播Accept(n,val) 到全部Acceptor.日誌

階段二:Accept(n,val)
Acceptor 在這個階段,會把本身的最小提案號和請求中的提案號n 比較一次。原則同上面階段一,贊成以後:除了更新本身的最小提案號爲n以外,還用n 更新本身的已接受提案號,向提議者返回本身當前的最小的提案號。若是不一樣意,也向提議者返回本身當前的最小的提案號,拒絕請求。it

若是提案者收到任何關於Accept(n,val)的拒絕響應,就須要從新發起投票(可能會更新本身的提案號)。 不然,表示val 廣播到分佈式系統中去,而且被你們接受。class

相關文章
相關標籤/搜索