前言
昨天有小伙伴私信小編說(shuō)想小編出一期Seata分布式事物XA與AT模式的解析,經(jīng)過(guò)昨晚的熬夜加班整理土榴,今天將為大家?guī)?lái)Seata 分布式事務(wù) XA 與 AT 的全面剖析。文章分為:XA模式是什么?什么是 Seata 的事務(wù)模式撬呢?AT模式是什么?為什么Seata要支持XA模式妆兑?AT與XA之間的關(guān)系魂拦,五個(gè)問(wèn)題小編將一一為大家講解,最后附上總結(jié)搁嗓,話(huà)不多說(shuō)咱們直接進(jìn)入正題芯勘。
1. XA模式是什么?
首先正如煊檍兄所言腺逛,了解了什么是XA與什么是Seata定義的事務(wù)模式荷愕,便一目了然。
1.1 什么是XA
用非常官方的話(huà)來(lái)說(shuō)
XA 規(guī)范 是 X/Open 組織定義的分布式事務(wù)處理(DTP棍矛,Distributed Transaction Processing)標(biāo)準(zhǔn)安疗。
XA 規(guī)范 描述了全局的事務(wù)管理器與局部的資源管理器之間的接口。XA規(guī)范 的目的是允許的多個(gè)資源(如數(shù)據(jù)庫(kù)够委,應(yīng)用服務(wù)器荐类,消息隊(duì)列等)在同一事務(wù)中訪(fǎng)問(wèn),這樣可以使 ACID 屬性跨越應(yīng)用程序而保持有效茁帽。
XA 規(guī)范 使用兩階段提交(2PC玉罐,Two-Phase Commit)來(lái)保證所有資源同時(shí)提交或回滾任何特定的事務(wù)屈嗤。
XA 規(guī)范 在上世紀(jì) 90 年代初就被提出。目前吊输,幾乎所有主流的數(shù)據(jù)庫(kù)都對(duì) XA 規(guī)范 提供了支持饶号。
1.2 什么是Seata的事務(wù)模式?
Seata 定義了全局事務(wù)的框架璧亚。全局事務(wù) 定義為若干 分支事務(wù) 的整體協(xié)調(diào):1.TM 向 TC 請(qǐng)求發(fā)起(Begin)讨韭、提交(Commit)、回滾(Rollback)全局事務(wù)癣蟋。2.TM 把代表全局事務(wù)的 XID 綁定到分支事務(wù)上透硝。3.RM 向 TC 注冊(cè),把分支事務(wù)關(guān)聯(lián)到 XID 代表的全局事務(wù)中疯搅。4.RM 把分支事務(wù)的執(zhí)行結(jié)果上報(bào)給 TC濒生。(可選) 5.TC 發(fā)送分支提交(Branch Commit)或分支回滾(Branch Rollback)命令給 RM。
img
Seata 的 全局事務(wù) 處理過(guò)程幔欧,分為兩個(gè)階段:執(zhí)行階段 :執(zhí)行 分支事務(wù)罪治,并 保證 執(zhí)行結(jié)果滿(mǎn)足是 可回滾的(Rollbackable) 和 持久化的(Durable)。完成階段:根據(jù) 執(zhí)行階段 結(jié)果形成的決議礁蔗,應(yīng)用通過(guò) TM 發(fā)出的全局提交或回滾的請(qǐng)求給 TC觉义, TC 命令 RM 驅(qū)動(dòng) 分支事務(wù) 進(jìn)行 Commit 或 Rollback。Seata 的所謂 事務(wù)模式 是指:運(yùn)行在 Seata 全局事務(wù)框架下的 分支事務(wù) 的行為模式浴井。準(zhǔn)確地講晒骇,應(yīng)該叫作 分支事務(wù)模式。不同的 事務(wù)模式 區(qū)別在于 分支事務(wù) 使用不同的方式達(dá)到全局事務(wù)兩個(gè)階段的目標(biāo)磺浙。即洪囤,回答以下兩個(gè)問(wèn)題:執(zhí)行階段 :如何執(zhí)行并 保證 執(zhí)行結(jié)果滿(mǎn)足是 可回滾的(Rollbackable) 和 持久化的(Durable)。完成階段:收到 TC 的命令后撕氧,做到事務(wù)的回滾/提交
2. 那么什么是Seata XA 模式瘤缩?
XA 模式:在 Seata 定義的分布式事務(wù)框架內(nèi),利用事務(wù)資源(數(shù)據(jù)庫(kù)伦泥、消息服務(wù)等)對(duì) XA 協(xié)議的支持剥啤,以 XA 協(xié)議的機(jī)制來(lái)管理分支事務(wù)的一種 事務(wù)模式。執(zhí)行階段:可回滾:業(yè)務(wù) SQL 操作放在 XA 分支中進(jìn)行不脯,由資源對(duì) XA 協(xié)議的支持來(lái)保證 可回滾 持久化:XA 分支完成后府怯,執(zhí)行 XA prepare,同樣跨新,由資源對(duì) XA 協(xié)議的支持來(lái)保證 持久化(即富腊,之后任何意外都不會(huì)造成無(wú)法回滾的情況) 完成階段:分支提交:執(zhí)行 XA 分支的 commit 分支回滾:執(zhí)行 XA 分支的 rollback
以下是XA模式在Seata所定義的事務(wù)模式下的設(shè)計(jì)模型
2.1 什么是Seata AT(TXC) 模式坏逢?
去年 1 月份域帐,Seata 開(kāi)源了 AT 模式赘被。AT 模式是一種無(wú)侵入的分布式事務(wù)解決方案。在 AT 模式下肖揣,用戶(hù)只需關(guān)注自己的“業(yè)務(wù) SQL”民假,用戶(hù)的 “業(yè)務(wù) SQL” 作為一階段,Seata 框架會(huì)自動(dòng)生成事務(wù)的二階段提交和回滾操作龙优。
通過(guò)簡(jiǎn)介羊异,其實(shí)可以發(fā)現(xiàn)AT模式的特點(diǎn),只需關(guān)注自己的業(yè)務(wù)sql彤断,對(duì)業(yè)務(wù)無(wú)入侵的一種分布式事務(wù)模式野舶。那么我們應(yīng)該知道他是怎么對(duì)業(yè)務(wù)做到無(wú)入侵的?
2.2 AT 模式如何做到對(duì)業(yè)務(wù)的無(wú)侵入 宰衙?
AT模式一階段
- 首先平道,在Seata的組件中,如果你想開(kāi)啟分布式事務(wù)供炼,那么就應(yīng)該在你的業(yè)務(wù)入口或者事務(wù)發(fā)起入口加上@GlobalTransactional注解
- 如果你是AT模式就要做好數(shù)據(jù)源代理(seata1.0后全面支持自動(dòng)代理)一屋,并被sqlsessionfactroy使用(或者直接jdbc操作使用被代理數(shù)據(jù)源)
可以發(fā)現(xiàn)比較關(guān)鍵的異步,與其他模式的區(qū)別便是代理數(shù)據(jù)源袋哼,而代理數(shù)據(jù)源又有什么奧秘呢冀墨?
如上圖所示,你的數(shù)據(jù)源被代理后涛贯,通過(guò)被DataSourceProxy代理后诽嘉,你所執(zhí)行的sql,會(huì)被提取疫蔓,解析含懊,保存前鏡像后,再執(zhí)行業(yè)務(wù)sql衅胀,再保存后鏡像岔乔,以便與后續(xù)出現(xiàn)異常,進(jìn)行二階段的回滾操作滚躯。
2.3 AT 模式如何保證隔離性
首先我們拿到官網(wǎng)所展示的文檔來(lái)更直觀(guān)地描述:
可以通過(guò)上圖得出:
一階段本地事務(wù)提交前雏门,需要確保先拿到 全局鎖 。
拿不到 全局鎖 掸掏,不能提交本地事務(wù)茁影。
拿 全局鎖 的嘗試被限制在一定范圍內(nèi),超出范圍將放棄丧凤,并回滾本地事務(wù)募闲,釋放本地鎖。
兩個(gè)全局事務(wù) tx1 和 tx2愿待,分別對(duì) a 表的 m 字段進(jìn)行更新操作浩螺,m 的初始值 1000靴患。
tx1 先開(kāi)始,開(kāi)啟本地事務(wù)要出,拿到本地鎖鸳君,更新操作 m = 1000 - 100 = 900。
本地事務(wù)提交前患蹂,先拿到該記錄的 全局鎖 或颊,本地提交釋放本地鎖。
tx2 后開(kāi)始传于,開(kāi)啟本地事務(wù)囱挑,拿到本地鎖,更新操作 m = 900 - 100 = 800沼溜。
本地事務(wù)提交前看铆,嘗試拿該記錄的 全局鎖 ,tx1 全局提交前盛末,
該記錄的全局鎖被 tx1 持有弹惦,tx2 需要重試等待 全局鎖 ,如tx2等待所超時(shí)悄但,那么tx2便回滾本地事務(wù)所以他不會(huì)產(chǎn)生臟數(shù)據(jù)棠隐。
AT 模式二階段提交
二階段如果是提交的話(huà),因?yàn)椤皹I(yè)務(wù) SQL”在一階段已經(jīng)提交至數(shù)據(jù)庫(kù)檐嚣, 所以 Seata 框架只需將一階段保存的快照數(shù)據(jù)和行鎖刪掉助泽,完成數(shù)據(jù)清理即可。
AT 模式二階段回滾
二階段如果是回滾的話(huà)嚎京,Seata 就需要回滾一階段已經(jīng)執(zhí)行的“業(yè)務(wù) SQL”嗡贺,還原業(yè)務(wù)數(shù)據(jù)“暗郏回滾方式便是用“before image”還原業(yè)務(wù)數(shù)據(jù)诫睬;但在還原前要首先要校驗(yàn)臟寫(xiě), 對(duì)比“數(shù)據(jù)庫(kù)當(dāng)前業(yè)務(wù)數(shù)據(jù)”和 “after image”帕涌, 如果兩份數(shù)據(jù)完全一致就說(shuō)明沒(méi)有臟寫(xiě)摄凡,可以還原業(yè)務(wù)數(shù)據(jù),如果不一致就說(shuō)明有臟寫(xiě)蚓曼, 出現(xiàn)臟寫(xiě)就需要轉(zhuǎn)人工處理亲澡。
完整的AT在Seata所制定的事務(wù)模式下的模型圖:
3. 為什么支持XA?
首先我們應(yīng)該從AT去做判斷纫版,為什么Seata有了AT模式還去做XA的支持
- 從視角出發(fā):首先床绪,我們來(lái)總結(jié)下AT模式,首先所有的事物發(fā)起,都是從TM(不僅AT) 且數(shù)據(jù)的讀已提交只能在應(yīng)用中見(jiàn)效(用戶(hù)自行開(kāi)發(fā)的系統(tǒng))癞己,對(duì)資源的查看裹匙,無(wú)法做到全方面 而XA可讓資源也感知到自身已處于全局事務(wù)中,對(duì)資源的隔離性可由數(shù)據(jù)庫(kù)本身來(lái)實(shí)現(xiàn)末秃,滿(mǎn)足 全局一致性
- 從入侵性,數(shù)據(jù)庫(kù)支持角度:業(yè)務(wù)無(wú)入侵的更徹底籽御,少于2個(gè)服務(wù)的操作练慕,僅使用本地事務(wù)即可滿(mǎn)足一致性,而AT需要 全局鎖來(lái)保證隔離性技掏,所以無(wú)論是1個(gè)服務(wù)铃将,單庫(kù)的操作,還是n個(gè)服務(wù)都需要開(kāi)啟全局事務(wù)來(lái)保證 隔離性哑梳。對(duì)數(shù)據(jù)庫(kù)的支持劲阎,如果AT需要支持mysql,pgsql鸠真,oracle以外的數(shù)據(jù)庫(kù)悯仙,需要做適配,并且 對(duì)復(fù)雜sql的解析成本更大吠卷,開(kāi)發(fā)效率低锡垄,支持的sql數(shù)量少,XA可全方位支持?jǐn)?shù)據(jù)庫(kù)的sql語(yǔ)句 多語(yǔ)言支持祭隔,如果你有java應(yīng)用已經(jīng)使用了seata xa那么本地?cái)?shù)據(jù)庫(kù)已經(jīng)幫我們保證了隔離 性货岭,即便其余seata不支持的語(yǔ)言和java并行處理下,數(shù)據(jù)也不會(huì)出現(xiàn)不一致的情況疾渴。
4. 為什么Seata要支持XA模式千贯?
- 數(shù)據(jù)鎖定:在整個(gè)事務(wù)處理過(guò)程結(jié)束前,涉及數(shù)據(jù)都被鎖定搞坝,讀寫(xiě)都按隔離級(jí)別的定義約束起來(lái)搔谴。AT 模式使用 全局鎖 保障基本的 寫(xiě)隔離,實(shí)際上也是鎖定數(shù)據(jù)的桩撮,只不過(guò)鎖在 TC 側(cè)集中管理 解鎖效率高且沒(méi)有阻塞的問(wèn)題己沛,且XA本地?cái)?shù)據(jù)庫(kù)可能持有間隙鎖,造成鎖的粒度更大距境,鎖定更多無(wú)辜數(shù)據(jù)
- 死鎖(協(xié)議阻塞):XA prepare 后申尼,分支事務(wù)進(jìn)入阻塞階段,收到 XA commit 或 XA rollback 前必須阻塞等待垫桂。如果沒(méi)有一個(gè)靠譜的協(xié)調(diào)者存在师幕,比如abc三個(gè)庫(kù)的數(shù)據(jù)被二階段決議為提交,此時(shí)ab收到的指令,提交后霹粥,c庫(kù)在收到指令后掛了灭将,并沒(méi)有提交xa事務(wù),或者協(xié)調(diào)者沒(méi)有做到二階段重試后控,那么這個(gè)沒(méi)有提交的xa事務(wù)將會(huì)一直 持有鎖庙曙,造成死鎖的局面
- 性能差:性能的損耗主要來(lái)自?xún)蓚€(gè)方面:一方面,事務(wù)協(xié)調(diào)過(guò)程浩淘,增加單個(gè)事務(wù)的 RT捌朴;另一方面,并發(fā)事務(wù)數(shù) 據(jù)的鎖沖突张抄,降低吞吐砂蔽。其實(shí)主要原因就是上面的阻塞跟數(shù)據(jù)鎖定造成,因?yàn)閤a的一階段并非提交署惯,如果一階段都是提交的場(chǎng)景下左驾,由于At模式的一階段提交,at的性能是優(yōu)于xa极谊,因?yàn)樗i在tc一側(cè)集中釋放诡右,無(wú)需多個(gè)庫(kù)進(jìn)行本地的鎖釋放
AT 與 XA 的關(guān)系
首先,我們要明確轻猖,無(wú)論是AT還是XA稻爬,他們都是有利用到數(shù)據(jù)庫(kù)自帶的事務(wù)特性,來(lái)保證數(shù)據(jù)一致性和隔離性
比如AT一階段提交和二階段回滾蜕依,都是執(zhí)行了本地事務(wù)桅锄。比如XA的一階段和二階段,也都是利用了數(shù)據(jù)庫(kù)本身的事務(wù)特性
那么這樣一樣我們是否應(yīng)該在數(shù)據(jù)庫(kù)層面進(jìn)行挖掘样眠,AT與XA的關(guān)系呢友瘤?
首先這個(gè)時(shí)候,我們肯定要從中找相同檐束,與找不同辫秧。AT首當(dāng)其沖,他有個(gè)必須品被丧,也就是undolog表盟戏,undolog,相 信了解數(shù)據(jù)庫(kù)的同學(xué)肯定是知道甥桂。數(shù)據(jù)庫(kù)有六種日志分別是:重做日志(redo log)柿究、回滾日志(undo log)、二進(jìn)制日志(binlog)黄选、錯(cuò)誤日志(errorlog)蝇摸、 慢查詢(xún)?nèi)罩荆╯low query log)、一般查詢(xún)?nèi)罩荆╣eneral log),中繼日志(relay log)
那么數(shù)據(jù)庫(kù)的undolog是做什么用的呢貌夕?undolog保存了事務(wù)發(fā)生之前的數(shù)據(jù)的一個(gè)版本律歼,可以用于回滾,同時(shí)可以提供多版本并發(fā)控制下的讀(MVCC)
可以發(fā)現(xiàn)數(shù)據(jù)庫(kù)的undolog跟seata at模式的undolog的作用不謀而合啡专,所以可以判斷险毁,at模式的undolog就是把本地事務(wù)作用中的undolog,利用他的原理们童,做到了分布式事務(wù)中畔况,來(lái)保證了分布式事務(wù)下的事務(wù)一致性。
那么說(shuō)完了undolog病附,redolog呢?
Redolog的作用便是防止在發(fā)生故障的時(shí)間點(diǎn)亥鬓,尚有臟頁(yè)未寫(xiě)入磁盤(pán)完沪,在重啟mysql服務(wù)的時(shí)候,根據(jù)redo log進(jìn)行 重做嵌戈,從而達(dá)到事務(wù)的持久性這一特性覆积。
那么為什么Seata AT模式?jīng)]有看到redolog的存在?其實(shí)很簡(jiǎn)單熟呛,這個(gè)redolog被隱藏得很深宽档,也就是AT模式的一階段提交,讓數(shù)據(jù)庫(kù)作為我們的redolog庵朝,保證一階段的數(shù)據(jù)準(zhǔn)確落盤(pán)吗冤。
這個(gè)時(shí)候是不是會(huì)想到LCN事務(wù)模式?他的undolog由數(shù)據(jù)庫(kù)來(lái)保證九府,缺少了一個(gè)redolog的存在椎瘟。其實(shí)大可不必思念LCN事務(wù),解析到這里侄旬,如果把AT改為一階段不提交肺蔚,二階段提交時(shí),前鏡像便是undolog儡羔,后鏡像便是redolog,也就是說(shuō)AT其實(shí)就是一個(gè)不在數(shù)據(jù)庫(kù)層面宣羊,按照數(shù)據(jù)庫(kù)事務(wù)思想和實(shí)現(xiàn)原理的方式,做到了分布式中的事務(wù)一致性汰蜘。
這時(shí)候講到這里仇冯,XA跟AT的關(guān)系應(yīng)該一目了然了,準(zhǔn)確地說(shuō)族操,其實(shí)應(yīng)該說(shuō)是分布式事務(wù)跟數(shù)據(jù)庫(kù)本地事務(wù)的關(guān)系赞枕,可以說(shuō)XA的缺點(diǎn)造成了AT模式的出生,鎖在多側(cè)(多個(gè)庫(kù)),資源阻塞炕婶,性能差姐赡。
而AT就像為了把事務(wù)的實(shí)現(xiàn)決定權(quán)從數(shù)據(jù)庫(kù)手中,放到了Seata中柠掂,自實(shí)現(xiàn)sql解析项滑,自實(shí)現(xiàn)undolog(redolog),既然我們沒(méi)有 辦法去直接優(yōu)化數(shù)據(jù)庫(kù)在分布式事務(wù)下的問(wèn)題涯贞,那么不如創(chuàng)造一個(gè)新的模式枪狂,去其糟粕,取其精華宋渔。
Seata AT 與 XA 的優(yōu)劣
其實(shí)上面零零碎碎也說(shuō)了不少各自的優(yōu)缺點(diǎn)州疾,現(xiàn)在我們總結(jié)一下分3點(diǎn)來(lái)做比較
- sql支持
- 隔離性
- 侵入性
我們先講第一點(diǎn),由于上面我們總結(jié)了皇拣,其實(shí)AT就是一個(gè)自實(shí)現(xiàn)的XA事務(wù)严蓖,所以其實(shí)可以知道,AT在sql支持上氧急,是遠(yuǎn)不及利用本地事務(wù)的XA模式颗胡,既然AT需要做sql解析,那么背后的實(shí)現(xiàn)只能自己來(lái)解決吩坝,也就是靠Seata社區(qū)的貢獻(xiàn)者們來(lái)貢獻(xiàn)解決方案毒姨,這是一個(gè)長(zhǎng)期性的關(guān)鍵問(wèn)題,但是依然有很多用戶(hù)選擇了重寫(xiě)sql钉寝,來(lái)獲取AT事務(wù)模式的支持弧呐。在sql支持上XA無(wú)疑是完勝的
第二點(diǎn)隔離性,Seata AT模式通過(guò)解析sql獲取涉及的主鍵id嵌纲,生成行鎖泉懦,也就是AT模式的隔離就是靠全局鎖來(lái)保證,粒度細(xì)至行級(jí)疹瘦,鎖信息存儲(chǔ)在Seata-Server一側(cè)崩哩。XA模式的隔離性就是由本地?cái)?shù)據(jù)庫(kù)保證,鎖存儲(chǔ)在各個(gè)本地?cái)?shù)據(jù)庫(kù)中言沐。由于XA模式一旦執(zhí)行了prepare后邓嘹,再也無(wú)法重入這個(gè)XA事務(wù),也無(wú)法跟其他XA事務(wù)共享鎖险胰。因?yàn)閄A協(xié)議汹押,僅是通過(guò)XID來(lái)start一個(gè)xa事務(wù),本身它不存在所謂的分支事務(wù)說(shuō)法起便,它本身就是一個(gè)XA事務(wù)而已棚贾,也就是說(shuō)它只管它自己窖维。這時(shí)候可能有同學(xué)有疑問(wèn)了,為什么我在branch_table里看到里XA分支事務(wù)呢妙痹?其實(shí)這個(gè)問(wèn)題根據(jù)上面的什么是Seata事務(wù)模式可以了解到铸史,Seata的事務(wù)模式就是由全局事務(wù),分支事務(wù)怯伊,鎖信息所組成琳轿。而XA的分支事務(wù),僅僅是作為一個(gè)參與方的存在耿芹,也就是說(shuō)這個(gè)XA分支在Seata定義中為分支事務(wù)崭篡,作為分支信息記錄在案,方便宕機(jī)后也可以下發(fā)二階段決議信息吧秕。而AT由于鎖是自實(shí)現(xiàn)琉闪,也就相對(duì)XA來(lái)說(shuō),我只要知道用戶(hù)sql涉及到的數(shù)據(jù)砸彬,是不是數(shù)據(jù)這個(gè)全局事務(wù)下的颠毙,只要是我默認(rèn)他就可以使用這個(gè)鎖,也就解決了重入問(wèn)題拿霉。我們可以得出總結(jié)吟秩,XA的隔離性是全局的咱扣,AT的隔離性是更靈活且相對(duì)全局的(保證所有對(duì)數(shù)據(jù)的寫(xiě)操作被Seata事務(wù)覆蓋)绽淘。第三點(diǎn),入侵性闹伪,通過(guò)我們以上的信息沪铭,其實(shí)可以發(fā)現(xiàn),誰(shuí)更底層偏瓤,誰(shuí)的入侵性更小杀怠,所以由數(shù)據(jù)庫(kù)自身所支持的XA模式來(lái)說(shuō),無(wú)疑入侵最小厅克,使用成本最低赔退。
其實(shí)說(shuō)到這里,大家可能會(huì)覺(jué)得XA模式怎么感覺(jué)比AT好這么多证舟,雖然他不支持鎖重入硕旗,但是我可以避免這個(gè)情況發(fā)生呀。這時(shí)候女责,我畫(huà)個(gè)圖漆枚,大家可能會(huì)比較理解
上圖中,右側(cè)圖1是at模式運(yùn)行時(shí)抵知,圖2是xa模式運(yùn)行時(shí)墙基∪碜澹可以很明顯,xa的阻塞帶來(lái)的性能下降是非常厲害的残制,特別是你的分支事務(wù)非常多立砸,每個(gè)資源的釋放必須等到每個(gè)分支的數(shù)據(jù)庫(kù)去單獨(dú)釋放,后續(xù)的事務(wù)才能進(jìn)入痘拆。雖然XA帶來(lái)的無(wú)侵入非常高仰禽,但是由于性能下降的程度太大,也就促使了AT的誕生纺蛆,而現(xiàn)在AT,TCC,SAGA的模式的接受度也越來(lái)越高吐葵,這也正說(shuō)明了開(kāi)發(fā)者對(duì)性能的要求。AT可以看作是由Seata社區(qū)進(jìn)行全方面優(yōu)化桥氏,自研的XA模式温峭,最大特點(diǎn)就是解決了XA模式的性能差的問(wèn)題。TCC由Seata決定二階段狀態(tài)通知字支,其使用全權(quán)交托用戶(hù)凤藏,性能僅僅是2個(gè)本地事務(wù)+些許rpc開(kāi)銷(xiāo)。SAGA整個(gè)事務(wù)鏈路堕伪,事務(wù)處理全權(quán)交托用戶(hù)編排揖庄,性能完全由用戶(hù)來(lái)保證,Seata作為事務(wù)的協(xié)助方欠雌,記錄全局事務(wù)的運(yùn)行狀態(tài)蹄梢。可以看出來(lái)富俄,越高入侵性的模式其實(shí)背后可優(yōu)化的點(diǎn)更多禁炒,越少入侵性的,也就是會(huì)被局限霍比,只能依托組件開(kāi)發(fā)者進(jìn)行不定期的優(yōu)化來(lái)保證性能幕袱。
總結(jié)
在當(dāng)前的技術(shù)發(fā)展中,目前分布式事務(wù)就是屬于扮演東風(fēng)的角色悠瞬,大量的分布式们豌,微服務(wù)化,帶來(lái)的性能提 升非常明顯浅妆,但是卻缺少一個(gè)有利的保障望迎,我相信Seata就是承擔(dān)著這樣的一個(gè)角色,讓萬(wàn)事俱備不欠東風(fēng)狂打。Seata項(xiàng)目的最核心的價(jià)值在于:
構(gòu)建一個(gè)全面解決分布式事務(wù)問(wèn)題的 標(biāo)準(zhǔn)化 平臺(tái)擂煞。
基于 Seata,上層應(yīng)用架構(gòu)可以根據(jù)實(shí)際場(chǎng)景的需求趴乡,靈活選擇合適的分布式事務(wù)解決方案对省。
[