兩/三階段提交

預(yù)計(jì)閱讀時(shí)長(zhǎng):30分鐘

關(guān)鍵字:兩階段惹骂,三階段,分布式

舉個(gè)小栗子

最近在總結(jié)近一段時(shí)間的工作讨勤,雖然之前不斷有接觸兩階段提交箭跳、Paxos、Raft等一些分布式的名詞潭千,但一直是一知半解的狀態(tài)谱姓,并不能很清楚說(shuō)出來(lái)它們各自的特點(diǎn)和應(yīng)用場(chǎng)景,本文主要就針對(duì)兩階段刨晴、三階段提交做下總結(jié)屉来。

首先我們先講一個(gè)故事:有三個(gè)小孩經(jīng)常被一個(gè)練過(guò)武術(shù)的大個(gè)子欺負(fù),但是由于每個(gè)小孩子都身單力薄狈癞,誰(shuí)都打不過(guò)大個(gè)子茄靠,至少三個(gè)人才有可能制服他,于是他們決定集體反抗蝶桶,但是由于他們最近成績(jī)都不好慨绳,被家人關(guān)了禁閉,出去的時(shí)間有限,最好的方式是通過(guò)電話來(lái)商量幾點(diǎn)一起去找大個(gè)子的麻煩(假設(shè)大個(gè)子平時(shí)都是一個(gè)人呆在一個(gè)固定的地方脐雪,并且三個(gè)小孩都只能直接去找大個(gè)子厌小,并不能提前匯合的。別問(wèn)為啥有這么多限制战秋,就是有這么多限制)璧亚,他們?cè)趺赐ㄟ^(guò)電話達(dá)成共識(shí)呢?

我們暫時(shí)給這三個(gè)小孩分別取個(gè)名字:A/B/C脂信,首先他們最好不要每個(gè)人都向其余的人詢問(wèn)癣蟋,因?yàn)槊總€(gè)人空閑的時(shí)間可能都不一樣铅忿,假如他們各自都給其余的兩個(gè)人打電話詢問(wèn)五垮,就會(huì)顯得很混亂。比如A對(duì)BC說(shuō)咱們2點(diǎn)去干大個(gè)子宇姚,同時(shí)C又對(duì)AB說(shuō)咱們3點(diǎn)去干大個(gè)子尝哆,因?yàn)镃 2點(diǎn)沒(méi)有時(shí)間秉撇,C對(duì)A回復(fù)2點(diǎn)不行3點(diǎn)可以,但是B對(duì)AC說(shuō)不行秋泄,B只有4點(diǎn)才有時(shí)間琐馆,三個(gè)人各自很難達(dá)成一個(gè)統(tǒng)一的決策。假如有一個(gè)核心的決策人的話恒序,效率明顯會(huì)高一些瘦麸。

無(wú)論是動(dòng)物還是人,都會(huì)選取一個(gè)首領(lǐng)歧胁,目前看來(lái)通過(guò)首領(lǐng)來(lái)決策應(yīng)該是現(xiàn)在已知的最優(yōu)解滋饲。

比如A的年齡最大,大家都聽(tīng)他的喊巍,A首先詢問(wèn)BC:3點(diǎn)進(jìn)攻可以嗎屠缭?C回復(fù)可以,但是B回復(fù)不行崭参,A收到他倆的消息后呵曹,因?yàn)橛幸粋€(gè)人不同意,所以會(huì)再次通知BC放棄2點(diǎn)進(jìn)攻的計(jì)劃何暮。然后再詢問(wèn)BC:那4點(diǎn)可以嗎奄喂?BC收到4點(diǎn)進(jìn)攻的消息后,都覺(jué)得可以海洼,便對(duì)A回復(fù):ok跨新。A收到BC都確認(rèn)ok的消息后,然后分別通知BC:大家都認(rèn)為4點(diǎn)沒(méi)問(wèn)題坏逢。這時(shí)候他們?nèi)齻€(gè)就愉快的達(dá)成了一致域帐。

