Consensus Algorithm——Raft 協(xié)議

[轉(zhuǎn)]
過(guò)去, Paxos一直是分布式協(xié)議的標(biāo)準(zhǔn),但是Paxos難于理解践惑,更難以實(shí)現(xiàn)铲敛,Google的分布式鎖系統(tǒng)Chubby作為Paxos實(shí)現(xiàn)曾經(jīng)遭遇到很多坑膜眠。
  來(lái)自Stanford的新的分布式協(xié)議研究稱(chēng)為Raft拗踢,它是一個(gè)為真實(shí)世界應(yīng)用建立的協(xié)議脚牍,主要注重協(xié)議的落地性和可理解性。
  在了解Raft之前巢墅,我們先了解Consensus一致性這個(gè)概念诸狭,它是指多個(gè)服務(wù)器在狀態(tài)達(dá)成一致,但是在一個(gè)分布式系統(tǒng)中君纫,因?yàn)楦鞣N意外可能作谚,有的服務(wù)器可能會(huì)崩潰或變得不可靠,它就不能和其他服務(wù)器達(dá)成一致?tīng)顟B(tài)庵芭。這樣就需要一種Consensus協(xié)議,一致性協(xié)議是為了確保容錯(cuò)性雀监,也就是即使系統(tǒng)中有一兩個(gè)服務(wù)器當(dāng)機(jī)双吆,也不會(huì)影響其處理過(guò)程。
  為了以容錯(cuò)方式達(dá)成一致会前,我們不可能要求所有服務(wù)器100%都達(dá)成一致?tīng)顟B(tài)好乐,只要超過(guò)半數(shù)的大多數(shù)服務(wù)器達(dá)成一致就可以了,假設(shè)有N臺(tái)服務(wù)器瓦宜,N/2 +1 就超過(guò)半數(shù)蔚万,代表大多數(shù)了。
  Paxos和Raft都是為了實(shí)現(xiàn)Consensus一致性這個(gè)目標(biāo)临庇,這個(gè)過(guò)程如同選舉一樣反璃,參選者需要說(shuō)服大多數(shù)選民(服務(wù)器)投票給他,一旦選定后就跟隨其操作假夺。Paxos和Raft的區(qū)別在于選舉的具體過(guò)程不同淮蜈。
  在Raft中,任何時(shí)候一個(gè)服務(wù)器可以扮演下面角色之一:
Leader: 處理所有客戶(hù)端交互已卷,日志復(fù)制等梧田,一般一次只有一個(gè)Leader.
Follower: 類(lèi)似選民,完全被動(dòng)
Candidate候選人: 類(lèi)似Proposer律師,可以被選為一個(gè)新的領(lǐng)導(dǎo)人裁眯。

Raft階段分為兩個(gè)鹉梨,首先是選舉過(guò)程,然后在選舉出來(lái)的領(lǐng)導(dǎo)人帶領(lǐng)進(jìn)行正常操作穿稳,比如日志復(fù)制等存皂。下面用圖示展示這個(gè)過(guò)程:

  1. 任何一個(gè)服務(wù)器都可以成為一個(gè)候選者Candidate,它向其他服務(wù)器Follower發(fā)出要求選舉自己的請(qǐng)求:


  2. 其他服務(wù)器同意了司草,發(fā)出OK艰垂。



    注意如果在這個(gè)過(guò)程中,有一個(gè)Follower當(dāng)機(jī)埋虹,沒(méi)有收到請(qǐng)求選舉的要求猜憎,因此候選者可以自己選自己,只要達(dá)到N/2 + 1 的大多數(shù)票搔课,候選人還是可以成為L(zhǎng)eader的胰柑。

  3. 這樣這個(gè)候選者就成為了Leader領(lǐng)導(dǎo)人,它可以向選民也就是Follower們發(fā)出指令爬泥,比如進(jìn)行日志復(fù)制柬讨。


  4. 以后通過(guò)心跳進(jìn)行日志復(fù)制的通知


  5. 如果一旦這個(gè)Leader當(dāng)機(jī)崩潰了,那么Follower中有一個(gè)成為候選者袍啡,發(fā)出邀票選舉。


  6. Follower同意后,其成為L(zhǎng)eader辩越,繼續(xù)承擔(dān)日志復(fù)制等指導(dǎo)工作:


值得注意的是黔攒,整個(gè)選舉過(guò)程是有一個(gè)時(shí)間限制的督惰,如下圖:



  Splite Vote是因?yàn)槿绻瑫r(shí)有兩個(gè)候選人向大家邀票姑丑,這時(shí)通過(guò)類(lèi)似加時(shí)賽來(lái)解決栅哀,兩個(gè)候選者在一段timeout比如300ms互相不服氣的等待以后留拾,因?yàn)殡p方得到的票數(shù)是一樣的,一半對(duì)一半沦偎,那么在300ms以后咳蔚,再由這兩個(gè)候選者發(fā)出邀票,這時(shí)同時(shí)的概率大大降低侈询,那么首先發(fā)出邀票的的候選者得到了大多數(shù)同意糯耍,成為領(lǐng)導(dǎo)者Leader温技,而另外一個(gè)候選者后來(lái)發(fā)出邀票時(shí),那些Follower選民已經(jīng)投票給第一個(gè)候選者震檩,不能再投票給它抛虏,它就成為落選者了,最后這個(gè)落選者也成為普通Follower一員了霜旧。

