Seate-AT模式

Seata是阿里開源的一個(gè)分布式事務(wù)框架透绩。
Seata主要有兩種分布式事務(wù)實(shí)現(xiàn)方案塞栅,AT及TCC

  • AT模式主要關(guān)注多 DB 訪問的數(shù)據(jù)一致性荒勇,當(dāng)然也包括多服務(wù)下的多 DB 數(shù)據(jù)訪問一致性問題
  • TCC 模式主要關(guān)注業(yè)務(wù)拆分沦零,在按照業(yè)務(wù)橫向擴(kuò)展資源時(shí)餐曼,解決微服務(wù)間調(diào)用的一致性問題

AT模式/MT模式

Seata AT模式是基于XA事務(wù)演進(jìn)而來的一個(gè)分布式事務(wù)中間件默辨,XA是一個(gè)基于數(shù)據(jù)庫實(shí)現(xiàn)的分布式事務(wù)協(xié)議德频,本質(zhì)上和兩階段提交一樣,需要數(shù)據(jù)庫支持缩幸,Mysql5.6以上版本支持XA協(xié)議壹置,其他數(shù)據(jù)庫如Oracle,DB2也實(shí)現(xiàn)了XA接口表谊。
AT不依賴與數(shù)據(jù)庫本身對(duì)協(xié)議的支持钞护,當(dāng)然也不需要數(shù)據(jù)庫支持 XA 協(xié)議。這點(diǎn)對(duì)于微服務(wù)化的架構(gòu)來說是非常重要的:應(yīng)用層不需要為本地事務(wù)和分布式事務(wù)兩類不同場(chǎng)景來適配兩套不同的數(shù)據(jù)庫驅(qū)動(dòng)爆办。

原理

seate.png

XA.png
  • Transaction Coordinator (TC): 事務(wù)協(xié)調(diào)器难咕,維護(hù)全局事務(wù)的運(yùn)行狀態(tài),負(fù)責(zé)協(xié)調(diào)并驅(qū)動(dòng)全局事務(wù)的提交或回滾距辆。
  • Transaction Manager (TM): 控制全局事務(wù)的邊界余佃,負(fù)責(zé)開啟一個(gè)全局事務(wù),并最終發(fā)起全局提交或全局回滾的決議跨算。
  • Resource Manager (RM): 控制分支事務(wù)爆土,負(fù)責(zé)分支注冊(cè)、狀態(tài)匯報(bào)漂彤,并接收事務(wù)協(xié)調(diào)器的指令雾消,驅(qū)動(dòng)分支(本地)事務(wù)的提交和回滾。

使用

  1. 創(chuàng)建Seata TC Server服務(wù)
    Seata TC Server的 db 數(shù)據(jù)庫為:
    (1)global_table :the table to store GlobalSession data
    (2)branch_table:the table to store BranchSession data
    (3)lock_table:the table to store lock data
  2. 使用方數(shù)據(jù)庫增加undo_log表:用于分支事務(wù)的回滾
  3. 方法上增加@GlobalTransactional注解
    Dubbo 分布式事務(wù) Seata 入門 | 芋道源碼 —— 純?cè)创a解析博客

執(zhí)行過程圖

![
seata_at-2.png

](https://upload-images.jianshu.io/upload_images/1117220-db3fbfe37ac96fbd.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

特別注意的是:

  1. 回滾時(shí)通過 XID 和 Branch ID 查找到相應(yīng)的 UNDO LOG 記錄并校驗(yàn)挫望。
    數(shù)據(jù)校驗(yàn):拿 UNDO LOG 中的后鏡與當(dāng)前數(shù)據(jù)進(jìn)行比較,如果有不同狂窑,說明數(shù)據(jù)被當(dāng)前全局事務(wù)之外的動(dòng)作做了修改媳板。這種情況,需要根據(jù)配置策略來做處理泉哈,詳細(xì)的說明在另外的文檔中介紹蛉幸。
  2. 業(yè)務(wù)更新 ssql與插入到UNDO_LOG 表鏡像數(shù)據(jù)是同一個(gè)數(shù)據(jù)。
  3. 整個(gè)過程 全局鎖 在 tx1 結(jié)束前一直是被 tx1 持有的丛晦,所以不會(huì)發(fā)生 臟寫 的問題奕纫。
    http://seata.io/zh-cn/docs/overview/what-is-seata.html

問題:

最大的問題:事務(wù)隔離級(jí)別不能做到 讀已提交 的水平,SQL 的解析還不能涵蓋全部的語法等烫沙。

問題一:隔離性減弱:隔離級(jí)別變?yōu)樽x未提交

在數(shù)據(jù)庫本地隔離級(jí)別 讀已提交 或以上的前提下匹层,F(xiàn)escar 設(shè)計(jì)了由事務(wù)協(xié)調(diào)器維護(hù)的 全局寫排他鎖,來保證事務(wù)間的 寫隔離锌蓄,將全局事務(wù)默認(rèn)定義在 讀未提交 的隔離級(jí)別上升筏。

