分布式理論(五)—— 一致性算法 Paxos

前言

Paxos 算法如同我們標題大圖:世界上只有一種一致性算法哭靖,就是 Paxos。出自一位 google 大神之口。

同時希坚,Paxos 也是出名的晦澀難懂,推理過程極其復雜陵且。樓主在嘗試理解 Paxos 算法的過程中歷經(jīng)挫折裁僧。

今天,樓主不會講推理過程慕购,因為就算是嘗試使用大白話來講聊疲,也非常的難懂。當然更不會講數(shù)學公式沪悲。

而是從一個普通 Java 程序員的角度來理解 Paxos 算法获洲。

1. 什么是 Paxos 算法

Paxos 算法由圖靈獎獲得者 Leslie Lamport 于 1990 年提出的一種基于消息傳遞且具有高度容錯的特性的一致性算法。

來看看大師的樣貌:

Leslie Lamport(萊斯利·蘭波特)

標準的程序員殿如。贡珊。。涉馁。

Paxos 有點類似我們之前說的 2PC门岔,3PC,但是解決了他們倆的各種硬傷烤送。該算法在很多大廠都得到了工程實踐寒随,比如阿里的 OceanBase 的分布式數(shù)據(jù)庫,底層就是使用的 paxos 算法胯努。再比如 Google 的 chubby 分布式鎖也是用的這個算法牢裳。可見該算法在分布式系統(tǒng)中的地位叶沛,甚至于蒲讯,paxos 就是分布式一致性的代名詞。

2. Paxos 解決了什么問題

那么它解決了什么問題呢灰署?
答:解決了一致性問題判帮。

什么是 consensus (一致性)問題?

在一個分布式系統(tǒng)中溉箕,有一組的 process晦墙,每個 process 都可以提出一個 value,consensus 算法就是用來從這些 values 里選定一個最終 value肴茄。如果沒有 value 被提出來晌畅,那么就沒有 value 被選中;如果有1個 value 被選中寡痰,那么所有的 process 都應該被通知到抗楔。

我們假設一種情況棋凳,在一個集群環(huán)境中,要求所有機器上的狀態(tài)是一致的连躏,其中有2臺機器想修改某個狀態(tài)剩岳,機器 A 想把狀態(tài)改為 A,機器 B 想把狀態(tài)改為 B入热,那么到底聽誰的呢拍棕?

有人說,可以像 2PC勺良,3PC 一樣引入一個協(xié)調(diào)者绰播,誰先到,聽誰的尚困。

但是如果幅垮,協(xié)調(diào)者宕機了呢?

所以需要對協(xié)調(diào)者也做備份尾组,也要做集群。這時候示弓,問題來了讳侨,這么多協(xié)調(diào)者,聽誰的呢奏属?

image.png

Paxos 算法就是為了解決這個問題而生的?缈纭!囱皿! 牛不勇婴?

下面,樓主會嘗試用自己的語言配合圖嘱腥,來解釋使用 Paxos 算法來解決這樣一個類似問題的過程耕渴。如果解釋的不好,還請見諒齿兔。但樓主不會去寫任何的算法推導過程橱脸,如果各位想看,文末有 Paxos 論文鏈接分苇,和很多大牛寫的推導過程添诉。

開始吧!

3. Paxos 例子說明

樓主這個例子來自中文維基百科医寿,但樓主為了形象化栏赴,輔以圖片解釋,但愿不會讓人更迷糊靖秩。

例子:

在 Paxos 島上须眷,有A1, A2, A3, A4, A5 5位議員竖瘾,就稅率問題進行決議。我們假設幾個場景來解釋:

場景 1.

假設 A1 說:稅率應該是 10%柒爸。而此時只有他一個人提這個建議准浴。如下圖:

很完美,沒有任何人和他競爭提案捎稚,他的這個提案毫無阻撓的通過了乐横。A2 - A5 都會回應他:我們收到了你的提案,等待最終的批準今野。而 A1 在收到 2 份回復后葡公,就可以發(fā)布最終的決議:稅率定位 10%,不用再討論了条霜。

這里有個注意的地方就是:為什么收到了 2 份回復就可以確定提案了呢萝嘁?
答:因為包括他自己,就達到 3 個人了链瓦,少數(shù)服從多數(shù)茄螃。
如果各位聽說過鴿籠原理/抽屜原理,就明白個大概了拆内。有人說旋圆,鴿籠原理/抽屜原理就是 Paxos 的核心思想。

場景 2:

