數(shù)據(jù)庫 分布式事務 2階提交 3階提交

在微服務架構中兄渺,隨著服務的逐步拆分趋厉,數(shù)據(jù)庫私有已經(jīng)成為共識寨闹。
隨著用戶訪問量的逐漸上漲,數(shù)據(jù)庫甚至是服務的分片君账、分區(qū)繁堡、水平拆分、垂直拆分已經(jīng)逐漸成為較為常用的提升瓶頸的解決方案乡数,因此越來越多的原子操作變成了跨庫甚至是跨服務的事務操作椭蹄。

例如一個電商應用,用戶下單后需要操作訂單表瞳脓,庫存表和用戶表塑娇,如果這三個表是在同一個數(shù)據(jù)庫實例中,可以放在一個事務中來保持一致性:

start transaction
insert into orders...
update inventories...
update users...
commit

如果這三個表是在三個不同的數(shù)據(jù)庫實例中劫侧,又如何保證一致性呢埋酬?

分布式事務

多個副本 replica,存在不同的物理機器上烧栋。
在分布式數(shù)據(jù)庫上写妥,提交或回滾事務的決定必須統(tǒng)一。即要么一起提交审姓,要么一起回滾珍特。

2階提交 Two Phase Commitment

image

準備階段 Prepare

  • 協(xié)調(diào)者(事務管理器)向所有參與者詢問是否可以執(zhí)行提交操作 vote,并等待各個參與者的相應魔吐。
  • 參與者執(zhí)行所有事務操作扎筒,并寫入 redo log 和 undo log。
  • 參與者相應詢問:
    • 若實際執(zhí)行成功酬姆,返回 “同意”
    • 若實際執(zhí)行失敗嗜桌,返回 “中止”

提交階段

  • 若所有參與者都返回 “同意”

    • 協(xié)調(diào)者(事務管理器)向所有參與者發(fā)出 “正式提交” 的請求。
    • 參與者收到請求后辞色,正式提交骨宠。
    • 參與者返回 “完成”
    • 協(xié)調(diào)者(事務管理器)收到所有的 “完成” 消息后,完成事務层亿。
  • 若有任何一個參與者返回 “中止”桦卒,或詢問超時(即有部分參與者沒有相應):

    • 協(xié)調(diào)者(事務管理器)向所有參與者發(fā)出 “回滾” 的請求。
    • 參與者收到請求后匿又,利用 undo log 進行回滾方灾。
    • 參與者返回 “回滾完成”
    • 協(xié)調(diào)者(事務管理器)收到所有的 “回滾完成” 消息后琳省,取消事務迎吵。

缺點:

  • 所有參與者都是事務阻塞的躲撰。
  • 單點故障针贬。協(xié)調(diào)者一旦故障,則無法進行拢蛋。
  • 數(shù)據(jù)不一致桦他。在第二個階段,協(xié)調(diào)者(事務管理器)向所有參與者發(fā)出 “正式提交” 或者 “回滾” 的請求谆棱,部分參與者可能由于網(wǎng)絡問題收不到快压。從而導致有的參與者提交,有的沒有提交垃瞧。

分布式系統(tǒng)中的所有通信均存在著三種狀態(tài):成功蔫劣,失敗,超時个从。其中脉幢,超時狀態(tài)的存在是我們在設計分布式系統(tǒng)時所面對的永遠的痛,2PC 同樣存在問題嗦锐,尤其是在發(fā)送完可以提交的指令后嫌松,參與者在沒有收到提交或者回滾的指令時,面對已經(jīng)上鎖的資源奕污,面對已經(jīng)寫出去的 undo log 或者 redo log萎羔,參與者會一時陷入手足無措的狀態(tài),為了解決這個問題碳默,3PC 應運而生贾陷。

3階提交 Three Phase Commitment

image

