分布式事務(wù)之兩階段提交協(xié)議(2PC)

兩階段提交協(xié)議(Two-phase Commit忍啤,2PC)經(jīng)常被用來(lái)實(shí)現(xiàn)分布式事務(wù)。一般分為協(xié)調(diào)器C和若干事務(wù)執(zhí)行者Si兩種角色,這里的事務(wù)執(zhí)行者就是具體的數(shù)據(jù)庫(kù)沦童,協(xié)調(diào)器可以和事務(wù)執(zhí)行器在一臺(tái)機(jī)器上。


2pc.jpg
  1. 我們的應(yīng)用程序(client)發(fā)起一個(gè)開始請(qǐng)求到TC柜候;
  2. TC先將<prepare>消息寫到本地日志搞动,之后向所有的Si發(fā)起<prepare>消息。以支付寶轉(zhuǎn)賬到余額寶為例渣刷,TC給A的prepare消息是通知支付寶數(shù)據(jù)庫(kù)相應(yīng)賬目扣款1萬(wàn)鹦肿,TC給B的prepare消息是通知余額寶數(shù)據(jù)庫(kù)相應(yīng)賬目增加1w。為什么在執(zhí)行任務(wù)前需要先寫本地日志辅柴,主要是為了故障后恢復(fù)用箩溃,本地日志起到現(xiàn)實(shí)生活中憑證 的效果瞭吃,如果沒有本地日志(憑證),出問題容易死無(wú)對(duì)證涣旨;
  3. Si收到<prepare>消息后歪架,執(zhí)行具體本機(jī)事務(wù),但不會(huì)進(jìn)行commit霹陡,如果成功返回<yes>和蚪,不成功返回<no>。同理烹棉,返回前都應(yīng)把要返回的消息寫到日志里攒霹,當(dāng)作憑證。
  4. TC收集所有執(zhí)行器返回的消息浆洗,如果所有執(zhí)行器都返回yes催束,那么給所有執(zhí)行器發(fā)生送commit消息,執(zhí)行器收到commit后執(zhí)行本地事務(wù)的commit操作伏社;如果有任一個(gè)執(zhí)行器返回no抠刺,那么給所有執(zhí)行器發(fā)送abort消息,執(zhí)行器收到abort消息后執(zhí)行事務(wù)abort操作摘昌。

注:TC或Si把發(fā)送或接收到的消息先寫到日志里速妖,主要是為了故障后恢復(fù)用。如某一Si從故障中恢復(fù)后第焰,先檢查本機(jī)的日志买优,如果已收到<commit >,則提交挺举,如果<abort >則回滾杀赢。如果是<yes>,則再向TC詢問一下湘纵,確定下一步脂崔。如果什么都沒有,則很可能在<prepare>階段Si就崩潰了梧喷,因此需要回滾砌左。

現(xiàn)如今實(shí)現(xiàn)基于兩階段提交的分布式事務(wù)也沒那么困難了,如果使用Java铺敌,那么可以使用開源軟件atomikos(http://www.atomikos.com/)來(lái)快速實(shí)現(xiàn)汇歹。

不過但凡使用過的上述兩階段提交的同學(xué)都可以發(fā)現(xiàn)性能實(shí)在是太差,根本不適合高并發(fā)的系統(tǒng)偿凭。為什么产弹?

  • 兩階段提交涉及多次節(jié)點(diǎn)間的網(wǎng)絡(luò)通信,通信時(shí)間太長(zhǎng)弯囊!
  • 事務(wù)時(shí)間相對(duì)于變長(zhǎng)了痰哨,鎖定的資源的時(shí)間也變長(zhǎng)了胶果,造成資源等待時(shí)間也增加好多!

正是由于分布式事務(wù)存在很嚴(yán)重的性能問題斤斧,大部分高并發(fā)服務(wù)都在避免使用早抠,往往通過其他途徑來(lái)解決數(shù)據(jù)一致性問題。

使用事件和消息隊(duì)列實(shí)現(xiàn)分布式事務(wù)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末撬讽,一起剝皮案震驚了整個(gè)濱河市蕊连,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌锐秦,老刑警劉巖咪奖,帶你破解...
    沈念sama閱讀 216,651評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異酱床,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)趟佃,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門扇谣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人闲昭,你說(shuō)我怎么就攤上這事罐寨。” “怎么了序矩?”我有些...
    開封第一講書人閱讀 162,931評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵鸯绿,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我簸淀,道長(zhǎng)瓶蝴,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,218評(píng)論 1 292
  • 正文 為了忘掉前任租幕,我火速辦了婚禮舷手,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘劲绪。我一直安慰自己男窟,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,234評(píng)論 6 388
  • 文/花漫 我一把揭開白布贾富。 她就那樣靜靜地躺著歉眷,像睡著了一般。 火紅的嫁衣襯著肌膚如雪颤枪。 梳的紋絲不亂的頭發(fā)上汗捡,一...
    開封第一講書人閱讀 51,198評(píng)論 1 299
  • 那天嫂冻,我揣著相機(jī)與錄音床绪,去河邊找鬼韧衣。 笑死湿痢,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的台囱。 我是一名探鬼主播淡溯,決...
    沈念sama閱讀 40,084評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼簿训!你這毒婦竟也來(lái)了咱娶?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,926評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤强品,失蹤者是張志新(化名)和其女友劉穎膘侮,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體的榛,經(jīng)...
    沈念sama閱讀 45,341評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡琼了,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,563評(píng)論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了夫晌。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片雕薪。...
    茶點(diǎn)故事閱讀 39,731評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖晓淀,靈堂內(nèi)的尸體忽然破棺而出所袁,到底是詐尸還是另有隱情,我是刑警寧澤凶掰,帶...
    沈念sama閱讀 35,430評(píng)論 5 343
  • 正文 年R本政府宣布燥爷,位于F島的核電站,受9級(jí)特大地震影響懦窘,放射性物質(zhì)發(fā)生泄漏前翎。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,036評(píng)論 3 326
  • 文/蒙蒙 一奶赠、第九天 我趴在偏房一處隱蔽的房頂上張望鱼填。 院中可真熱鬧,春花似錦毅戈、人聲如沸苹丸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)赘理。三九已至,卻和暖如春扇单,著一層夾襖步出監(jiān)牢的瞬間商模,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留施流,地道東北人响疚。 一個(gè)月前我還...
    沈念sama閱讀 47,743評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像瞪醋,于是被迫代替她去往敵國(guó)和親忿晕。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,629評(píng)論 2 354

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