從上面可以看出:

1.首先有一個(gè)決策人能大大提交決策的效率赘被,并且邏輯很清晰

2.達(dá)成一致最起碼需要2次通信:詢問(wèn)+確定,因?yàn)锳最開(kāi)始通知的時(shí)間BC并不一定能接受俯树,所以需要先詢問(wèn)一下帘腹,等待響應(yīng),并且響應(yīng)的結(jié)果都為ok時(shí)许饿,A才能繼續(xù)向BC通知:達(dá)成一致,4點(diǎn)進(jìn)攻舵盈。

這也是最經(jīng)典的兩階段提交的邏輯陋率,這個(gè)故事里有很多限制條件:為啥三個(gè)人不能提前匯合坐在一塊商量,因?yàn)槊颗_(tái)機(jī)器都是獨(dú)立的個(gè)體秽晚,如果能匯合的話瓦糟,那就變成一臺(tái)機(jī)器內(nèi)部通信,也就不存在所謂的分布式一致性問(wèn)題了赴蝇,再比如為啥只能通過(guò)電話溝通菩浙,因?yàn)闄C(jī)器互相之間只能通過(guò)網(wǎng)絡(luò)通信。

兩階段提交

兩階段提交將節(jié)點(diǎn)分為兩種角色:協(xié)調(diào)者+參與者句伶。故事中A其實(shí)既扮演了協(xié)調(diào)者又扮演了參與者劲蜻,因?yàn)樗仁菦Q策的發(fā)起者,同時(shí)也是決策的參與者考余。BC在里面扮演的是參與者的角色先嬉。

硬件或者網(wǎng)絡(luò)故障是避免不了的,所以如果節(jié)點(diǎn)發(fā)生故障時(shí)楚堤,兩階段提交該如何處理才能保證決策能夠正確的執(zhí)行下去呢疫蔓?下面我們討論兩階段的容災(zāi)處理以及存在的問(wèn)題。

首先我們把上面的故事改一下身冬,剛才提到了A既是決策者又是參與者衅胀,這對(duì)A來(lái)說(shuō)壓力太大了,假如還有一個(gè)小孩D酥筝,他也飽受大個(gè)子的壓迫滚躯,他的腿腳不太方便,但腦子很靈活樱哼,大家都聽(tīng)他指揮哀九,他充當(dāng)了A之前協(xié)調(diào)者的角色,但是不參與一起進(jìn)攻大個(gè)子(只需要3個(gè)及以上的人數(shù)進(jìn)攻就可以)搅幅。

問(wèn)題1:假如D正準(zhǔn)備咨詢ABC其中某一個(gè)人時(shí)阅束,對(duì)方的電話線被挖掘機(jī)挖斷了,oh my blue shit茄唐,這時(shí)候怎么辦息裸?可以采用這種做法:D由于長(zhǎng)時(shí)間打不通他的電話蝇更,會(huì)向之前已經(jīng)咨詢過(guò)的人說(shuō):取消進(jìn)攻。這樣的話最起碼不會(huì)造成無(wú)謂的人員傷亡呼盆,這種處理方式是可以接受的年扩,而且所有人的決策是統(tǒng)一的:取消進(jìn)攻。

問(wèn)題2:假如D向ABC咨詢4點(diǎn)進(jìn)攻是否ok访圃,并且都收到了ok的回復(fù)厨幻,這時(shí)候只有D知道大家已經(jīng)達(dá)成了一致意見(jiàn),但是就在D準(zhǔn)備通知“大家都認(rèn)為4點(diǎn)進(jìn)攻沒(méi)問(wèn)題”時(shí)腿时,D的電話線被挖掘機(jī)挖斷了(不要問(wèn)為什么會(huì)斷况脆,支付寶都能斷,憑啥我們不能斷)批糟。此時(shí)ABC都在電話旁邊焦急的等待D的回復(fù)格了,不知道下一步該咋辦,只能干等著徽鼎,但是可能一整天都不會(huì)有消息了盛末,修電話線應(yīng)該還挺耗時(shí)間的。

