兩階段提交協(xié)議(2PC)鹦赎、三階提交協(xié)議(3PC)

兩階段提交協(xié)議(2PC)谍椅、三階提交協(xié)議(3PC)

2PC

二階段提交協(xié)議是將事務(wù)的提交過程拆分為兩個階段來執(zhí)行,分別為提交事務(wù)請求古话,執(zhí)行事務(wù)請求

  • 提交事務(wù)請求

    協(xié)調(diào)者發(fā)送執(zhí)行事務(wù)的請求給參與者雏吭,參與者執(zhí)行事務(wù),成功則返回YES陪踩,否則返回NO杖们,并在本地記錄Undo和Redo的信息

  • 執(zhí)行事務(wù)提交

    如果協(xié)調(diào)者收到了參與者的失敗消息或者超時,直接給每個參與者發(fā)送回滾(Rollback)消息肩狂;否則摘完,發(fā)送提交(Commit)消息;參與者根據(jù)協(xié)調(diào)者的指令執(zhí)行提交或者回滾操作傻谁,釋放所有事務(wù)處理過程中使用的鎖資源

二階段提交協(xié)議原理比價簡單孝治,實現(xiàn)方便,但是不幸的事,二階段提交還是有幾個缺點(diǎn)的:

1.同步阻塞:一旦參與者在等待其他參與者響應(yīng)的過程中谈飒,它將無法再執(zhí)行其他任何操作
2.單點(diǎn)問題:一旦協(xié)調(diào)者故障了岂座,參與者將得不到任何請求,一直處于鎖定事務(wù)資源狀態(tài)步绸,無法繼續(xù)完成事務(wù)
3.數(shù)據(jù)不一致:在事務(wù)提交階段掺逼,出現(xiàn)局部網(wǎng)絡(luò)異常,導(dǎo)致部分協(xié)調(diào)者未接收到commit請求瓤介,就會造成已經(jīng)接收到commit請求的參與者與未接到commit請求的參與者數(shù)據(jù)不一致
4.容錯機(jī)制太過保守:任何一個節(jié)點(diǎn)的失敗都會導(dǎo)致整個事務(wù)的失敗

3PC

三階段提交協(xié)議是2PC的改進(jìn)版本吕喘,將2PC的提交事務(wù)階段一分為二,這樣就變成了三階段:CanCommit刑桑,PreCommit氯质,DoCommit三個階段。

  • CanCommit階段

    1.事務(wù)詢問 協(xié)調(diào)者向參與者發(fā)送CanCommit請求祠斧。詢問是否可以執(zhí)行事務(wù)提交操作闻察。然后開始等待參與者的響應(yīng)。
    2.響應(yīng)反饋 參與者接到CanCommit請求之后琢锋,正常情況下辕漂,如果其自身認(rèn)為可以順利執(zhí)行事務(wù),則返回Yes響應(yīng)吴超,并進(jìn)入預(yù)備狀態(tài)钉嘹。否則反饋No

  • PreCommit階段
    協(xié)調(diào)者根據(jù)參與者的反應(yīng)情況來決定是否可以進(jìn)行事務(wù)的PreCommit操作。

    1.發(fā)送預(yù)提交請求 協(xié)調(diào)者向參與者發(fā)送PreCommit請求鲸阻,并進(jìn)入Prepared階段跋涣。
    2.事務(wù)預(yù)提交 參與者接收到PreCommit請求后,會執(zhí)行事務(wù)操作鸟悴,并將undo和redo信息記錄到事務(wù)日志中陈辱。
    3.響應(yīng)反饋 如果參與者成功的執(zhí)行了事務(wù)操作,則返回ACK響應(yīng)细诸,同時開始等待最終指令:提交(Commit)或中止(abort)沛贪。

