Paxos 算法-淺顯易懂的方式解析

關(guān)注公眾號(hào) MageByte,設(shè)置星標(biāo)獲取最新干貨。公眾號(hào)后臺(tái)回復(fù) “加群” 進(jìn)入技術(shù)交流群獲更多技術(shù)成長(zhǎng)甲脏。
——本文由 MageByte 團(tuán)隊(duì)的「青葉」編寫

Paxos 算法是一種提高分布式系統(tǒng)系統(tǒng)容錯(cuò)性的一致性算法 。對(duì)于一個(gè)一致性算法 有以下特點(diǎn):

  • 在所有被提出的提案中妹笆,只有一個(gè)會(huì)被選定块请。
  • 如果沒有提案被選出,就不會(huì)有選定的提案拳缠。
  • 當(dāng)一個(gè)提案被選定后负乡,所有的節(jié)點(diǎn)進(jìn)程都可以獲取到被選定的提案信息。
  • 一旦 “接受者” 接受了提議脊凰,就不能再接受其他提議內(nèi)容抖棘。

算法過程

在該一致性算法中有三種參與角色。分別為 “提議者(Proposer 向 “接受者” 提出提案)”狸涌、“接受者(Acceptor 收到 “提議者” 的提議后切省,向提議者表達(dá)自己的意見)”、“學(xué)習(xí)者(Learner 天被確定后帕胆,學(xué)習(xí)者獲取被確定的提議)”

  • 第一階段:因?yàn)榇嬖诙鄠€(gè) “提議者” 朝捆,如果都提出提案,那么 “接受者” 接受誰的不接受誰的懒豹?太混亂了芙盘。所以要先明確具有領(lǐng)袖權(quán)的提議者才有權(quán)提出提案驯用。所以規(guī)定一些有領(lǐng)導(dǎo)權(quán)力的 “提案者” 可以提出提案。 “接受者” 們就主要去處理這個(gè) “提案者” 的提案了儒老。(這樣蝴乔,才可以在提案提出時(shí)就盡量讓意見統(tǒng)一,謀求盡早形成多數(shù)派)驮樊。
  • 第二階段:由以上階段選出來的主 “提議者” 提出提案薇正,“接受者” 反饋意見。如果多數(shù) “接受者” 接受了一個(gè)提案(達(dá)到半數(shù)以上)囚衔,那么提案就通過了挖腰。