那有沒(méi)有辦法解決這個(gè)問(wèn)題呢否淤?有悄但,就是ABC在過(guò)了挺久的時(shí)間沒(méi)有收到D的回復(fù)的情況下,三個(gè)人再選舉出來(lái)一個(gè)決策人叹括,可以是A算墨,可以是B,也可以是C汁雷,當(dāng)然如果有小E的話净嘀,選小E也是ok的(看個(gè)人愛(ài)好,ABCDFEG你更喜歡哪一個(gè)侠讯?^ ^挖藏,另外如何選舉,采用什么方式選舉不是本文關(guān)心的內(nèi)容)厢漩,假如就選了E作為決策者指導(dǎo)下一步工作膜眠。

問(wèn)題3:選舉出來(lái)E后,E根據(jù)當(dāng)前的ABC的狀態(tài)判斷出目前還沒(méi)有達(dá)成一致溜嗜,E會(huì)再次向ABC詢問(wèn)4點(diǎn)進(jìn)攻如何宵膨,而且E收到了ABC的回復(fù),并且A說(shuō)自己4點(diǎn)沒(méi)時(shí)間炸宵,根據(jù)A的反饋此時(shí)E會(huì)做出取消4點(diǎn)進(jìn)攻的決定辟躏,并把取消4點(diǎn)進(jìn)攻的消息通知了A,A收到消息后就去睡覺(jué)了土全,但是E還沒(méi)有來(lái)得及通知BC捎琐,E和A小區(qū)的電話線就被挖斷了(不要問(wèn)為什么這么巧会涎,他倆一個(gè)小區(qū)的)。此時(shí)BC由于收不到E的消息瑞凑,只能干等著末秃。注意:此時(shí)也不能再去選舉一個(gè)F來(lái)重新充當(dāng)決策者,因?yàn)锳也失聯(lián)了籽御,就算選出來(lái)一個(gè)F练慕,由于F聯(lián)系不上E和A,F(xiàn)并不確定E之前發(fā)送給A的消息是什么技掏。因?yàn)榧偃鏔僅僅詢問(wèn)BC贺待,并且他倆都同意4點(diǎn)進(jìn)攻,并做出了4點(diǎn)進(jìn)攻的決策零截,但是此時(shí)A其實(shí)認(rèn)為4點(diǎn)計(jì)劃取消了,最后只有BC兩個(gè)人去了秃臣,結(jié)果可想而知(移動(dòng)的600塊)……

那如果發(fā)生了上述情況怎么辦涧衙?只有一種選擇,那就是干等著(阻塞)奥此,等待A的電話線修好(不用等待E的原因是:就算E的電話修不好弧哎,ABC也可以選舉另外一個(gè)F來(lái)繼續(xù)協(xié)調(diào),因?yàn)锳已經(jīng)可以通信了)稚虎。

問(wèn)題4:假如E已經(jīng)通知所有人4點(diǎn)進(jìn)攻撤嫩,并且已經(jīng)收到所有人回復(fù)的ok,根據(jù)上面我們描述的蠢终,此時(shí)E需要將達(dá)成一致的這個(gè)好消息再發(fā)送給所有人序攘,表示剛才的提議木得問(wèn)題。這里有一個(gè)點(diǎn)很微妙:E向所有人發(fā)送(已達(dá)成一致)這個(gè)消息寻拂,能不能用短信的方式通知程奠?很明顯不能,因?yàn)槿绻皇峭ㄟ^(guò)短信簡(jiǎn)簡(jiǎn)單單的發(fā)送出去就不管了祭钉,無(wú)法保證消息是否真正的傳遞到了所有節(jié)點(diǎn)瞄沙,因?yàn)橛锌赡茉谛畔l(fā)送的途中,短信基站被炸了慌核。所以必須采用打電話的方式確認(rèn)距境。