現(xiàn)在我們假設在 A1 提出 10% 稅率提案的同時, A5 決定將稅率定為 20%麸恍,如果這個提案要通過侍從送到其他議員的案頭灵巧,A1 的草案將由 4 位侍從送到 A2-A5 那里。但是侍從不靠譜(代表分布式環(huán)境不靠譜)抹沪,負責 A2 和 A3 的侍從順利送達刻肄,而負責 A4 和 A5 的侍從則開溜了!

而 A5 的草案則送到了 A4 和 A3 的手中融欧。

現(xiàn)在敏弃,A1 ,A2蹬癌,A3 收到了 A1 的提案权她,A3,A4逝薪, A5 收到 A5 的提案隅要,按照 Paxos 的協(xié)議,A1董济,A2步清,A4,A5 4個侍從將接受他們的提案,侍從拿著回復:我已收到你的提案廓啊,等待最終批準 回到提案者那里欢搜。

而 A3 的行為將決定批準哪一個。

當 A3 同時收到了 A1 和 A5 的請求谴轮,該如何抉擇呢炒瘟?不同的抉擇將會導致不同的結果。

有 3 種情況第步,我們分析一下:

場景2:情況一

假設 A1 的提案先送到 A3 那里疮装,并且 A3 接受了該提案并回復了侍從。這樣粘都,A1 加上 A2 加上 A3廓推,構成了多數(shù)派,成功確定了稅率為 10%翩隧。 而 A5 的侍從由于路上喝酒喝多了樊展,晚到了一天,等他到了堆生,稅率已經(jīng)確定了专缠,A3 回復 A5:兄弟,你來的太晚了淑仆,稅率已經(jīng)定好了藤肢,不用折騰了,聽 A1 的吧糯景。

如下圖:

場景2:情況二

依然假設 A1 的提案先送到 A3 處,但是這次 A5 的侍從不是放假了省骂,只是中途耽擱了一會蟀淮。這次, A3 依然會將"接受"回復給 A1 .但是在決議成型之前它又收到了 A5 的提案。這時協(xié)議根據(jù) A5 的身份地位有兩種處理方式钞澳,但結果相同怠惶。

  1. 當 A5 地位很高,例如 CEO轧粟,就回復 A5:我已收到您的提案策治,等待最終批準,但是您之前有人提出將稅率定為10%,請明察兰吟。
  2. 當 A5 沒地位通惫,普通碼農(nóng)一個,直接不回復混蔼。等待 A1 廣播:稅率定為 10% 啦B囊浮!!

如下圖:

場景2:情況三

在這個情況中遵湖,我們將看見悔政,根據(jù)提案的時間及提案者的權勢決定是否應答是有意義的。在這里延旧,時間和提案者的權勢就構成了給提案編號的依據(jù)谋国。這樣的編號符合"任何兩個提案之間構成偏序"的要求。

A1 和 A5 同樣提出上述提案迁沫,這時 A1 可以正常聯(lián)系 A2 和 A3芦瘾,A5 也可以正常聯(lián)系這兩個人。這次 A2 先收到 A1 的提案; A3 則先收到 A5 的提案弯洗。而 A5 更有地位旅急。

在這種情況下,已經(jīng)回答 A1 的 A2 發(fā)現(xiàn)有比 A1 更有權勢的 A5 提出了稅率 20% 的新提案牡整,于是回復A5說:我已收到您的提案藐吮,等待最終批準。

而回復 A5 的 A3 發(fā)現(xiàn)新的提案者A1是個小人物逃贝,沒地位不予應答谣辞。

此時,A5 得到了 A2沐扳,A3 的回復泥从,于是 A5 說:稅率定為 20%,別再討論了沪摄。

那 A4 呢躯嫉? A4 由于睡過頭了,迷迷糊糊的說:現(xiàn)有的稅率是什么? 如果沒有決定杨拐,則建議將其定為 15%.

這個時候祈餐,其他的議員就告訴他:哥們,已經(jīng)定為 20% 了哄陶,別折騰了帆阳。洗洗繼續(xù)睡吧

整個過程如下圖:

4. 總結

從上面的例子可以看出:這個 Paxos 協(xié)議/算法 就是少數(shù)服從多數(shù)屋吨,標準的 鴿籠原理/抽屜原理蜒谤,同時,還會根據(jù)議員的身份來判斷是否需要應答至扰,這個身份其實就是一個編號鳍徽,是為了防止出現(xiàn)活性導致死循環(huán)。

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

