圖解 Paxos 一致性協(xié)議

前言

Paxos 一致性協(xié)議可以說(shuō)是一致性協(xié)議研究的起點(diǎn)浅碾,也以難以理解聞名部翘。其實(shí)協(xié)議本身并沒(méi)有多難理解,它的難理解性主要體現(xiàn)在:為何如此設(shè)計(jì)協(xié)議以及如何證明其正確性营密。本文嘗試通過(guò)流程圖來(lái)說(shuō)明協(xié)議的內(nèi)容以及基本應(yīng)用過(guò)程始腾,不涉及如何證明其正確性仁连。

基本概念

Paxos 可以分為兩種:

  • Single-Decree Paxos:決策單個(gè) Value
  • Multi-Paxos:連續(xù)決策多個(gè) Value蓝丙,并且保證每個(gè)節(jié)點(diǎn)上的順序完全一致邪铲,多 Paxos 往往是同事運(yùn)行多個(gè)單 Paxos 協(xié)議共同執(zhí)行的結(jié)果硫豆。

本文只關(guān)注單 Paxos 的原理龙巨,理解了單 Paxos,多 Paxos 也就不難理解了熊响。

Paxos 協(xié)議中的三種角色

  • 倡議者(Proposer):倡議者可以提出提議(數(shù)值或者操作命令)以供投票表決
  • 接受者(Acceptor):接受者可以對(duì)倡議者提出的提議進(jìn)行投票表決旨别,提議有超半數(shù)的接受者投票即被選中
  • 學(xué)習(xí)者(Learner):學(xué)習(xí)者無(wú)投票權(quán),只是從接受者那里獲知哪個(gè)提議被選中

在協(xié)議中汗茄,每個(gè)節(jié)點(diǎn)可以同時(shí)扮演以上多個(gè)角色秸弛。

Paxos 的特點(diǎn)

  • 一個(gè)或多個(gè)節(jié)點(diǎn)可以提出提議
  • 系統(tǒng)必須針對(duì)所有提案中的某個(gè)提案達(dá)成一致(超過(guò)半數(shù)的接受者選中)
  • 最多只能對(duì)一個(gè)確定的提議達(dá)成一致
  • 只要超半數(shù)的節(jié)點(diǎn)存活且可互相通信,整個(gè)系統(tǒng)一定能達(dá)成一致?tīng)顟B(tài)洪碳,即選擇一個(gè)確定的提議

協(xié)議圖示


通過(guò)上面的流程胆屿,如果有多個(gè)節(jié)點(diǎn)同時(shí)提出各自的提議,Paxos 就可以保證從中選出一個(gè)唯一確定的值偶宫,保證分布式系統(tǒng)的一致性非迹。

實(shí)例

下面我們通過(guò)例子來(lái)理解 Paxos 的實(shí)際應(yīng)用過(guò)程。

假設(shè)現(xiàn)在有五個(gè)節(jié)點(diǎn)的分布式系統(tǒng)纯趋,此時(shí) A 節(jié)點(diǎn)打算提議 X 值憎兽,E 節(jié)點(diǎn)打算提議 Y 值,其他節(jié)點(diǎn)沒(méi)有提議吵冒。

Paxos-1

假設(shè)現(xiàn)在 A 節(jié)點(diǎn)廣播它的提議(也會(huì)發(fā)送給自己)纯命,由于網(wǎng)絡(luò)延遲的原因,只有 A痹栖,B亿汞,C 節(jié)點(diǎn)收到了。注意即使 A揪阿,E 節(jié)點(diǎn)的提議同時(shí)到達(dá)某個(gè)節(jié)點(diǎn)疗我,它也必然有個(gè)先后處理的順序,這里的“同時(shí)”不是真正意義上的“同時(shí)”南捂。

A吴裤,B,C接收提議之后溺健,由于這是第一個(gè)它們接收到的提議麦牺,acceptedProposal 和 acceptedValue 都為空。

