分布式事務(wù)解決方法

方法一喷市、補償事務(wù)(TCC)? 嚴選跌宛、阿里酗宋、螞蟻金服

Tcc 其實就是采用的補償機制,其核心思想是:針對每個操作疆拘,都要注冊一個與其對應(yīng)的確認和補償(撤銷)操作蜕猫,它分為三個階段

try階段:主要是對業(yè)務(wù)系統(tǒng)做檢測及預(yù)留資源

confirm階段:主要是對業(yè)務(wù)系統(tǒng)做確認提交,try階段執(zhí)行成功并開始執(zhí)行confirm階段時哎迄,默認-- confirm階段是不會錯誤的回右,即只要try成功,confirm一定成功

cancel階段:主要是在業(yè)務(wù)執(zhí)行錯誤漱挚,需要回滾的狀態(tài)下執(zhí)行的業(yè)務(wù)取消翔烁,預(yù)留資源釋放

? 舉例說明

張三要向李四轉(zhuǎn)賬,思路大概是:我們有一個本地方法旨涝,里面依次調(diào)用

? ①. 首先在try階段租漂,要先調(diào)用遠程接口把兩個人的錢凍結(jié)起

? ②. 在confirm階段,執(zhí)行遠程調(diào)用的轉(zhuǎn)賬的操作颊糜,轉(zhuǎn)賬成功進行解凍

? ③. 第二步執(zhí)行成功哩治,則轉(zhuǎn)賬成功,如失敗衬鱼,則調(diào)用遠程凍結(jié)接口對應(yīng)的解凍方法(cancel)

? 優(yōu)點:跟2pc相比业筏,實現(xiàn)及流程相對簡單些,但數(shù)據(jù)的一致性比2pc要差一些

? 缺點:第2鸟赫、3步都有可能失敗蒜胖,Tcc屬于應(yīng)用層的補償方式,需程序員在實現(xiàn)時寫很多補償代碼

方法二抛蚤、本地消息表(異步確保)

比如:支付寶台谢、微信支付主動查詢支付狀態(tài),對帳單的形式

本地消息表與業(yè)務(wù)數(shù)據(jù)表處于同一個數(shù)據(jù)庫中岁经,這樣就能利用本地事務(wù)來保證在對這兩個表的操作滿足事務(wù)特性朋沮,并且使用了消息隊列來保證最終一致性

? 操作流程

①. 在分布式事務(wù)操作的一方,完成寫業(yè)務(wù)數(shù)據(jù)的操作之后缀壤,向本地消息表發(fā)送一個消息樊拓,本地事務(wù)能保證這個消息一定會被寫入本地消息表中

②. 之后將本地消息表中的消息轉(zhuǎn)發(fā)到Kafka等消息隊列中,如果轉(zhuǎn)發(fā)成功塘慕,則將消息從本地消息表中刪除筋夏,否則繼續(xù)重新轉(zhuǎn)發(fā)

③. 在分布式事務(wù)操作的另一方從消息隊列中讀取一個消息,并執(zhí)行消息中的操作

基本思路就是:

消息生產(chǎn)方图呢,需要額外建一個消息表条篷,并記錄消息發(fā)送狀態(tài)骗随。消息表和業(yè)務(wù)數(shù)據(jù)要在一個事務(wù)里提交,也就是說他們要在一個數(shù)據(jù)庫里面赴叹。然后消息會經(jīng)過MQ發(fā)送到消息的消費方鸿染。如果消息發(fā)送失敗,會進行重試發(fā)送稚瘾。

消息消費方牡昆,需要處理這個消息,并完成自己的業(yè)務(wù)邏輯摊欠。此時如果本地事務(wù)處理成功丢烘,表明已經(jīng)處理成功了,如果處理失敗些椒,那么就會重試執(zhí)行播瞳。如果是業(yè)務(wù)上面的失敗,可以給生產(chǎn)方發(fā)送一個業(yè)務(wù)補償消息免糕,通知生產(chǎn)方進行回滾等操作赢乓。

生產(chǎn)方和消費方定時掃描本地消息表,把還沒處理完成的消息或者失敗的消息再發(fā)送一遍石窑。如果有靠譜的自動對賬補賬邏輯牌芋,這種方案還是非常實用的。


? 優(yōu)點:一種非常經(jīng)典的實現(xiàn)松逊,避免了分布式事務(wù)躺屁,實現(xiàn)了最終一致性

? 缺點:消息表會耦合到業(yè)務(wù)系統(tǒng)中,如何沒有封裝好的解決方案经宏,會有很多雜活需要處理

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末犀暑,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子烁兰,更是在濱河造成了極大的恐慌耐亏,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件沪斟,死亡現(xiàn)場離奇詭異广辰,居然都是意外死亡,警方通過查閱死者的電腦和手機币喧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進店門轨域,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人杀餐,你說我怎么就攤上這事≈炀蓿” “怎么了史翘?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我琼讽,道長必峰,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任钻蹬,我火速辦了婚禮吼蚁,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘问欠。我一直安慰自己肝匆,他們只是感情好,可當我...
    茶點故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布顺献。 她就那樣靜靜地躺著旗国,像睡著了一般。 火紅的嫁衣襯著肌膚如雪注整。 梳的紋絲不亂的頭發(fā)上能曾,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天,我揣著相機與錄音肿轨,去河邊找鬼寿冕。 笑死,一個胖子當著我的面吹牛椒袍,可吹牛的內(nèi)容都是我干的驼唱。 我是一名探鬼主播,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼槐沼,長吁一口氣:“原來是場噩夢啊……” “哼曙蒸!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起岗钩,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤纽窟,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后兼吓,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體臂港,經(jīng)...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年视搏,在試婚紗的時候發(fā)現(xiàn)自己被綠了审孽。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,137評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡浑娜,死狀恐怖佑力,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情筋遭,我是刑警寧澤打颤,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布暴拄,位于F島的核電站,受9級特大地震影響编饺,放射性物質(zhì)發(fā)生泄漏乖篷。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一透且、第九天 我趴在偏房一處隱蔽的房頂上張望撕蔼。 院中可真熱鬧,春花似錦秽誊、人聲如沸鲸沮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽诉探。三九已至,卻和暖如春棍厌,著一層夾襖步出監(jiān)牢的瞬間肾胯,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工耘纱, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留敬肚,地道東北人。 一個月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓束析,卻偏偏與公主長得像艳馒,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子员寇,可洞房花燭夜當晚...
    茶點故事閱讀 45,086評論 2 355

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