1. 程式人生 > >zookeeper學習筆記(3)

zookeeper學習筆記(3)

Paxos是一種提高分散式容錯性的一致性演算法,google chubby系統的建立者Mike Burrows就說過,世界上只有一種分散式一致性協議,就是Paxos,其他不過是Paxos的變種而已。

首先要了解,Paxos中有三個角色

  1. Proposer:提議發起者。Proposer 可以有多個,Proposer 提出議案(value)。所謂 value,可以是任何操作,比如“設定某個變數的值為value”。不同的 Proposer 可以提出不同的 value,例如某個Proposer 提議“將變數 X 設定為 1”,另一個 Proposer 提議“將變數 X 設定為 2”,但對同一輪 Paxos過程,最多隻有一個 value 被批准。
  2. Acceptor:提議接受者;Acceptor 有 N 個,Proposer 提出的 value 必須獲得超過半數(N/2+1)的 Acceptor批准後才能通過。Acceptor 之間完全對等獨立。
  3. Learner:提議學習者。上面提到只要超過半數accpetor通過即可獲得通過,那麼learner角色的目的就是把通過的確定性取值同步給其他未確定的Acceptor。

Paxos究竟在解決什麼問題?

Paxos主要是用來確定一個不可變變數的取值

  • 取值一旦確定將不可被更改,並可以被獲取到(不可變性、可讀性)

用一句話來說,就是:

proposer將發起提案(value)給所有accpetor,超過半數accpetor獲得批准後,proposer將提案寫入accpetor內,最終所有accpetor獲得一致性的確定性取值,且後續不允許再修改。

Paxos如何在分散式系統中應用?

在分散式系統中,資料本身是可變的,並採用多副本進行儲存。

但是在分散式系統中,如果對多個副本執行更新操作時,因為網路延遲,超時和各種故障等一系列的原因導致各個副本之間的更新操作不一樣 ,這樣就很難保證一致性。Paxos就是用來保證各個副本之間的跟新是相同的。

例子

設計一個系統用來儲存名為Var的變數,系統內部由多個Acceptor組成,負責管理儲存Var變數。

系統需要保證Var的取值滿足一致性,也就是不管在哪個節點上取Var值,得到的都是相同的結果。如果Var沒被確定,就為null,但是Var值一旦被確定,則不能再被更改,並保證能夠一直獲取到這個值。

系統同時能夠有一定的容錯性,可以容忍任意Proposer機器出現故障,也可以容忍半數以下Acceptor故障。

Paxos核心思想