分布式事務(wù)

一、什么是事務(wù)

要么都成功伞鲫,要么都失敗

1. 本地事務(wù)

用關(guān)系型數(shù)據(jù)庫控制事務(wù)粘茄,基于關(guān)系型數(shù)據(jù)庫的事務(wù)被稱為本地事務(wù)。
數(shù)據(jù)庫事務(wù)的四大特性ACID

  • A:原子性
  • C:一致性
  • I:隔離性秕脓,多線程操作數(shù)據(jù)庫柒瓣,并發(fā)的事務(wù)操作互不干擾,避免臟讀撒会、重復讀
  • D:持久性嘹朗,事務(wù)完成后,數(shù)據(jù)的更改持久化到數(shù)據(jù)庫诵肛,不會被回滾屹培。

2. 分布式事務(wù)

多服務(wù)遠程協(xié)作,由于網(wǎng)絡(luò)問題就會導致分布式事務(wù)問題怔檩。

2.1 分布式事務(wù)產(chǎn)生的場景

a) 微服務(wù)架構(gòu)

微服務(wù)架構(gòu)示例.png

b) 單體系統(tǒng)訪問多個數(shù)據(jù)庫實例

跨數(shù)據(jù)庫實例產(chǎn)生分布式事務(wù)


跨數(shù)據(jù)庫實例產(chǎn)生分布式事務(wù).png

c) 多服務(wù)訪問同一個數(shù)據(jù)庫實例

多服務(wù)訪問同一個數(shù)據(jù)庫實例.png

以上均為產(chǎn)生分布式事務(wù)的典型場景褪秀。

二、分布式事務(wù)的基礎(chǔ)理論

1. CAP理論

  • C:一致性
  • A:可用性
  • P:分區(qū)容忍性


    CAP定理.png

    數(shù)據(jù)庫讀寫分離業(yè)務(wù)場景.png

    一致性.png

    可用性.png

    分區(qū)容忍性.png

    AP組合.png

    CA組合.png

2. BASE理論

BASE理論.png

BASE理論.png

三薛训、分布式事務(wù)的解決方案

1. 兩階段提交2PC

1.1 什么是2PC

2PC將事務(wù)流程分為兩個階段:準備階段P媒吗、提交階段C


示例.png

2PC.png

2PC.png

1.2 2PC解決方案

a) XA方案

XA方案.png

執(zhí)行流程.png

XA方案.png

XA方案.png

b) Seata方案

Seata方案.png

Seata方案.png

Seata方案.png

TM是通知方,TC是執(zhí)行者


Seata方案.png

Seata方案.png

Seata方案.png

2. TCC

2.1 什么是TCC

什么是TCC .png

什么是TCC .png

Try成功就confirm或人工接入處理
Try失敗就cancel
confirm和cancel失敗需要重試乙埃,保證冪等性


什么是TCC.png

2.2 TCC的解決方案

TCC的解決方案.png

TCC的解決方案.png

TCC的解決方案.png

TCC的解決方案.png

冪等:一個功能無論執(zhí)行多少次闸英,效果是一樣的


TCC的解決方案.png

TCC的解決方案.png

TCC的解決方案.png

TCC的解決方案.png

TCC的解決方案.png

TCC的解決方案.png

3. 可靠消息最終一致性

3.1 什么是可靠消息最終一致性事務(wù)

可靠消息最終一致性方案是指當事務(wù)發(fā)起方執(zhí)行完成本地事務(wù)后并發(fā)出一條消息,事務(wù)參與方(消息消費者)一定能夠接受消息并處理事務(wù)成功介袜,此方案強調(diào)的是只要消息發(fā)給事務(wù)參與方最終事務(wù)達成一致甫何。

1. 本地事務(wù)與消息發(fā)送的原子性問題

可靠消息最終一致性.png

可靠消息最終一致性.png

2. 事務(wù)參與方一定要接收到消息

如果沒有收到,重發(fā)機制

3. 消息重復消費的問題

由于網(wǎng)絡(luò)的原因遇伞,某個消費節(jié)點超時但消費成功辙喂,此時消息中間件會重復投遞此消息,就導致了消息的重復消費鸠珠。
要解決消息重復消費的問題就是要實現(xiàn)事務(wù)參與方的方法冪等性巍耗。

3.2 可靠消息最終一致性解決方案

1. 本地消息表方案

本地消息表方案.png

本地消息表方案.png

本地消息表方案.png

數(shù)據(jù)庫端需要定時掃描消息表,性能開銷會比較大渐排。

2. RocketMQ事務(wù)消息方案

RocketMQ.png

事務(wù)消息機制.png

4. 最大努力通知

4.1 什么是最大努力通知

最大努力通知.png

a) 目標

發(fā)起通知方通過一定的機制最大努力將業(yè)務(wù)處理結(jié)果通知到接收方炬太。

  • 有一定的消息重復通知機制
  • 消息校對機制:如果盡最大努力也沒有通知到接收方,或者接收方消費消息后要再次消費驯耻,此時可由接收方主動向通知方查詢消息信息來滿足需求娄琉。

b)最大努力通知與可靠消息一致性

最大努力通知與可靠消息一致性.png

