大白話聊聊分布式事務(wù)

大白話聊聊分布式事務(wù)

什么是分布式事務(wù)

簡單的來說就是模蜡,一個大的操作由兩個或者更多的小的操作共同完成漠趁。而這些小的操作又分布在不同的網(wǎng)絡(luò)主機上。這些操作哩牍,要么全部成功執(zhí)行棚潦,要么全部不執(zhí)行。

拿轉(zhuǎn)賬的例子來說下什么是分布式事務(wù)膝昆。張三和李四在不同的城市丸边,存儲他們賬戶信息的服務(wù)器也在不同的網(wǎng)絡(luò)主機上叠必。張三有30元錢,李四有30元錢妹窖。張三給李四轉(zhuǎn)賬5元就是一個事務(wù)纬朝。完成這個事務(wù),需要兩個操作骄呼。首先得從張三賬戶上扣5元共苛,然后再給李四賬戶上加5元。事務(wù)執(zhí)行完畢后蜓萄,必須是兩個操作都執(zhí)行成功隅茎,要么都失敗。

事務(wù)的特性

分布式事務(wù)本身就是事務(wù)嫉沽,所以也有事務(wù)的特性辟犀。事務(wù)有四個特征ACID:
A:原子性(Atomicity)
事務(wù)中的各個操作單元要么全部做,要么就全部不做绸硕。不能事務(wù)執(zhí)行后堂竟,處于只做一半的狀態(tài)。
C:一致性(Consistency)
事務(wù)執(zhí)行后玻佩,必須由一個一致狀態(tài)變?yōu)榱硗庖粋€一致狀態(tài)出嘹。
I:隔離性(Isolation)
事務(wù)之間不能相互干擾。
D:持久性(Durability)
一旦事務(wù)完成咬崔,對于數(shù)據(jù)的變更是永久的税稼。

分布式事務(wù)實現(xiàn)方式

下面我們就以上面轉(zhuǎn)賬的例子來說下實現(xiàn)分布式事務(wù)的幾種方式。

兩階段提交

兩階段提交的大概流程:

第一階段:
正常情況下的操作過程如下:

1.png

在第一階段刁赦,主要是事務(wù)管理者(經(jīng)理)發(fā)起事務(wù)娶聘,讓各個事務(wù)資源方(職員甲乙)確認資源是否滿足,并做預處理(凍結(jié))甚脉。資源方的操作有可能失敗也可能成功。如铆农,張三賬戶不足5元錢牺氨,沒辦法凍結(jié),就是失敗墩剖。資源方把操作結(jié)果反饋給事務(wù)管理者猴凹。

異常情況下的操作過程如下:

2.png

如果預提交過程中出現(xiàn)任何問題,導致事務(wù)不能執(zhí)行岭皂。將會通知資源方進行撤銷預提交操作郊霎。

第二階段:
如果是職員甲和職員乙都告訴經(jīng)理,操作成功了爷绘。
正常情況下的操作過程如下:

3.png

這個時候书劝,張三賬戶上的金額是25元进倍。李四賬戶上的金額是35元。

異常情況下的操作過程如下:

4.png

這個時候购对,張三賬戶上的金額是30元猾昆。李四賬戶上的金額也是30元。

總而言之骡苞,事務(wù)的執(zhí)行會分為預提交和提交兩步進行垂蜗。任何一個小操作出問題,導致事務(wù)不能完成解幽,將會進行回滾操作贴见。

兩階段提交需要注意的

兩階段提交,要有一個事務(wù)管理者協(xié)調(diào)各方的操作躲株。各方對資源的占用要到整個事務(wù)結(jié)束后才能釋放片部。這樣會影響事務(wù)的效率。當并發(fā)量大的時候徘溢,系統(tǒng)的性能會嚴重下滑吞琐。

