分布式事務

1.名詞解釋:

分布式系統(tǒng):部署在不同結點上的系統(tǒng)通過網(wǎng)絡交互來完成協(xié)同工作的系統(tǒng)箕慧。例如充值和積分系統(tǒng)

事務:事務是指由一組操作組成的一個工作單元,這個工作單元具有原子性(atomicity)汛兜、一致性(consistency)、隔離性(isolation)和持久性(durability)通今。

本地事務:本地事務就是用關系數(shù)據(jù)庫來控制事務粥谬,關系數(shù)據(jù)庫通常都具有ACID特性肛根,傳統(tǒng)的單體應用通常會將數(shù)據(jù)全部存儲在一個數(shù)據(jù)庫中,會借助關系數(shù)據(jù)庫來完成事務控制漏策。

分布式事務

表現(xiàn)1:在分布式系統(tǒng)中一次操作由多個系統(tǒng)協(xié)同完成派哲,這種一次事務操作涉及多個系統(tǒng)通過網(wǎng)絡協(xié)同完成的過程稱為分布式事務!這里強調(diào)的是多個系統(tǒng)通過網(wǎng)絡協(xié)同完成一個事務的過程掺喻,并不強調(diào)多個系統(tǒng)訪問了不同的數(shù)據(jù)庫芭届,即使多個系統(tǒng)訪問的是同一個數(shù)據(jù)庫也是分布式事務,如下圖:

分布式事務

表現(xiàn)2:分布式事務的表現(xiàn)是感耙,一個應用程序使用了多個數(shù)據(jù)源連接了不同的數(shù)據(jù)庫褂乍,當一次事務需要操作多個數(shù)據(jù)源,此時也屬于分布式事務即硼,當系統(tǒng)作了數(shù)據(jù)庫拆分后會出現(xiàn)此種情況逃片。

分布式事務

2.分布式事務有哪些場景??

1) 電商系統(tǒng)中的下單扣庫存電商系統(tǒng)中,訂單系統(tǒng)和庫存系統(tǒng)是兩個系統(tǒng)只酥,一次下單的操作由兩個系統(tǒng)協(xié)同完成 2)金融系統(tǒng)中的銀行卡充值褥实,在金融系統(tǒng)中通過銀行卡向平臺充值需要通過銀行系統(tǒng)和金融系統(tǒng)協(xié)同完成。3)教育系統(tǒng)中下單選課業(yè)務在線教育系統(tǒng)中裂允,用戶購買課程损离,下單支付成功后學生選課成功,此事務由訂單系統(tǒng)和選課系統(tǒng)協(xié)同完成绝编。4) SNS系統(tǒng)的消息發(fā)送在社交系統(tǒng)中發(fā)送站內(nèi)消息同時發(fā)送手機短信僻澎,一次消息發(fā)送由站內(nèi)消息系統(tǒng)和手機通信系統(tǒng)協(xié)同完成。

3.解決方案

1)簡述:消息隊列實現(xiàn)最終一致--》將分布式事務拆分成多個本地事務來完成瓮增,并且由消息隊列異步協(xié)調(diào)完成

流程圖

2)流程:1怎棱、訂單服務和庫存服務完成檢查和預留資源。2绷跑、訂單服務在本地事務中完成添加訂單表記錄和添加“減少庫存任務消息”。3凡资、由定時任務根據(jù)消息表的記錄發(fā)送給MQ通知庫存服務執(zhí)行減庫存操作砸捏。4、庫存服務執(zhí)行減少庫存隙赁,并且記錄執(zhí)行消息狀態(tài)(為避免重復執(zhí)行消息垦藏,在執(zhí)行減庫存之前查詢是否執(zhí)行過此消息)。5伞访、庫存服務向MQ發(fā)送完成減少庫存的消息掂骏。6、訂單服務接收到完成庫存減少的消息后刪除原來添加的“減少庫存任務消息”厚掷。

3)實現(xiàn)最終事務一致要求:預留資源成功理論上要求正式執(zhí)行成功弟灼,如果執(zhí)行失敗會進行重試级解,要求業(yè)務執(zhí)行方法實現(xiàn)冪等。

4)優(yōu)點:由MQ按異步的方式協(xié)調(diào)完成事務田绑,性能較高勤哗。不用實現(xiàn)try/confirm/cancel接口,開發(fā)成本比TCC低掩驱。

5)缺點:此方式基于關系數(shù)據(jù)庫本地事務來實現(xiàn)芒划,會出現(xiàn)頻繁讀寫數(shù)據(jù)庫記錄,浪費數(shù)據(jù)庫資源欧穴,另外對于高并發(fā)操作不是最佳方案民逼。

4.具體實現(xiàn)----中間件解決場景3的問題(手動選課)

1.支付成功后,訂單服務向本地數(shù)據(jù)庫更新訂單狀態(tài)并向消息表寫入“添加選課消息”涮帘,通過本地數(shù)據(jù)庫保證訂單狀態(tài)和添加選課消息的事務缴挖。