提案者選定與意見處理

  1. 怎么明確意見領(lǐng)袖呢?通過編號(hào)练湿。每個(gè)“提議者”在第一階段先報(bào)個(gè)號(hào)猴仑,誰的號(hào)大,誰就是意見領(lǐng)袖肥哎。如果不好理解宁脊,可以想象為賄選。每個(gè)提議者先拿著鈔票賄賂一圈“接受者”贤姆,誰給的錢多榆苞,第二階段“接受者”就聽誰的。(注:這里和下文提到的“意見領(lǐng)袖”霞捡,并不是一個(gè)新的角色坐漏,而是代表在那一輪賄賂成功的“提議者”。所以碧信,請(qǐng)把意見領(lǐng)袖理解為賄賂中勝出的“提議者”即可)赊琳。
  2. 有個(gè)跟選舉常識(shí)不一樣的地方,就是每個(gè) “提案者” 不會(huì)執(zhí)著讓自己的提案通過砰碴,而是每個(gè) “提案者” 會(huì)執(zhí)著于讓提議盡快達(dá)成一致意見躏筏。所以為了這個(gè)目標(biāo),如果 “提案者” 在賄賂的時(shí)候發(fā)現(xiàn) “接受者” 已經(jīng)接受了前面意見領(lǐng)袖的提議呈枉,即便 “提議者” 賄賂成功趁尼,也會(huì)默默地把自己提案修改成前面意見領(lǐng)袖的提議(這樣就會(huì)更快的達(dá)到多數(shù)派)。
  3. 錢的多少很重要猖辫,若果錢少了酥泞,無論第一還是第二階段 “接受者” 都不會(huì)接受,直接拒絕啃憎。
  4. 上面 2 中提到如果 “提案者” 在賄賂的時(shí)候發(fā)現(xiàn)前面已經(jīng)有意見領(lǐng)袖的提議芝囤,那就將自己的提議默默地改成意見領(lǐng)袖的提議。但是這里有一種情況,如果你是 “提議者” 悯姊,在賄賂的時(shí)候羡藐, “接受者n” 回復(fù)你說 “他收到的意見領(lǐng)袖的提案是 方案 n ”,而 “接受者 n + 1” 回復(fù)你說 “他收到的意見領(lǐng)袖提議的方案是 n + 1”悯许。這時(shí)候我們?cè)撛趺崔k仆嗦。原則很簡(jiǎn)單,還是: “錢的多少重要岸晦!”欧啤,你就判斷下 “是接受者 n ” 見過的意見領(lǐng)袖有錢還是 “接受者 n + 1” 見過的領(lǐng)袖提議者有錢睛藻。你就把自己的提議改成意見領(lǐng)袖錢多的那個(gè) 提議启上。
  5. 在整個(gè)選舉過程中,每個(gè)提案者誰先來后到店印,“接受者” 什么時(shí)候收到 “提案者” 的提議是完全不可控的冈在。所以有可能一個(gè)意見領(lǐng)袖已經(jīng)產(chǎn)生了,但是由于這個(gè)意見領(lǐng)袖的第二階段才剛剛開始按摘,很多 “接受者” 還沒有收到這個(gè)意見領(lǐng)袖的提案包券。這時(shí)候突然來了一個(gè)新的土豪 “提案者” ,那么這個(gè)土豪也是有可能讓自己提案勝出炫贤。會(huì)出現(xiàn)這樣的博弈現(xiàn)象:
  • 上一個(gè)意見領(lǐng)袖要趕在土豪 “提案者” 賄賂到 “接受者” 前接受自己的提案溅固,否則會(huì)因?yàn)樽约褐百V賂的錢少于土豪被拒絕。
  • 土豪 “提案者” 要趕在上一個(gè)意見領(lǐng)袖者將提議傳達(dá)給 “接受者” 前賄賂到 “接受者”兰珍,否則土豪 “提議者” 基石賄賂成功侍郭,也要默默地將自己的提議改成前任領(lǐng)袖的提議內(nèi)容。不管怎么樣掠河,最終先得到多數(shù) “接受者” 的認(rèn)可亮元,那么這個(gè)提議就勝出了。

總結(jié)

  1. Paxos 算法包括兩個(gè)階段:第一階段主要就是賄賂唠摹,還沒有提出提議爆捞;第二個(gè)階段就是根據(jù)第一階段的結(jié)果,明確接受誰的提議勾拉,并且明確提議的內(nèi)容(這個(gè)提議可能是賄賂選取勝出的 “提案者” 自己的提議煮甥,也可能是前任意見領(lǐng)袖的提議)。
  2. 編號(hào)(賄賂金額大信涸蕖)很重要苛秕,無論哪個(gè)階段,編號(hào)小的都會(huì)被拒絕找默。
  3. 在第一階段中艇劫,一旦 “接受者” 已經(jīng)接受了前面的意見領(lǐng)袖的提議,后面再來找這個(gè) “接受者” 的 “提議者” ,即便是賄賂勝出店煞,也要老實(shí)的把自己的提案內(nèi)容改成前面領(lǐng)袖提議的內(nèi)容蟹演,這點(diǎn)尤為重要。接著這個(gè) “提案者” 也會(huì)在第二階段提出改變后的提議(為了一件快速達(dá)成一致)顷蟀。如果 “接受者” 之前沒有接收過任何提議酒请,那賄賂成功的 “提議者” 就可以提出自己的提議了。

簡(jiǎn)單示例說明