Paxos 的目標:保證最終有一個提案會被選定,當提案被選定后,其他議員最終也能獲取到被選定的提案胖翰。

Paxos 協(xié)議用來解決的問題可以用一句話來簡化: 將所有節(jié)點都寫入同一個值接剩,且被寫入后不再更改。

引用

如何淺顯易懂地解說 Paxos 的算法萨咳?
圖解 Paxos 一致性協(xié)議
分布式系列文章——Paxos算法原理與推導
Paxos算法 維基百科懊缺,自由的百科全書
Paxos Made Simple【翻譯】
The Part-Time Parliament(Paxos算法中文翻譯)

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市培他,隨后出現(xiàn)的幾起案子鹃两,更是在濱河造成了極大的恐慌,老刑警劉巖舀凛,帶你破解...
    沈念sama閱讀 221,548評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件俊扳,死亡現(xiàn)場離奇詭異,居然都是意外死亡猛遍,警方通過查閱死者的電腦和手機馋记,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來懊烤,“玉大人梯醒,你說我怎么就攤上這事‰缃簦” “怎么了茸习?”我有些...
    開封第一講書人閱讀 167,990評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長壁肋。 經(jīng)常有香客問我号胚,道長,這世上最難降的妖魔是什么浸遗? 我笑而不...
    開封第一講書人閱讀 59,618評論 1 296
  • 正文 為了忘掉前任涕刚,我火速辦了婚禮,結果婚禮上乙帮,老公的妹妹穿的比我還像新娘。我一直安慰自己极景,他們只是感情好察净,可當我...
    茶點故事閱讀 68,618評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著盼樟,像睡著了一般氢卡。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上晨缴,一...
    開封第一講書人閱讀 52,246評論 1 308
  • 那天译秦,我揣著相機與錄音,去河邊找鬼。 笑死筑悴,一個胖子當著我的面吹牛们拙,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播阁吝,決...
    沈念sama閱讀 40,819評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼砚婆,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了突勇?” 一聲冷哼從身側響起装盯,我...
    開封第一講書人閱讀 39,725評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎甲馋,沒想到半個月后埂奈,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,268評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡定躏,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,356評論 3 340
  • 正文 我和宋清朗相戀三年账磺,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片共屈。...
    茶點故事閱讀 40,488評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡绑谣,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出拗引,到底是詐尸還是另有隱情借宵,我是刑警寧澤,帶...
    沈念sama閱讀 36,181評論 5 350
  • 正文 年R本政府宣布矾削,位于F島的核電站壤玫,受9級特大地震影響,放射性物質發(fā)生泄漏哼凯。R本人自食惡果不足惜欲间,卻給世界環(huán)境...
    茶點故事閱讀 41,862評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望断部。 院中可真熱鬧猎贴,春花似錦、人聲如沸蝴光。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蔑祟。三九已至趁耗,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間疆虚,已是汗流浹背苛败。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評論 1 272
  • 我被黑心中介騙來泰國打工满葛, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人罢屈。 一個月前我還...
    沈念sama閱讀 48,897評論 3 376
  • 正文 我出身青樓嘀韧,卻偏偏與公主長得像,于是被迫代替她去往敵國和親儡遮。 傳聞我的和親對象是個殘疾皇子乳蛾,可洞房花燭夜當晚...
    茶點故事閱讀 45,500評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 一肃叶、Paxos算法的描述 通過一個決議分為兩個階段: 1、prepare階段: (1) proposer選擇一個提...
    yannhuang閱讀 391評論 0 0
  • Paxos算法在分布式領域具有非常重要的地位十嘿。但是Paxos算法有兩個比較明顯的缺點:1.難以理解 2.工程實現(xiàn)更...
    Jeffbond閱讀 17,332評論 25 87
  • 問題: 基于消息傳遞通信模型的分布式系統(tǒng)因惭,不可避免的會發(fā)生以下錯誤:進程可能會慢、被殺死或者重啟绩衷,消息可能會延遲蹦魔、...
    LaxChan閱讀 1,959評論 6 1
  • 可進入我的博客查看原文。 Raft 算法是可以用來替代 Paxos 算法的分布式一致性算法咳燕,而且 raft 算法比...
    Jeffbond閱讀 13,337評論 4 91
  • 武志紅老師的《巨嬰國》就像一把手術刀勿决,讓人邊讀邊反思反思自身,不時一拍大腿恍然大悟:說得太對了招盲!原來有時感到憋屈是...
    古米萊閱讀 508評論 3 9