我們對(duì)隔離級(jí)別的共識(shí)是:微服務(wù)場(chǎng)景產(chǎn)生的分布式事務(wù)撑柔,絕大部分應(yīng)用在 讀已提交 的隔離級(jí)別下工作是沒有問題的。而實(shí)際上您访,這當(dāng)中又有絕大多數(shù)的應(yīng)用場(chǎng)景铅忿,實(shí)際上工作在 讀未提交 的隔離級(jí)別下同樣沒有問題,但仍建議事前做好隔離保證無臟數(shù)據(jù)(如加分布式鎖)
灵汪。

問題二:回滾時(shí)數(shù)據(jù)已被改變
回滾時(shí)通過 XID 和 Branch ID 查找到相應(yīng)的 UNDO LOG 記錄并校驗(yàn)檀训。
數(shù)據(jù)校驗(yàn):拿 UNDO LOG 中的后鏡與當(dāng)前數(shù)據(jù)進(jìn)行比較,如果有不同享言,說明數(shù)據(jù)被當(dāng)前全局事務(wù)之外的動(dòng)作做了修改峻凫。這種情況,需要根據(jù)配置策略來做處理担锤。

解決方式: 臟數(shù)據(jù)需手動(dòng)處理蔚晨,根據(jù)日志提示修正數(shù)據(jù)或者將對(duì)應(yīng)undo刪除(可自定義實(shí)現(xiàn)FailureHandler做郵件通知或其他)

概覽 · seata/seata Wiki · GitHub

官網(wǎng):

Seata 是什么
概覽 · seata/seata Wiki · GitHub
Seata 極簡(jiǎn)入門

引用

Seata簡(jiǎn)介(附帶與其他分布式事務(wù)解決方案對(duì)比)數(shù)據(jù)庫古柏樹下的博客-CSDN博客
seata分布式事務(wù)原理解釋,AT模式簡(jiǎn)介_tianyaleixiaowu的專欄-CSDN博客_seata分布式事務(wù)原理
阿里開源分布式事務(wù)組件 seata : AT 模式的分支事務(wù)處理 - beanlam - SegmentFault 思否

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末肛循,一起剝皮案震驚了整個(gè)濱河市铭腕,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌多糠,老刑警劉巖累舷,帶你破解...
    沈念sama閱讀 222,000評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異夹孔,居然都是意外死亡被盈,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門搭伤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來只怎,“玉大人,你說我怎么就攤上這事怜俐∩肀ぃ” “怎么了?”我有些...
    開封第一講書人閱讀 168,561評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵拍鲤,是天一觀的道長(zhǎng)贴谎。 經(jīng)常有香客問我,道長(zhǎng)季稳,這世上最難降的妖魔是什么擅这? 我笑而不...
    開封第一講書人閱讀 59,782評(píng)論 1 298
  • 正文 為了忘掉前任,我火速辦了婚禮景鼠,結(jié)果婚禮上仲翎,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好谭确,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,798評(píng)論 6 397
  • 文/花漫 我一把揭開白布帘营。 她就那樣靜靜地躺著,像睡著了一般逐哈。 火紅的嫁衣襯著肌膚如雪芬迄。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,394評(píng)論 1 310
  • 那天昂秃,我揣著相機(jī)與錄音禀梳,去河邊找鬼。 笑死肠骆,一個(gè)胖子當(dāng)著我的面吹牛算途,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蚀腿,決...
    沈念sama閱讀 40,952評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼嘴瓤,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了莉钙?” 一聲冷哼從身側(cè)響起廓脆,我...
    開封第一講書人閱讀 39,852評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎磁玉,沒想到半個(gè)月后停忿,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,409評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蚊伞,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,483評(píng)論 3 341
  • 正文 我和宋清朗相戀三年席赂,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片时迫。...
    茶點(diǎn)故事閱讀 40,615評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡颅停,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出掠拳,到底是詐尸還是另有隱情便监,我是刑警寧澤,帶...
    沈念sama閱讀 36,303評(píng)論 5 350
  • 正文 年R本政府宣布碳想,位于F島的核電站,受9級(jí)特大地震影響毁靶,放射性物質(zhì)發(fā)生泄漏胧奔。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,979評(píng)論 3 334
  • 文/蒙蒙 一预吆、第九天 我趴在偏房一處隱蔽的房頂上張望龙填。 院中可真熱鬧,春花似錦、人聲如沸岩遗。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,470評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽宿礁。三九已至案铺,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間梆靖,已是汗流浹背控汉。 一陣腳步聲響...
    開封第一講書人閱讀 33,571評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留返吻,地道東北人姑子。 一個(gè)月前我還...
    沈念sama閱讀 49,041評(píng)論 3 377
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像测僵,于是被迫代替她去往敵國(guó)和親街佑。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,630評(píng)論 2 359