3PC 在 commit 之前增加了 preCommit 的過程,使得在參與者在收不到確認時嘱根,依然可以從容 commit 或者 rollback髓废,避免資源鎖定太久導致浪費。但是 3PC 同樣存在著很多問題儿子。實現(xiàn)起來非常復雜瓦哎,因為很難通過多次詢問來解決系統(tǒng)間分歧問題,尤其是存在超時狀態(tài)互不信任的分布式網(wǎng)絡中,這也就是著名的拜占庭將軍問題蒋譬。

MySQL 分布式事務

XA 事務就是兩階段提交的一種實現(xiàn)方式割岛。

MySQL InnoDB 存儲引擎提供了對 XA 事務的支持,并通過 XA 事務來支持分布式事務的實現(xiàn)犯助。

XA 事務由如下組成:

  • 一個或多個資源管理器:提供訪問事務資源的方法癣漆。通常一個數(shù)據(jù)庫就是一個資源管理器。 例如 MySQL 數(shù)據(jù)庫剂买。
  • 一個事務管理器:協(xié)調(diào)參與全局事務中的各個事務惠爽。需要和參與全局事務的所有資源管理器進行通信。 例如連接 MySQL 服務端的客戶端瞬哼。
  • 一個應用程序:定義事務的邊界婚肆,指定全局事務中的操作。

參考:
https://mp.weixin.qq.com/s/43wwC4lp77m4foVPEgTRlA

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末坐慰,一起剝皮案震驚了整個濱河市较性,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌结胀,老刑警劉巖赞咙,帶你破解...
    沈念sama閱讀 221,406評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異糟港,居然都是意外死亡攀操,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,395評論 3 398
  • 文/潘曉璐 我一進店門秸抚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來速和,“玉大人,你說我怎么就攤上這事耸别〗“牛” “怎么了?”我有些...
    開封第一講書人閱讀 167,815評論 0 360
  • 文/不壞的土叔 我叫張陵秀姐,是天一觀的道長慈迈。 經(jīng)常有香客問我,道長省有,這世上最難降的妖魔是什么痒留? 我笑而不...
    開封第一講書人閱讀 59,537評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮蠢沿,結果婚禮上伸头,老公的妹妹穿的比我還像新娘。我一直安慰自己舷蟀,他們只是感情好恤磷,可當我...
    茶點故事閱讀 68,536評論 6 397
  • 文/花漫 我一把揭開白布面哼。 她就那樣靜靜地躺著,像睡著了一般扫步。 火紅的嫁衣襯著肌膚如雪魔策。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,184評論 1 308
  • 那天河胎,我揣著相機與錄音闯袒,去河邊找鬼。 笑死游岳,一個胖子當著我的面吹牛政敢,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播胚迫,決...
    沈念sama閱讀 40,776評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼喷户,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了晌区?” 一聲冷哼從身側響起摩骨,我...
    開封第一講書人閱讀 39,668評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎朗若,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體昌罩,經(jīng)...
    沈念sama閱讀 46,212評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡哭懈,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,299評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了茎用。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片遣总。...
    茶點故事閱讀 40,438評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖轨功,靈堂內(nèi)的尸體忽然破棺而出旭斥,到底是詐尸還是另有隱情,我是刑警寧澤古涧,帶...
    沈念sama閱讀 36,128評論 5 349
  • 正文 年R本政府宣布垂券,位于F島的核電站,受9級特大地震影響羡滑,放射性物質(zhì)發(fā)生泄漏菇爪。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,807評論 3 333
  • 文/蒙蒙 一柒昏、第九天 我趴在偏房一處隱蔽的房頂上張望凳宙。 院中可真熱鬧,春花似錦职祷、人聲如沸氏涩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,279評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽是尖。三九已至奖亚,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間析砸,已是汗流浹背昔字。 一陣腳步聲響...
    開封第一講書人閱讀 33,395評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留首繁,地道東北人作郭。 一個月前我還...
    沈念sama閱讀 48,827評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像弦疮,于是被迫代替她去往敵國和親夹攒。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,446評論 2 359

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