我不確定同步通信是不是兩階段提交的潛在要求,但是本文我們默認(rèn)全部節(jié)點(diǎn)都是同步通信垮卓,異步的情況不考慮垫桂。比如打電話就是同步操作,必須得到反饋之后才能進(jìn)行下一步扒接,發(fā)短息就是異步操作伪货,發(fā)出去了誰(shuí)tm知道他到底收到?jīng)]有们衙。FLP論文證明:異步通信模型中,不存在完全保證數(shù)據(jù)一致性的算法碱呼,有興趣的自己研究蒙挑,反正我沒(méi)興趣……

繼續(xù)上面說(shuō)的,采用打電話的方式愚臀,假如通知AC成功后忆蚀,再去通知B的時(shí)候B聯(lián)系不上了怎么辦?此時(shí)E還能取消計(jì)劃嗎姑裂?不能馋袜!就像剛才說(shuō)的,AC收到確認(rèn)的消息時(shí)候可能就去睡覺(jué)了舶斧,而且是叫不醒的那種欣鳖。所以這里還有一個(gè)一直沒(méi)有提到的隱性約束:一旦參與者收到了協(xié)調(diào)者發(fā)送的確認(rèn)信息,并做了確認(rèn)操作茴厉,那么參與者不可以回滾(其實(shí)可以理解為單機(jī)的數(shù)據(jù)庫(kù)事務(wù)泽台,我都已經(jīng)commit了,還怎么去rollback矾缓,所有事務(wù)只能在commit之前rollback)怀酷。這個(gè)時(shí)候咋辦?木得辦法嗜闻,干等……等B恢復(fù)蜕依。

這也是為什么眾多文章中都會(huì)提到:兩階段提交是一個(gè) blocking protocol 阻塞的協(xié)議。

筆者認(rèn)為兩階段里面只有參與者掛掉的時(shí)候才會(huì)引起阻塞琉雳,因?yàn)橹灰獏⑴c者沒(méi)掛样眠,總能選舉出一個(gè)新的協(xié)調(diào)者,通過(guò)詢問(wèn)所有參與者來(lái)判斷出當(dāng)前事務(wù)的進(jìn)度咐吼,從而進(jìn)行下一步的處理吹缔。

三階段提交

下面我們看看三階段提交,三階段提交主要是引入了超時(shí)機(jī)制來(lái)避免阻塞锯茄。三階段將整個(gè)過(guò)程分為了三個(gè)階段:canCommit厢塘,preCommit,doCommit肌幽。有一點(diǎn)需要注意:參與者和協(xié)調(diào)者并不是總處于同一個(gè)階段晚碾。有可能參與者已經(jīng)是preCommit階段了,而協(xié)調(diào)者還處于canCommit階段喂急。協(xié)調(diào)者在超時(shí)沒(méi)有收到參與者的信息時(shí)格嘁,總是執(zhí)行abort,而參與者在進(jìn)入doCommit階段超時(shí)沒(méi)有收到協(xié)調(diào)者的信息的話廊移,會(huì)默認(rèn)執(zhí)行commit糕簿。

引自wiki

首先我們還是讓E當(dāng)協(xié)調(diào)者探入,小E向ABC詢問(wèn):4點(diǎn)ok不?ABC收到E的咨詢后懂诗,如果確認(rèn)沒(méi)問(wèn)題蜂嗽,那么ABC會(huì)進(jìn)入preCommi階段,并向E返回ok殃恒,注意此時(shí)E如果沒(méi)有收到全部的節(jié)點(diǎn)回復(fù)的OK的話植旧,E仍然處于canCommit階段。

1.假如此時(shí)E失聯(lián)了离唐,ABC執(zhí)行abort

2.假如ABC有人失聯(lián)了病附,E執(zhí)行abort

解釋第1條,為什么E失聯(lián)了ABC需要abort亥鬓,因?yàn)榧词笰BC各自處于preCommit階段完沪,但是他們并不知道大家是否都統(tǒng)一了4點(diǎn)進(jìn)攻(比如A并不知道BC是否同意4點(diǎn)進(jìn)攻,需要等待E再次通知確認(rèn))嵌戈,因?yàn)橛锌赡蹺下一步想要發(fā)送的就是abort信息丽焊,所以保險(xiǎn)起見(jiàn)此狀態(tài)下ABC執(zhí)行abort。