由于 A 節(jié)點(diǎn)已經(jīng)收到超半數(shù)的節(jié)點(diǎn)響應(yīng),且返回的 acceptedValue 都為空剖膳,也就是說(shuō)它可以用 X 作為提議的值來(lái)發(fā)生 Accept 請(qǐng)求魏颓,A,B吱晒,C接收到請(qǐng)求之后甸饱,將 acceptedValue 更新為 X。

A枕荞,B柜候,C 會(huì)發(fā)生 minProposal 給 A,A 檢查發(fā)現(xiàn)沒(méi)有大于 1 的 minProposal 出現(xiàn)躏精,此時(shí) X 已經(jīng)被選中渣刷。等等,我們是不是忘了D矗烛,E節(jié)點(diǎn)辅柴?它們的 acceptedValue 并不是 X,系統(tǒng)還處于不一致?tīng)顟B(tài)瞭吃。至此碌嘀,Paxos 過(guò)程還沒(méi)有結(jié)束,我們繼續(xù)看歪架。

此時(shí) E 節(jié)點(diǎn)選擇 Proposal ID 為 2 發(fā)送 Prepare 請(qǐng)求股冗,結(jié)果就和上面不一樣了,因?yàn)?C 節(jié)點(diǎn)已經(jīng)接受了 A 節(jié)點(diǎn)的提議和蚪,它不會(huì)三心二意止状,所以就告訴 E 節(jié)點(diǎn)它的選擇,E 節(jié)點(diǎn)也很紳士攒霹,既然 C 選擇了 A 的提議怯疤,那我也選它吧。于是催束,E 發(fā)起 Accept 請(qǐng)求集峦,使用 X 作為提議值,至此抠刺,整個(gè)分布式系統(tǒng)達(dá)成了一致塔淤,大家都選擇了 X。

上面是 Paxos 的一個(gè)簡(jiǎn)單應(yīng)用過(guò)程矫付,其他復(fù)雜的場(chǎng)景也可以根據(jù)流程圖慢慢推導(dǎo)凯沪,這里只是拋磚引玉。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末买优,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌杀赢,老刑警劉巖烘跺,帶你破解...
    沈念sama閱讀 218,755評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異脂崔,居然都是意外死亡滤淳,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)砌左,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)脖咐,“玉大人,你說(shuō)我怎么就攤上這事汇歹∑ㄉ茫” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,138評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵产弹,是天一觀的道長(zhǎng)派歌。 經(jīng)常有香客問(wèn)我,道長(zhǎng)痰哨,這世上最難降的妖魔是什么胶果? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,791評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮斤斧,結(jié)果婚禮上早抠,老公的妹妹穿的比我還像新娘。我一直安慰自己撬讽,他們只是感情好蕊连,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著锐秦,像睡著了一般咪奖。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上酱床,一...
    開(kāi)封第一講書(shū)人閱讀 51,631評(píng)論 1 305
  • 那天羊赵,我揣著相機(jī)與錄音,去河邊找鬼扇谣。 笑死昧捷,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的罐寨。 我是一名探鬼主播靡挥,決...
    沈念sama閱讀 40,362評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼鸯绿!你這毒婦竟也來(lái)了跋破?” 一聲冷哼從身側(cè)響起簸淀,我...
    開(kāi)封第一講書(shū)人閱讀 39,264評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎毒返,沒(méi)想到半個(gè)月后租幕,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,724評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡拧簸,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年劲绪,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片盆赤。...
    茶點(diǎn)故事閱讀 40,040評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡贾富,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出牺六,到底是詐尸還是另有隱情颤枪,我是刑警寧澤,帶...
    沈念sama閱讀 35,742評(píng)論 5 346
  • 正文 年R本政府宣布兔乞,位于F島的核電站汇鞭,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏庸追。R本人自食惡果不足惜霍骄,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望淡溯。 院中可真熱鬧读整,春花似錦、人聲如沸咱娶。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,944評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)膘侮。三九已至屈糊,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間琼了,已是汗流浹背逻锐。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,060評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留雕薪,地道東北人昧诱。 一個(gè)月前我還...
    沈念sama閱讀 48,247評(píng)論 3 371
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像所袁,于是被迫代替她去往敵國(guó)和親盏档。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評(píng)論 2 355

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