分布式理論基礎(一)一致性及解決一致性的兩種方式:2pc和3pc 中介紹了一致性,paxos協議在節點宕機恢復、訊息無序或丟失、網路分化的場景下能保證決議的一致性,是被討論最廣泛的一致性協議。
作為解決一致性問題的協議,paxos的核心是節點間如何確定並只確定乙個值(value)。在paxos協議裡確定並只確定乙個值是確定多值的基礎,如何確定多值將在第二部分multi paxos中介紹,這部分我們聚焦在「paxos如何確定並只確定乙個值」這一問題上。
先舉乙個例子:
分布式理論之一:paxos演算法的通俗理解
和2pc類似,paxos先把節點分成兩類,發起提議(proposal)的一方為proposer,參與決議的一方為acceptor。假如只有乙個proposer發起提議,並且節點不宕機、訊息不丟包,那麼acceptor做到以下這點就可以確定乙個值:
p1. 乙個acceptor接受它收到的第一項提議我們嘗試放寬條件,假設多個proposer可以同時發起提議,又怎樣才能做到確定並只確定乙個值呢?
首先proposer和acceptor需要滿足以下兩個條件:
注: 注意以上「接受」和「確定」的區別
我們約定後面發起的提議的id比前面提議的id大,並假設可以有多項提議被確定,為做到確定並只確定乙個值acceptor要做到以下這點:
p2. 如果一項值為v的提議被確定,那麼後續只確定值為v的提議由於一項提議被確定(chosen)前必須先被多數派acceptor接受(accepted),為實現p2,實質上acceptor需要做到:
p2a. 如果一項值為v的提議被確定,那麼acceptor後續只接受值為v的提議滿足p2a則p2成立 (p2a => p2)。
目前在多個proposer可以同時發起提議的情況下,滿足p1、p2a即能做到確定並只確定乙個值。如果再加上節點宕機恢復、訊息丟包的考量呢?
假設acceptor c 宕機一段時間後恢復,c 宕機期間其他acceptor已經確定了一項值為v的決議但c 因為宕機並不知曉;c 恢復後如果有proposer馬上發起一項值不是v的提議,由於條件p1,c 會接受該提議,這與p2a矛盾。為了避免這樣的情況出現,進一步地我們對proposer作約束:
p2b. 如果一項值為v的提議被確定,那麼proposer後續只發起值為v的提議滿足p2b則p2a成立 (p2b => p2a => p2)。
p2b約束的是提議被確定(chosen)後proposer的行為,我們更關心提議被確定前proposer應該怎麼做:
p2c. 對於提議(n,v),acceptor的多數派s中,如果存在acceptor最近一次(即id值最大)接受的提議的值為v',那麼要求v = v';否則v可為任意值滿足p2c則p2b成立 (p2c => p2b => p2a => p2)。
條件p2c是basic paxos的核心, 我們通過例子加深理解:
以上提到的各項約束條件可以歸納為3點,如果proposer/acceptor滿足下面3點,那麼在少數節點宕機、網路分化隔離的情況下,在「確定並只確定乙個值」這件事情上可以保證一致性(consistency):
注: 希臘字母ß表示多輪決議的集合,字母b表示一輪決議
另外為保證p2c,我們對acceptor作兩個要求:
至此,proposer/acceptor完成一輪決議可歸納為prepare和accept兩個階段。prepare階段proposer發起提議問詢提議值、acceptor回應問詢並進行promise;accept階段完成決議,圖示如下:
還有乙個問題需要考量,假如proposer a發起id為n的提議,在提議未完成前proposer b又發起id為n+1的提議,在n+1提議未完成前proposer c又發起id為n+2的提議…… 如此acceptor不能完成決議、形成活鎖(livelock),雖然這不影響一致性,但我們一般不想讓這樣的情況發生。解決的方法是從proposer中選出乙個leader,提議統一由leader發起。
最後我們再引入乙個新的角色:learner,learner依附於acceptor,用於習得已確定的決議。以上決議過程都只要求acceptor多數派參與,而我們希望盡量所有acceptor的狀態一致。如果部分acceptor因宕機等原因未知曉已確定決議,宕機恢復後可經本機learner採用pull的方式從其他acceptor習得。
分布式選舉演算法Paxos
什麼是paxos演算法?paxos演算法是分布式計算領域中乙個非常重要的演算法,主要解決分布式系統如何就某個值 決議 達成一致的問題。乙個典型的場景是分布式資料庫的一致問題 如果分布式資料庫的各個節點初始狀態一致,又能執行相同的操作序列,那麼最後能達到乙個一致的狀態。但是如何保證在每個節點上執行相同...
分布式系統 Paxos演算法
paxos演算法解決的問題正是分布式一致性問題,即乙個分布式系統中的各個程序如何就某個值 決議 達成一致。paxos演算法執行在允許宕機故障的非同步系統中,不要求可靠的訊息傳遞,可容忍訊息丟失 延遲 亂序以及重複。它利用大多數 majority 機制保證了2f 1的容錯能力,即2f 1個節點的系統最...
分布式理論 分布式事務
資料庫事務 事務的基本特性 事務有4個非常重要的特性,即我們常說的 acid atomicity 原子性 是說事務是乙個不可分割的整體,所有操作要麼全做,要麼全不做 只要事務中有乙個操作出錯,回滾到事務開始前的狀態的話,那麼之前已經執行的所有操作都是無效的,都應該回滾到開始前的狀態。consiste...