解釋第2條咕别,無(wú)論何時(shí),只要E發(fā)現(xiàn)ABC有人失聯(lián)了写穴,他都會(huì)發(fā)起abort指令惰拱。

假如ABC全部回復(fù)ok,這時(shí)E才進(jìn)入第二階段preCommit啊送,然后E向ABC發(fā)送:那咱們就4點(diǎn)出發(fā)(preCommit信息)偿短。ABC收到信息后向E返回ok,并進(jìn)入doCommit階段馋没,該祭祖的祭祖昔逗,該找女朋友的找女朋友,無(wú)牽無(wú)掛的那就去吃頓好的篷朵。對(duì)勾怒,有一個(gè)要求:就是不能去睡覺(jué),不能去睡覺(jué)声旺,不能去睡覺(jué)(重要的事情說(shuō)三遍笔链,上面的例子是ABC收到信息,并向E回復(fù)確認(rèn)之后就睡覺(jué)去了腮猖,區(qū)別就在于不睡覺(jué)的話此時(shí)依然可以接電話執(zhí)行回滾rollback)鉴扫。

1.假如此時(shí)E失聯(lián)了,ABC執(zhí)行commit

2.假如此時(shí)ABC有人失聯(lián)了澈缺,E執(zhí)行abort

解釋一下第1條:假如ABC已經(jīng)進(jìn)入doCommit階段坪创,此時(shí)E掛了咋辦炕婶?三階段規(guī)定處于doCommit階段的參與者超時(shí)未收到協(xié)調(diào)者的信息后會(huì)默認(rèn)執(zhí)行commit操作。因?yàn)槟苓M(jìn)入doCommit階段莱预,說(shuō)明在此之前已經(jīng)確認(rèn)大家是可以達(dá)成共識(shí)的柠掂。但是這一階段如果協(xié)調(diào)者和某個(gè)參與者都失聯(lián)的話,三階段提交就處理不了了锁施,跟上面兩階段里面描述的很類(lèi)似陪踩。網(wǎng)絡(luò)分區(qū)其實(shí)就是這種情況中的一種,下面的斜體字會(huì)詳細(xì)解釋悉抵。

解釋一下第2條肩狂,我們首先看下問(wèn)題4,問(wèn)題4描述的是:E給ABC發(fā)送“確認(rèn)4點(diǎn)進(jìn)攻”的消息時(shí)姥饰,假如A收到了傻谁,但是B的電話線挖斷了并沒(méi)有收到確認(rèn)信息,那么所有人都得等B電話線修好列粪,要不然沒(méi)辦法達(dá)成一致意見(jiàn)(因?yàn)锳睡覺(jué)去了审磁,不能rollback)。而這次我們對(duì)之前的邏輯做了修改岂座,就是A收到確認(rèn)消息進(jìn)入doCommit階段后态蒂,不能睡,還得在電話旁邊等著(也就是說(shuō)此時(shí)A還不能commit)费什。而且E的耐心有限钾恢,在規(guī)定的時(shí)間里面他如果聯(lián)系不上B的話,那么他就會(huì)給AC說(shuō)鸳址,B掉鏈子了瘩蚪,計(jì)劃取消,跟兩階段不同的是這個(gè)階段E可以做出取消計(jì)劃的決定了稿黍。