日志復(fù)制
  下面以日志復(fù)制為例子說(shuō)明Raft算法挂据,假設(shè)Leader領(lǐng)導(dǎo)人已經(jīng)選出儿普,這時(shí)客戶(hù)端發(fā)出增加一個(gè)日志的要求眉孩,比如日志是"sally":


  1. Leader要求Followe遵從他的指令,都將這個(gè)新的日志內(nèi)容追加到他們各自日志中:



    3.大多數(shù)follower服務(wù)器將日志寫(xiě)入磁盤(pán)文件后凛虽,確認(rèn)追加成功凯旋,發(fā)出Commited Ok:


  2. 在下一個(gè)心跳heartbeat中至非,Leader會(huì)通知所有Follwer更新commited 項(xiàng)目糠聪。
    對(duì)于每個(gè)新的日志記錄,重復(fù)上述過(guò)程枷颊。
    如果在這一過(guò)程中戳杀,發(fā)生了網(wǎng)絡(luò)分區(qū)或者網(wǎng)絡(luò)通信故障夭苗,使得Leader不能訪問(wèn)大多數(shù)Follwers了信卡,那么Leader只能正常更新它能訪問(wèn)的那些Follower服務(wù)器题造,而大多數(shù)的服務(wù)器Follower因?yàn)闆](méi)有了Leader傍菇,他們重新選舉一個(gè)候選者作為L(zhǎng)eader,然后這個(gè)Leader作為代表于外界打交道界赔,如果外界要求其添加新的日志丢习,這個(gè)新的Leader就按上述步驟通知大多數(shù)Followers淮悼,如果這時(shí)網(wǎng)絡(luò)故障修復(fù)了袜腥,那么原先的Leader就變成Follower,在失聯(lián)階段這個(gè)老Leader的任何更新都不能算commit,都回滾福侈,接受新的Leader的新的更新。
    總結(jié):目前幾乎所有語(yǔ)言都已經(jīng)有支持Raft算法的庫(kù)包辽社,具體可參考:raftconsensus.github.io
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市衡奥,隨后出現(xiàn)的幾起案子爹袁,更是在濱河造成了極大的恐慌,老刑警劉巖矮固,帶你破解...
    沈念sama閱讀 221,273評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件失息,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡档址,警方通過(guò)查閱死者的電腦和手機(jī)盹兢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)守伸,“玉大人绎秒,你說(shuō)我怎么就攤上這事∧崮。” “怎么了见芹?”我有些...
    開(kāi)封第一講書(shū)人閱讀 167,709評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)蠢涝。 經(jīng)常有香客問(wèn)我玄呛,道長(zhǎng),這世上最難降的妖魔是什么和二? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,520評(píng)論 1 296
  • 正文 為了忘掉前任徘铝,我火速辦了婚禮,結(jié)果婚禮上惯吕,老公的妹妹穿的比我還像新娘惕它。我一直安慰自己,他們只是感情好废登,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,515評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布淹魄。 她就那樣靜靜地躺著,像睡著了一般堡距。 火紅的嫁衣襯著肌膚如雪甲锡。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,158評(píng)論 1 308
  • 那天吏颖,我揣著相機(jī)與錄音搔体,去河邊找鬼恨樟。 笑死半醉,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的劝术。 我是一名探鬼主播缩多,決...
    沈念sama閱讀 40,755評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼呆奕,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了衬吆?” 一聲冷哼從身側(cè)響起梁钾,我...
    開(kāi)封第一講書(shū)人閱讀 39,660評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎逊抡,沒(méi)想到半個(gè)月后姆泻,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,203評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡冒嫡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,287評(píng)論 3 340
  • 正文 我和宋清朗相戀三年拇勃,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片孝凌。...
    茶點(diǎn)故事閱讀 40,427評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡方咆,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蟀架,到底是詐尸還是另有隱情瓣赂,我是刑警寧澤,帶...
    沈念sama閱讀 36,122評(píng)論 5 349
  • 正文 年R本政府宣布片拍,位于F島的核電站煌集,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏穆碎。R本人自食惡果不足惜牙勘,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,801評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望所禀。 院中可真熱鬧方面,春花似錦、人聲如沸色徘。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,272評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)褂策。三九已至横腿,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間斤寂,已是汗流浹背耿焊。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,393評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留遍搞,地道東北人罗侯。 一個(gè)月前我還...
    沈念sama閱讀 48,808評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像溪猿,于是被迫代替她去往敵國(guó)和親钩杰。 傳聞我的和親對(duì)象是個(gè)殘疾皇子纫塌,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,440評(píng)論 2 359

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

  • 可進(jìn)入我的博客查看原文。 Raft 算法是可以用來(lái)替代 Paxos 算法的分布式一致性算法讲弄,而且 raft 算法比...
    Jeffbond閱讀 13,337評(píng)論 4 91
  • 尋找一種易于理解的一致性算法(擴(kuò)展版) 摘要 Raft 是一種為了管理復(fù)制日志的一致性算法措左。它提供了和 Paxos...
    枝葉君閱讀 2,651評(píng)論 0 15
  • 尋找一種易于理解的一致性算法(擴(kuò)展版) 摘要 Raft 是一種為了管理復(fù)制日志的一致性算法。它提供了和 Paxos...
    yflau閱讀 997評(píng)論 0 1
  • 前言 這是一篇學(xué)習(xí)raft論文的總結(jié)避除,主要是對(duì)看論文過(guò)程中難以理解的幾個(gè)問(wèn)題的記錄怎披。系統(tǒng)性的講解還是得看raft論...
    asmer閱讀 14,480評(píng)論 3 38
  • 文 昏睡十年 兩千多年前,一個(gè)“游于江潭瓶摆,行吟澤畔钳枕,顏色憔悴,形容枯槁”(《漁父》)的落魄貴族懷石自沉汨羅赏壹,...
    安靜的駱子閱讀 893評(píng)論 14 35