Paxos and Raft ABC

Paxos

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

階段一:Prepare(n) 請求 阻塞新來的老的提案
爲什麼可以這樣?因爲 分佈式日誌進來的時候,Acceptor 會把日誌裏帶的請求裏的提案號n和自己的最小提案號進行比較。如果前者大,會更新自己的最小的提案號,向提案者響應同意請求。
這樣就保證了提案號小的IO請求永遠不會得到Acceptor的響應,由於Propasl 的提案號都是遞增的,保證了前者服從後者的原則。

提案者接受到了上面的請求之後,如果同意的數量達成了多數,接着廣播Accept(n,val) 到所有Acceptor.

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

如果提案者收到任何關於Accept(n,val)的拒絕響應,就需要重新發起投票(可能會更新自己的提案號)。 否則,表示val 廣播到分佈式系統中去,並且被大家接受。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章