不過(guò)三階段并不能解決網(wǎng)絡(luò)分區(qū)的問(wèn)題疹瘦,網(wǎng)絡(luò)分區(qū)的情況下也會(huì)有數(shù)據(jù)不一致的現(xiàn)象,這個(gè)跟問(wèn)題3很類(lèi)似巡球,比如E和A在第三階段同時(shí)和BC失聯(lián)了言沐,E和A還能聯(lián)系,并且因?yàn)槟撤N原因酣栈,第二階段E收到所有節(jié)點(diǎn)的回復(fù)后呢灶,判斷4點(diǎn)不能進(jìn)攻,進(jìn)入第三階段E向A發(fā)送的是取消計(jì)劃的決定钉嘹,但是BC因?yàn)橐呀?jīng)進(jìn)入第二階段了鸯乃,按照默認(rèn)策略超時(shí)沒(méi)有接收到E的消息的話,會(huì)默認(rèn)執(zhí)行之前通知的4點(diǎn)進(jìn)攻的策略,結(jié)果所有人并沒(méi)有達(dá)成共識(shí)缨睡。

小結(jié)

上面所描述的兩階段和三階段提交并沒(méi)有將所有的邊界情況全部考慮進(jìn)去鸟悴,兩階段和三階段提交本身只是一個(gè)理論模型,真正的工程實(shí)現(xiàn)各有各的不同奖年,各有各的優(yōu)化细诸,可能某種實(shí)現(xiàn)規(guī)避的A類(lèi)問(wèn)題,但是導(dǎo)致了B類(lèi)問(wèn)題陋守,同樣另一種工程實(shí)現(xiàn)可能完全反過(guò)來(lái)震贵,再加上筆者能力有限,并不能cover所有的細(xì)節(jié)點(diǎn)水评,只希望上面的描述對(duì)大家理解兩階段三階段提交有所幫助猩系。

另外從上面也可以看出,所謂的三階段不存在兩階段提交的阻塞問(wèn)題中燥,其實(shí)也是有很多限制條件寇甸,或者犧牲了一致性來(lái)?yè)Q取的,并不是很完美的解決方案疗涉。而且三階段提交在網(wǎng)絡(luò)分區(qū)時(shí)也不能保證數(shù)據(jù)一定就是一致的拿霉,除了比兩階段提交延時(shí)更高一點(diǎn)外,還真想不出它還有別的什么突出的特色咱扣。工程實(shí)現(xiàn)時(shí)采用哪種方案還是根據(jù)場(chǎng)景來(lái)分析绽淘,目前來(lái)看兩階段使用的更加廣泛一些(三階段不理解也沒(méi)關(guān)系,看個(gè)熱鬧就好)闹伪。

比如google的論文Percolator就采用的就是兩階段提交收恢,而且巧妙的規(guī)避了兩階段提交的一些問(wèn)題,簡(jiǎn)單解釋?zhuān)篜ercolator采用了一個(gè)primary鎖和多個(gè)slave鎖來(lái)將一個(gè)事務(wù)涉及的所有行都進(jìn)行關(guān)聯(lián)祭往,確保事務(wù)失敗后,新的協(xié)調(diào)者能夠獲取本次事務(wù)的完整信息火窒;另外根據(jù)primary鎖(單條記錄)來(lái)判斷事務(wù)是否提交硼补,避免了commit不一致的問(wèn)題;最后數(shù)據(jù)統(tǒng)一采用bigtable存儲(chǔ)熏矿,避免了單點(diǎn)故障導(dǎo)致數(shù)據(jù)不可訪問(wèn)造成的阻塞問(wèn)題已骇。筆者之前總結(jié)過(guò)一次Percolator翻譯,有興趣的同學(xué)可以了解一下票编。

參考資料:

wiki-三階段提交

三階段提交

某大學(xué)一致性算法課件

思考