2.定時任務掃描消息表,取出“添加選課任務“并發(fā)向MQ焚辅。

3.學習服務接收到添加選課的消息映屋,先查詢本地數(shù)據(jù)庫的歷史消息表是否存在消息,存在則說明已經(jīng)添加選課同蜻,否則向本地數(shù)據(jù)庫添加選課棚点,并向歷史消息表添加選課消息。這里選課表和歷史消息表在同一個數(shù)據(jù)庫湾蔓,通過本地事務保證瘫析。

4.學習服務接收到添加選課的消息,通過查詢消息表判斷如果已經(jīng)添加選課也向MQ發(fā)送“完成添加選課任務的消息”默责,否則則添加選課贬循,完成后向MQ發(fā)送“完成添加選課任務的消息”,

5.訂單服務接收到完成選課的消息后刪除訂單數(shù)據(jù)庫中消息表的“添加選課消息”桃序,為保證后期對賬將消息表的消息先添加到歷史消息表再刪除消息杖虾,表示此消息已經(jīng)完成。

手動選課圖

5.注意點:

1)定時任務發(fā)送消息流程如下:1媒熊、每隔1分鐘掃描一次任務表奇适。1、定時任務掃描task表芦鳍,一次取出多個任務嚷往,取出超過1分鐘未處理的任務? 2、考慮訂單服務可能集群部署柠衅,為避免重復發(fā)送任務使用樂觀鎖的方式每次從任務列表取出要處理的任務 3皮仁、任務發(fā)送完畢更新任務發(fā)送時間

2)樂觀鎖取任務:考慮訂單服務將來會集群部署,為了避免任務在1分鐘內(nèi)重復執(zhí)行,這里使用樂觀鎖贷祈,實現(xiàn)思路如下:1) 每次取任務時判斷當前版本及任務id是否匹配趋急,如果匹配則執(zhí)行任務,如果不匹配則取消執(zhí)行付燥。2) 如果當前版本和任務Id可以匹配到任務則更新當前版本加1.

更新版本號
校驗任務
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末宣谈,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子键科,更是在濱河造成了極大的恐慌闻丑,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,548評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件勋颖,死亡現(xiàn)場離奇詭異嗦嗡,居然都是意外死亡,警方通過查閱死者的電腦和手機饭玲,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評論 3 399
  • 文/潘曉璐 我一進店門侥祭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人茄厘,你說我怎么就攤上這事矮冬。” “怎么了次哈?”我有些...
    開封第一講書人閱讀 167,990評論 0 360
  • 文/不壞的土叔 我叫張陵胎署,是天一觀的道長。 經(jīng)常有香客問我窑滞,道長琼牧,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,618評論 1 296
  • 正文 為了忘掉前任哀卫,我火速辦了婚禮巨坊,結果婚禮上,老公的妹妹穿的比我還像新娘此改。我一直安慰自己趾撵,他們只是感情好,可當我...
    茶點故事閱讀 68,618評論 6 397
  • 文/花漫 我一把揭開白布带斑。 她就那樣靜靜地躺著鼓寺,像睡著了一般。 火紅的嫁衣襯著肌膚如雪勋磕。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,246評論 1 308
  • 那天敢靡,我揣著相機與錄音挂滓,去河邊找鬼。 笑死啸胧,一個胖子當著我的面吹牛赶站,可吹牛的內(nèi)容都是我干的幔虏。 我是一名探鬼主播,決...
    沈念sama閱讀 40,819評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼贝椿,長吁一口氣:“原來是場噩夢啊……” “哼想括!你這毒婦竟也來了?” 一聲冷哼從身側響起烙博,我...
    開封第一講書人閱讀 39,725評論 0 276
  • 序言:老撾萬榮一對情侶失蹤瑟蜈,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后渣窜,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體铺根,經(jīng)...
    沈念sama閱讀 46,268評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,356評論 3 340
  • 正文 我和宋清朗相戀三年乔宿,在試婚紗的時候發(fā)現(xiàn)自己被綠了位迂。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,488評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡详瑞,死狀恐怖掂林,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情坝橡,我是刑警寧澤泻帮,帶...
    沈念sama閱讀 36,181評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站驳庭,受9級特大地震影響刑顺,放射性物質發(fā)生泄漏。R本人自食惡果不足惜饲常,卻給世界環(huán)境...
    茶點故事閱讀 41,862評論 3 333
  • 文/蒙蒙 一蹲堂、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧贝淤,春花似錦柒竞、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至离陶,卻和暖如春稼虎,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背招刨。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評論 1 272
  • 我被黑心中介騙來泰國打工霎俩, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 48,897評論 3 376
  • 正文 我出身青樓打却,卻偏偏與公主長得像杉适,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子柳击,可洞房花燭夜當晚...
    茶點故事閱讀 45,500評論 2 359

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