可靠消息一致性:發(fā)起方保證可靠性次乓,關(guān)注交易過程,消息從發(fā)出到接收的一致性孽水。
最大努力通知:接收方保證可靠性票腰,用于交易后的通知事務(wù),只提供消息接收的可靠性機制女气。

4.2 最大努力通知解決方案

a) 方案一

方案一.png

b) 方案二

方案二.png

方案二流程.png

方案一與方案二的不同.png

三杏慰、總結(jié)

分布式事務(wù)對比分析:

  1. 2PC
    最大的詬病是一個阻塞協(xié)議,RM在執(zhí)行分支事務(wù)后需要等待TM的決定炼鞠,此時服務(wù)會阻塞并鎖定資源缘滥。由于其阻塞機制和最差時間復雜度高,因此谒主,這種設(shè)計不能適應(yīng)隨著事務(wù)涉及的服務(wù)數(shù)量增加而擴展的需要朝扼,很難用于并發(fā)較高以及子事務(wù)生命周期較長(long-running transactions)的分布式服務(wù)中。
  2. TCC
    2PC通常都是在跨庫的DB層面霎肯,而TCC則在應(yīng)用層面的處理擎颖,需要通過業(yè)務(wù)邏輯來實現(xiàn)。這種分布式事務(wù)的實現(xiàn)方式的優(yōu)勢在于观游,可以讓應(yīng)用自己定義數(shù)據(jù)操作的粒度搂捧,使得降低鎖沖突、提高吞吐量成為可能懂缕。而不足之處在于對應(yīng)用的侵入性非常強允跑,業(yè)務(wù)邏輯的每個分支都要實現(xiàn)try、confirm搪柑、cancel三個操作聋丝,實現(xiàn)難度大,需要安裝網(wǎng)絡(luò)狀態(tài)工碾、系統(tǒng)故障等不同的失敗原因?qū)崿F(xiàn)不同的回滾策略潮针。典型場景:登錄送優(yōu)惠券等。
  3. 可靠消息最終一致性
    可靠消息最終一致性事務(wù)適合執(zhí)行周期長且實時性要求不高的場景倚喂,引入消息機制后,同步的事務(wù)操作變?yōu)榛谙?zhí)行的異步操作瓣戚,避免了分布式事務(wù)中的同步阻塞操作的影響端圈,并實現(xiàn)了兩個服務(wù)的解耦。典型的使用場景:注冊送積分子库、登錄送優(yōu)惠券等舱权。
  4. 最大努力通知
    最大努力通知是分布式事務(wù)中要求最低的一種,適用于一些最終一致性時間敏感度低的業(yè)務(wù)仑嗅,允許發(fā)起通知方處理業(yè)務(wù)失敗宴倍,在接收通知方收到通知后積極進行失敗處理张症,無論發(fā)起通知方如何處理結(jié)果都不影響到接收通知方的后續(xù)處理;發(fā)起通知方需提供查詢執(zhí)行情況接口鸵贬,用于接收通知方校對結(jié)果俗他。典型場景:銀行通知、支付結(jié)果通知等阔逼。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末兆衅,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子嗜浮,更是在濱河造成了極大的恐慌羡亩,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,978評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件危融,死亡現(xiàn)場離奇詭異畏铆,居然都是意外死亡,警方通過查閱死者的電腦和手機吉殃,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評論 2 384
  • 文/潘曉璐 我一進店門辞居,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人寨腔,你說我怎么就攤上這事速侈。” “怎么了迫卢?”我有些...
    開封第一講書人閱讀 156,623評論 0 345
  • 文/不壞的土叔 我叫張陵倚搬,是天一觀的道長。 經(jīng)常有香客問我乾蛤,道長锥债,這世上最難降的妖魔是什么缀雳? 我笑而不...
    開封第一講書人閱讀 56,324評論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上月趟,老公的妹妹穿的比我還像新娘。我一直安慰自己讶泰,他們只是感情好毅待,可當我...
    茶點故事閱讀 65,390評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著酪捡,像睡著了一般叁征。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上逛薇,一...
    開封第一講書人閱讀 49,741評論 1 289
  • 那天捺疼,我揣著相機與錄音,去河邊找鬼永罚。 笑死啤呼,一個胖子當著我的面吹牛卧秘,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播官扣,決...
    沈念sama閱讀 38,892評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼翅敌,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了醇锚?” 一聲冷哼從身側(cè)響起哼御,我...
    開封第一講書人閱讀 37,655評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎焊唬,沒想到半個月后恋昼,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,104評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡赶促,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年液肌,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鸥滨。...
    茶點故事閱讀 38,569評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡嗦哆,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出婿滓,到底是詐尸還是另有隱情老速,我是刑警寧澤,帶...
    沈念sama閱讀 34,254評論 4 328
  • 正文 年R本政府宣布凸主,位于F島的核電站橘券,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏卿吐。R本人自食惡果不足惜旁舰,卻給世界環(huán)境...
    茶點故事閱讀 39,834評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望嗡官。 院中可真熱鬧箭窜,春花似錦、人聲如沸衍腥。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽婆咸。三九已至竹捉,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間擅耽,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評論 1 264
  • 我被黑心中介騙來泰國打工物遇, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留乖仇,地道東北人憾儒。 一個月前我還...
    沈念sama閱讀 46,260評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像乃沙,于是被迫代替她去往敵國和親起趾。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,446評論 2 348

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