單機(jī)事務(wù)、傳統(tǒng)分布式事務(wù)和互聯(lián)網(wǎng)分布式事務(wù)的解決方案

1 數(shù)據(jù)庫單機(jī)事務(wù)的實(shí)現(xiàn)原理

  • 數(shù)據(jù)庫事務(wù)的ACID特性;
  • MySQL的undo和redo日志的例子;

2 經(jīng)典的X/OpenDTP事務(wù)模型

如果一個(gè)事務(wù)內(nèi)的SQL,要分別操作幾個(gè)獨(dú)立的數(shù)據(jù)庫服務(wù)器上的數(shù)據(jù),那這種事務(wù)就變成了分布式事務(wù)。于是就有技術(shù)達(dá)人制定了首個(gè)分布式事務(wù)表中規(guī)范-X/OpenDTP,此規(guī)范提出的二階段提交模型(2PC)和“TCP三次握手”一樣成為經(jīng)典。

X/OpenDTP模型

AP:應(yīng)用程序。AP負(fù)責(zé)發(fā)送XA指令,觸發(fā)分布式事務(wù),由TM接收,并發(fā)送給相關(guān)的RM。
RM:數(shù)據(jù)庫或者很少被使用的消息中間件。負(fù)責(zé)執(zhí)行XA指令,每個(gè)RM只負(fù)責(zé)執(zhí)行自己的指令。
TM:事務(wù)管理器、事務(wù)協(xié)調(diào)者,負(fù)責(zé)接收來自AP發(fā)送的XA事務(wù)指令,并且調(diào)度和協(xié)調(diào)參與事務(wù)的所有RM,確保事務(wù)正確完成或者回滾。

X/OpenDTP模型中最為知名的就是兩階段提交協(xié)議。在X/OpenDTP模型中,當(dāng)一個(gè)分布式事務(wù)所涉及的SQL邏輯都執(zhí)行完成,并到了RMs最后提交事務(wù)的關(guān)鍵時(shí)刻,為了避免分布式系統(tǒng)所固有的不可靠性導(dǎo)致事務(wù)提交失敗,TM決定,實(shí)施兩步走的方案:

① 先發(fā)起投票表決,通知所有RM先完成事務(wù)提交過程所涉及的各種復(fù)雜的準(zhǔn)備工作,比如寫redo、undo日志,盡量把提交過程中所有消耗時(shí)間的操作和準(zhǔn)備都提前完成,確保后面100%成功提交事務(wù)。如果準(zhǔn)備工作失敗,則及時(shí)通知TM。
② 真正提交階段。在該階段,TM將基于第1階段的投票結(jié)果進(jìn)行決策,決定提交或者取消事務(wù)。當(dāng)且僅當(dāng)所有的RM都同意提交時(shí),TM才通知所有RM正式提交,否則TM將通知所有RM取消事務(wù)。操作流程如下圖所示:

2 phrase commit

兩階段提交的精妙之處在于,它充分考慮了分布式系統(tǒng)的不可靠因素,并采用非常簡單的方式,將導(dǎo)致事務(wù)提交失敗的概率降到最小。下面給出一個(gè)形象的解釋過程,來說明二階段提交時(shí)如何做到這一點(diǎn)的:

假如一個(gè)事務(wù)的提交過程總共需要30秒,其中Prepare階段需要花費(fèi)28秒,真正的commit階段只需要花費(fèi)2秒,那么Commit階段發(fā)生錯(cuò)誤的概率與Prepare階段相比,只是2/28(7.14%),也就是說如果Prepare階段成功了,這Commit階段失敗的概率就很小,從而增加了分布式事務(wù)執(zhí)行成功的概率。

但是二階段提交也有明顯的缺點(diǎn),在實(shí)際應(yīng)用中使用較少。主要原因如下:

  • XA事務(wù)的介入增加了TM中間件,使系統(tǒng)變得更復(fù)雜了,而且大部分TM中間件都是收費(fèi)的。
  • XA事務(wù)應(yīng)為增加了TM,導(dǎo)致其性能并不高。

3 互聯(lián)網(wǎng)中分布式事務(wù)解決方案

互聯(lián)網(wǎng)領(lǐng)域有幾種流行的分布式解決方案,但未形成像X/OpenDTP那樣標(biāo)準(zhǔn)的工業(yè)規(guī)范。常用的解決方案如下:

解決方案1:業(yè)務(wù)接口整合,避免分布式事務(wù);
解決方案2:最終一致性方法,eBay模式;
解決方案3:X/OpenDTP模式的支付寶的DTS方案;

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1、事務(wù)簡介 ? 事務(wù)(Transaction)是訪問并可能更新數(shù)據(jù)庫中各種數(shù)據(jù)項(xiàng)的一個(gè)程序執(zhí)行單元(u...
    逗逼程序員閱讀 774評(píng)論 0 1
  • 這么多年在外打工遇到有很多的人和事,像我們沒文化的農(nóng)村人,背井離鄉(xiāng)在外的多是生活拮據(jù)、辛酸苦逼,今天講一個(gè)歷經(jīng)苦難...
    覃吉信閱讀 883評(píng)論 7 2
  • 除了愛情,旅行大概也是人生最美好的事物之一。未知不止帶來驚喜、愉悅,也會(huì)制造遺憾,生出悵惘。 旅行不是生活,做出選...
    南瓜bu說話閱讀 178評(píng)論 0 0
  • 我想說,我經(jīng)歷了一次復(fù)利曲線! 最近事情還算比較順,至少比我之前料想的要順。在找工作期間自己像是開掛了一般,命中率...
    小明有主見了嗎閱讀 395評(píng)論 14 0
  • 如果無能為力,那就順其自然吧。 不要把人生花費(fèi)在討厭人的事情上,這一生要疼愛別人還不夠。 哪有那么多時(shí)間去想那些令...
    檸檬酸半心nana閱讀 3,518評(píng)論 0 2

友情鏈接更多精彩內(nèi)容