事務(wù)管理者和資源方存在通信。有可能存在通信不通暢然爆。如站粟,職員甲接受到扣錢的命令后,職員甲扣完了錢曾雕。由于電話故障等原因奴烙,導致沒辦法通知經(jīng)理已經(jīng)操作成功。因此剖张,各方還要處理通信超時問題切诀。

整個流程需要事務(wù)管理者協(xié)調(diào)各個資源方進行操作。但是搔弄,事務(wù)管理者可能出現(xiàn)問題幅虑。導致沒辦法進行協(xié)調(diào)。如顾犹,經(jīng)理生病了倒庵。

注意冪等性問題§潘ⅲ可能存在對資源方重復調(diào)用的情況擎宝。這種情況下,資源方被調(diào)用多次和調(diào)用一次的效果要一樣浑玛。如上例中绍申,經(jīng)理第二次通知職員甲扣5元的時候,職員甲要像上次一樣,告訴經(jīng)理扣款已經(jīng)完成极阅。但是胃碾,職員甲不能再進行扣款的動作。

基于消息實現(xiàn)

基于消息的實現(xiàn)大概過程如下:

5.png

基于消息的分布式事務(wù)實現(xiàn)中涂屁,引入了消息中間件(助理)书在,負責消息的傳遞和事務(wù)執(zhí)行狀態(tài)的詢問。這樣就降低了系統(tǒng)間的耦合度拆又。

為什么職員甲在進行扣款前儒旬,要告訴助理?主要是怕自己扣款成功了帖族,又忘記告訴助理栈源。這個時候,助理也就沒辦法通知職員乙操作了竖般。告訴助理后甚垦,如果職員甲忘記了,助理可以詢問職員甲涣雕,是否執(zhí)行成功艰亮。進而決定是否該通知職員乙進行加錢操作。

如果職員甲扣款失敗挣郭,則應(yīng)該通知助理迄埃。助理在這種情況下,就不英再通知職員乙加錢兑障。

基于消息實現(xiàn)的問題

基于消息的分布式事務(wù)實現(xiàn)侄非,講究的是最終一致性。也即所有的本地事務(wù)執(zhí)行完畢后流译,整個狀態(tài)的一致逞怨。

整個事務(wù)一般不會有回滾操作。如福澡,當職員乙操作失敗的時候叠赦,職員應(yīng)該是再次通知職員乙重試。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末革砸,一起剝皮案震驚了整個濱河市眯搭,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌业岁,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件寇蚊,死亡現(xiàn)場離奇詭異笔时,居然都是意外死亡,警方通過查閱死者的電腦和手機仗岸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進店門允耿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來借笙,“玉大人,你說我怎么就攤上這事较锡∫导冢” “怎么了?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵蚂蕴,是天一觀的道長低散。 經(jīng)常有香客問我,道長骡楼,這世上最難降的妖魔是什么熔号? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮鸟整,結(jié)果婚禮上引镊,老公的妹妹穿的比我還像新娘。我一直安慰自己篮条,他們只是感情好弟头,可當我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著涉茧,像睡著了一般赴恨。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上降瞳,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天嘱支,我揣著相機與錄音,去河邊找鬼挣饥。 笑死除师,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的扔枫。 我是一名探鬼主播汛聚,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼短荐!你這毒婦竟也來了倚舀?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤忍宋,失蹤者是張志新(化名)和其女友劉穎痕貌,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體糠排,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡舵稠,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片哺徊。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡室琢,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出落追,到底是詐尸還是另有隱情盈滴,我是刑警寧澤,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布轿钠,位于F島的核電站巢钓,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏谣膳。R本人自食惡果不足惜竿报,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望继谚。 院中可真熱鬧烈菌,春花似錦、人聲如沸花履。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽诡壁。三九已至济瓢,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間妹卿,已是汗流浹背旺矾。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留夺克,地道東北人箕宙。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像铺纽,于是被迫代替她去往敵國和親柬帕。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,901評論 2 345

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