有兩個(gè) “提案者” 和三個(gè) “接受者”

  1. 首先 “提案者1” 賄賂了 3個(gè) “接受者”鸣个。也就是第一階段
    image.png
  2. 三個(gè) “接受者” 記下賄賂的金額大小羞反,目前只有一個(gè) “提案者” 出價(jià)賄賂,因此 $1就是最高的囤萤,所以 3 個(gè) “接受者” 返回 “提案者1” 賄賂成功昼窗。另外,因?yàn)闆]有任何先前的意見領(lǐng)袖提出提議涛舍,因此 “接受者” 們告訴 “提案者1” 之前沒有接受過提議澄惊,自然也就沒有上一個(gè)意見領(lǐng)袖賄賂金額了。

  3. “提案者1” 準(zhǔn)備執(zhí)行第二階段: 向 “接受者1” 提出了自己的提議:內(nèi)容為 1 號(hào)提議富雅,并告訴自己之前賄賂的金額$1掸驱。

  4. “接受者1” 檢查了下,目前賄賂的金額就是 $1没佑,于是就接受了 這個(gè)提議毕贼,并且把 1號(hào)提議的內(nèi)容記錄在案。

  5. 在 “提議者1” 向 “接受者2”蛤奢、“接受者3” 發(fā)起提議之前鬼癣,土豪 “提議者2” 出現(xiàn)了,他開始使用 $2賄賂 “接受者1“ 和 “接受者2”远剩。
    image.png
  6. “接受者1” 和 “接受者2” 就被土豪 “提議者2” 收買了扣溺,將賄賂金額改成了 $2,但是瓜晤,不同的是 “接受者1” 告訴響應(yīng) “提案者2” 锥余,之前已經(jīng)接受過 “提案者1” 提出的1號(hào)提議了。而 “接受者2” 告訴 “提案者2” 之前沒有收到過其他領(lǐng)袖的提議痢掠。

  7. 這時(shí)候 “提案者1” 回神了驱犹,他向 “接受者2” 和 “接受者3” 發(fā)起 1號(hào)內(nèi)容提議,并且攜帶之前賄賂過金額 $1的信息足画。

  8. “接受者2” 和 “接受者3” 開始回復(fù):“接受者2” 檢查了下自己記錄的金額2雄驹,然后便是已經(jīng)有人出價(jià)2了,而你之前出的1淹辞,不再接受你的提議医舆。但是 “接受者3” 檢查了自己記錄的賄賂金額就是1,于是就接受了這個(gè)提議內(nèi)容,并且把1號(hào)提議記錄在案蔬将。

  9. 到這里爷速,“提案者1” 已經(jīng)獲得了兩個(gè)接受者的贊同,達(dá)到了 半數(shù)通過的場(chǎng)景霞怀。于是 “提案者1” 確定了一號(hào)提議內(nèi)容最終通過惫东。

  10. 我們?cè)倩氐?“提案者2” ,之前賄賂了 “接受者1” 和 “接受者2”毙石,并且被 “接受者1” 告知: “之前已經(jīng)接受過一號(hào)提議了廉沮,并且最高金額是¥1。這個(gè)時(shí)候 “提案者2” 拿到信息后判斷一下徐矩,目前就是1號(hào)提議內(nèi)容滞时,就默默地把自己的提議內(nèi)容改成了 1號(hào)。然后向 “接受者1” 和 “接受者2” 發(fā)起提議丧蘸,提議內(nèi)容已經(jīng)變成 1號(hào)漂洋。并且攜帶信息之前已經(jīng)賄賂過金額 $2遥皂。

  11. “接受者1” 和 “接受者2” 收到 “提案者2” 的提議后力喷,繼續(xù)按照之前流程 對(duì)比下賄賂金額,記錄的是之前賄賂的金額 $2,所以就接受了提議演训,其實(shí)就是 “提案者1” 提出的內(nèi)容弟孟。就這樣最終1號(hào)提議內(nèi)容通過。