假如有任何一個參與者向協(xié)調(diào)者發(fā)送了No響應(yīng),或者等待超時之后震贵,協(xié)調(diào)者都沒有接到參與者的響應(yīng)鹏浅,那么就執(zhí)行事務(wù)的中斷。

  • doCommit階段
    該階段進(jìn)行真正的事務(wù)提交屏歹。

    1.發(fā)送提交請求 協(xié)調(diào)接收到參與者發(fā)送的ACK響應(yīng)隐砸,那么他將從預(yù)提交狀態(tài)進(jìn)入到提交狀態(tài)。并向所有參與者發(fā)送doCommit請求蝙眶。
    2.事務(wù)提交 參與者接收到doCommit請求之后季希,執(zhí)行正式的事務(wù)提交褪那。并在完成事務(wù)提交之后釋放所有事務(wù)資源。
    3.響應(yīng)反饋 事務(wù)提交完之后式塌,向協(xié)調(diào)者發(fā)送Ack響應(yīng)博敬。
    4.完成事務(wù) 協(xié)調(diào)者接收到所有參與者的ack響應(yīng)之后,完成事務(wù)峰尝。

協(xié)調(diào)者沒有接收到參與者發(fā)送的ACK響應(yīng)偏窝,也可能是響應(yīng)超時,那么就會執(zhí)行中斷事務(wù)武学。利用參與者二階段記錄的undo信息來執(zhí)行事務(wù)回滾祭往,并向協(xié)調(diào)者發(fā)送ACK消息,協(xié)調(diào)者收到ACK消息后執(zhí)行事務(wù)中斷

NOTE:
在doCommit階段火窒,如果參與者沒有及時收到協(xié)調(diào)者的反饋(doCommit或abort),參與者都會進(jìn)行事務(wù)的提交硼补。因為一旦進(jìn)入到doCommit階段時,參與者有理由相信大家同意執(zhí)行事務(wù)(所有協(xié)調(diào)者在canCommit反饋為YES熏矿,才會進(jìn)入到preCommit階段)

相對于2PC已骇,3PC降低了參與者的阻塞范圍,并且能在出現(xiàn)單點(diǎn)故障后繼續(xù)保證事務(wù)的提交(見以上NOTE)票编,但同樣會導(dǎo)致數(shù)據(jù)一致性的問題褪储,因為由于網(wǎng)絡(luò)原因,協(xié)調(diào)者發(fā)送的abort響應(yīng)沒有及時被參與者接收到慧域,那么參與者在等待超時之后執(zhí)行了commit操作鲤竹。這樣就和其他接到abort命令并執(zhí)行回滾的參與者之間存在數(shù)據(jù)不一致的情況。


通過以上分析發(fā)現(xiàn)吊趾,2PC和3PC都無法徹底解決分布式的一致性問題宛裕,接下來會分析最為行之有效的Paxos算法

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末瑟啃,一起剝皮案震驚了整個濱河市论泛,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蛹屿,老刑警劉巖屁奏,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異错负,居然都是意外死亡坟瓢,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進(jìn)店門犹撒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來折联,“玉大人,你說我怎么就攤上這事识颊〕狭” “怎么了奕坟?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長清笨。 經(jīng)常有香客問我月杉,道長,這世上最難降的妖魔是什么抠艾? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任苛萎,我火速辦了婚禮,結(jié)果婚禮上检号,老公的妹妹穿的比我還像新娘腌歉。我一直安慰自己,他們只是感情好谨敛,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布究履。 她就那樣靜靜地躺著,像睡著了一般脸狸。 火紅的嫁衣襯著肌膚如雪最仑。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天炊甲,我揣著相機(jī)與錄音泥彤,去河邊找鬼。 笑死卿啡,一個胖子當(dāng)著我的面吹牛吟吝,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播颈娜,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼剑逃,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了官辽?” 一聲冷哼從身側(cè)響起蛹磺,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎同仆,沒想到半個月后萤捆,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡俗批,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年俗或,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片岁忘。...
    茶點(diǎn)故事閱讀 39,902評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡辛慰,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出干像,到底是詐尸還是另有隱情帅腌,我是刑警寧澤辱志,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站狞膘,受9級特大地震影響揩懒,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜挽封,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一已球、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧辅愿,春花似錦智亮、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至癞埠,卻和暖如春状原,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背苗踪。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工颠区, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人通铲。 一個月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓毕莱,卻偏偏與公主長得像,于是被迫代替她去往敵國和親颅夺。 傳聞我的和親對象是個殘疾皇子朋截,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,843評論 2 354

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