思考一下:為什么兩/三階段提交往往應(yīng)用在分布式事務(wù)中褪储?分布式事務(wù)有個(gè)特點(diǎn):一個(gè)事務(wù)中每個(gè)參與者所存儲(chǔ)的數(shù)據(jù)是不一樣的,比如X節(jié)點(diǎn)存儲(chǔ)了A賬號(hào)的資金慧域,Y節(jié)點(diǎn)存儲(chǔ)了B賬號(hào)的資金鲤竹,A向B轉(zhuǎn)了10塊錢(qián),需要從X節(jié)點(diǎn)上的A賬戶中扣10塊錢(qián)昔榴,然后還要保證Y節(jié)點(diǎn)上的B賬號(hào)增加10塊錢(qián)辛藻。也就是說(shuō)所有節(jié)點(diǎn)的數(shù)據(jù)加起來(lái)共同組成了一個(gè)數(shù)據(jù)一致的系統(tǒng)碘橘,但凡它們中的任何一個(gè)節(jié)點(diǎn)掛了,系統(tǒng)就處于未知的狀態(tài)吱肌,必須等待節(jié)點(diǎn)恢復(fù)才可以正常運(yùn)行痘拆。也就是說(shuō)分布式事務(wù)本身就有數(shù)據(jù)節(jié)點(diǎn)宕機(jī)阻塞的特點(diǎn),這點(diǎn)跟兩階段提交完美的契合氮墨,兩階段提交在參與者節(jié)點(diǎn)不出問(wèn)題時(shí)是可以保證數(shù)據(jù)一致性的纺蛆,而且擁有不錯(cuò)的性能。分布式事務(wù)中相對(duì)于系統(tǒng)健壯性规揪,我們更看重?cái)?shù)據(jù)一致性(理解這點(diǎn)很重要)桥氏。

而另一種分布式一致性算法,代表的即為:Raft和Paxos粒褒,它們主要解決的是什么問(wèn)題呢识颊?Raft和Paxos往往是應(yīng)用在對(duì)某個(gè)結(jié)果達(dá)成一致的場(chǎng)景中,就好比上面的例子中我們提到協(xié)調(diào)者掛的時(shí)候需要選舉一個(gè)節(jié)點(diǎn)作為協(xié)調(diào)者奕坟,Raft和Paxos算法解決的是多個(gè)節(jié)點(diǎn)如何共同維護(hù)一個(gè)唯一的值(比如狀態(tài)機(jī)祥款,公共配置等),而且Raft和Paxso擁有更好的健壯性月杉,允許部分節(jié)點(diǎn)宕機(jī)也不會(huì)阻塞刃跛,但是性能會(huì)差一點(diǎn)。

有興趣的讀者可以繼續(xù)參閱另一篇Raft論文閱讀筆記

最后編輯于
?著作權(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)容

  • 在分布式系統(tǒng)中乐埠,著有CAP理論抗斤,該理論由加州大學(xué)伯克利分校的Eric Brewer教授提出,該理論闡述了在一個(gè)分布...
    匆匆歲月閱讀 1,500評(píng)論 0 7
  • 一、分布式數(shù)據(jù)一致性 在分布式系統(tǒng)中棵逊,為了保證數(shù)據(jù)的高可用伤疙,通常會(huì)將數(shù)據(jù)保留多個(gè)副本(replica),這些副本會(huì)...
    Zal哥哥閱讀 395評(píng)論 0 0
  • 分布式基礎(chǔ)知識(shí) 分布式的特點(diǎn):分布性辆影、對(duì)等性徒像、并發(fā)性、缺乏全局時(shí)鐘蛙讥、故障總會(huì)發(fā)生 分布式環(huán)境下的各種問(wèn)題:通訊異常...
    胖虎大哥閱讀 843評(píng)論 1 0
  • 分布式基礎(chǔ)知識(shí) 分布式的特點(diǎn):分布性锯蛀、對(duì)等性、并發(fā)性次慢、缺乏全局時(shí)鐘旁涤、故障總會(huì)發(fā)生分布式環(huán)境下的各種問(wèn)題:通訊異常翔曲、...
    vdes閱讀 21,805評(píng)論 0 21
  • 一瞳遍、兩階段提交的缺點(diǎn) 1.同步阻塞:執(zhí)行過(guò)程中,所有參與節(jié)點(diǎn)都是事務(wù)阻塞型菌羽,占有公共資源掠械,其他節(jié)點(diǎn)阻塞 2.單點(diǎn)故...
    hedgehog1112閱讀 233評(píng)論 0 0