歡迎加群與我們分享样悟,我們第一時(shí)間反饋拂募。關(guān)注公眾號(hào),后臺(tái)回復(fù) 加群即可獲取個(gè)人微信窟她。

JavaStorm.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末陈症,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子震糖,更是在濱河造成了極大的恐慌录肯,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,590評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件吊说,死亡現(xiàn)場(chǎng)離奇詭異论咏,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)颁井,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門厅贪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人雅宾,你說我怎么就攤上這事养涮。” “怎么了?”我有些...
    開封第一講書人閱讀 169,301評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵贯吓,是天一觀的道長(zhǎng)贬芥。 經(jīng)常有香客問我,道長(zhǎng)宣决,這世上最難降的妖魔是什么蘸劈? 我笑而不...
    開封第一講書人閱讀 60,078評(píng)論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮尊沸,結(jié)果婚禮上威沫,老公的妹妹穿的比我還像新娘。我一直安慰自己洼专,他們只是感情好棒掠,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,082評(píng)論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著屁商,像睡著了一般烟很。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蜡镶,一...
    開封第一講書人閱讀 52,682評(píng)論 1 312
  • 那天雾袱,我揣著相機(jī)與錄音,去河邊找鬼官还。 笑死芹橡,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的望伦。 我是一名探鬼主播林说,決...
    沈念sama閱讀 41,155評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼屯伞!你這毒婦竟也來了腿箩?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,098評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤劣摇,失蹤者是張志新(化名)和其女友劉穎珠移,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體饵撑,經(jīng)...
    沈念sama閱讀 46,638評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡剑梳,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,701評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了滑潘。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片垢乙。...
    茶點(diǎn)故事閱讀 40,852評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖语卤,靈堂內(nèi)的尸體忽然破棺而出追逮,到底是詐尸還是另有隱情酪刀,我是刑警寧澤,帶...
    沈念sama閱讀 36,520評(píng)論 5 351
  • 正文 年R本政府宣布钮孵,位于F島的核電站骂倘,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏巴席。R本人自食惡果不足惜历涝,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,181評(píng)論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望漾唉。 院中可真熱鬧荧库,春花似錦、人聲如沸赵刑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽般此。三九已至蚪战,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間铐懊,已是汗流浹背邀桑。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評(píng)論 1 274
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留居扒,地道東北人概漱。 一個(gè)月前我還...
    沈念sama閱讀 49,279評(píng)論 3 379
  • 正文 我出身青樓丑慎,卻偏偏與公主長(zhǎng)得像喜喂,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子竿裂,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,851評(píng)論 2 361

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

  • 來源:維基百科(https://zh.wikipedia.org/wiki/Paxos%E7%AE%97%E6%B...
    蒼山雪麓閱讀 392評(píng)論 0 0
  • 在的我是有多幸福玉吁,多滿足啊腻异!從9歲開始就離開父母的溫存进副,離開了我應(yīng)有的童年,應(yīng)有的快樂悔常,應(yīng)有的玩...
    d6f63a5f5947閱讀 451評(píng)論 0 0
  • 只是想學(xué)一首歌而已 干嘛要那么麻煩的 把所有韓語發(fā)音都學(xué)會(huì)嘛 就和我 只是想說一句fuck you而已 沒必要過英...
    四一三閱讀 308評(píng)論 1 0
  • 每一次經(jīng)歷苦難机打,我們都在成為更好的自己矫户。 感觸很深,這是思思大王說的残邀,他的那本《寂寞是毒皆辽,也是解藥》柑蛇,我讀了兩遍,...
    愛生活的折耳貓閱讀 452評(píng)論 0 0
  • 上午:設(shè)計(jì)部會(huì)議驱闷,與同事討論起關(guān)于全案設(shè)計(jì)落地的問題耻台,在過程中設(shè)計(jì)師需要解決的問題。 根據(jù)上一個(gè)案例的教訓(xùn)空另,在全案...
    設(shè)計(jì)師周文斌閱讀 231評(píng)論 0 0