DDBS Paxos

Paxos 有點類似我們之前說的 2PC,3PC,但是解決了他們倆的各種硬傷。該算法在很多大廠都得到了工程實踐,比如阿里的 OceanBase 的分佈式數據庫,底層就是使用的 paxos 算法。再比如 Google 的 chubby 分佈式鎖也是用的這個算法。可見該算法在分佈式系統中的地位,甚至於,paxos 就是分佈式一致性的代名詞。

Paxos 角色

在paxos算法中,分爲4種角色:

  • Proposer :信使
  • Acceptor:決策者
  • Client:產生議題者
  • Learner:最終決策學習者

不過爲了方便理解,我們將Proposer摘取出來作爲算法的主角,其他三者爲配角。

Paxos 舉例說明

在 Paxos 島上,有A1, A2, A3, A4, A5 5位議員,就稅率問題進行決議,決議結果由少數服從多數來決定。
我們假設幾個場景來解釋:

場景 1.

(暫且不考慮信使,即不考慮分佈式網絡問題)
A1 說:稅率應該是 10%。而此時只有他一個人提這個建議。如下圖:


很完美,沒有任何人和他競爭提案,他的這個提案毫無阻撓的通過了。A2 - A5 都會迴應他:我們收到了你的提案,等待最終的批准。而 A1 在收到 2 份回覆後(加上A1自己,表決結果過半),就可以發佈最終的決議:稅率定位 10%,不用再討論了。

場景 2.

現在我們假設在 A1 提出 10% 稅率提案的同時, A5 決定將稅率定爲 20%,如果這個提案要通過侍從送到其他議員的案頭,A1 的草案將由 4 位侍從送到 A2-A5 那裏。但是侍從不靠譜(代表分佈式環境不靠譜),負責 A2 和 A3 的侍從順利送達,而負責 A4 和 A5 的侍從則開溜了!而 A5 的草案則送到了 A4 和 A3 的手中。



現在,A1 ,A2,A3 收到了 A1 的提案,A3,A4, A5 收到 A5 的提案,按照 Paxos 的協議,A1,A2,A4,A5 4個侍從將接受他們的提案,侍從拿着回覆:我已收到你的提案,等待最終批准 回到提案者那裏。

而 A3 的行爲將決定批准哪一個。當 A3 同時收到了 A1 和 A5 的請求,該如何抉擇呢?不同的抉擇將會導致不同的結果。

場景 2. 抉擇1.

假設 A1 的提案先送到 A3 那裏,並且 A3 接受了該提案並回復了侍從。這樣,A1 加上 A2 加上 A3,構成了多數派,成功確定了稅率爲 10%。 而 A5 的侍從由於路上喝酒喝多了,晚到了一天,等他到了,稅率已經確定了(決策已經成型),A3 回覆 A5:兄弟,你來的太晚了,稅率已經定好了,不用折騰了,聽 A1 的吧。

場景 2. 抉擇2.

依然假設 A1 的提案先送到 A3 處,但是這次 A5 的侍從不是放假了,只是中途耽擱了一會。這次, A3 依然會將"接受"回覆給 A1 .但是在決議成型之前它又收到了 A5 的提案。這時協議根據 A5 的身份地位有兩種處理方式。

  1. 當 A5 地位很高,例如 CEO,就回復 A5:我已收到您的提案,等待最終批准,但是您之前有人提出將稅率定爲10%,請明察。
  2. 當 A5 沒地位,普通碼農一個,直接不回覆。等待 A1 廣播:稅率定爲 10% 啦!!

場景 2. 抉擇3.

在這個情況中,我們將看見,根據提案的時間提案者的權勢決定是否應答是有意義的。在這裏,時間和提案者的權勢就構成了給提案編號的依據。這樣的編號符合"任何兩個提案之間構成偏序"的要求。

A1 和 A5 同樣提出上述提案,這時 A1 可以正常聯繫 A2 和 A3,A5 也可以正常聯繫這兩個人。這次 A2 先收到 A1 的提案; A3 則先收到 A5 的提案。而 A5 更有地位。
在這種情況下,已經回答 A1 的 A2 發現有比 A1 更有權勢的 A5 提出了稅率 20% 的新提案,於是回覆A5說:我已收到您的提案,等待最終批准。
而回復 A5 的 A3 發現新的提案者A1是個小人物,沒地位不予應答。
此時,A5 得到了 A2,A3 的回覆,於是 A5 說:稅率定爲 20%,別再討論了。
那 A4 呢? A4 由於睡過頭了(決議已經成型),迷迷糊糊的說:現有的稅率是什麼? 如果沒有決定,則建議將其定爲 15%.
這個時候,其他的議員就告訴他:哥們,已經定爲 20% 了,別折騰了。洗洗繼續睡吧。
整個過程如下圖:


總結

我們可以看到Paxos算法就是少數服從多數,同時,還會根據議員的身份和提案的時間來判斷是否需要應答,這個身份其實就是一個編號,是爲了防止出現活性導致死循環。
Paxos 的目標:保證最終有一個提案會被選定,當提案被選定後,其他議員最終也能獲取到被選定的提案。
Paxos 協議用來解決的問題可以用一句話來簡化: 將所有節點都寫入同一個值,且被寫入後不再更改。

注意:這一切都是在沒有 拜占庭將軍 問題的基礎上建立的,即消息不會被篡改(因爲分佈式大多在局域網中)。

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