分布式事務(wù)的背景
隨著業(yè)務(wù)的不斷發(fā)展,單體架構(gòu)已經(jīng)無(wú)法滿足我們的需求蹂楣,分布式微服務(wù)架構(gòu)逐漸成為大型互聯(lián)網(wǎng)平臺(tái)的首選,但所有使用分布式微服務(wù)架構(gòu)的應(yīng)用都必須面臨一個(gè)十分棘手的問題浪藻,那就是“分布式事務(wù)”問題捐迫。
在分布式微服務(wù)架構(gòu)中,幾乎所有業(yè)務(wù)操作都需要多個(gè)服務(wù)協(xié)作才能完成爱葵。對(duì)于其中的某個(gè)服務(wù)而言施戴,它的數(shù)據(jù)一致性可以交由其自身數(shù)據(jù)庫(kù)事務(wù)來保證反浓,但從整個(gè)分布式微服務(wù)架構(gòu)來看,其全局?jǐn)?shù)據(jù)的一致性卻是無(wú)法保證的赞哗。
Seata是什么雷则?
Seata 是一個(gè)分布式事務(wù)處理框架,也是一款開源的分布式事務(wù)解決方案肪笋,由阿里巴巴和螞蟻金服共同開源的分布式事務(wù)解決方案月劈,能夠在微服務(wù)架構(gòu)下提供高性能且簡(jiǎn)單易用的分布式事務(wù)服務(wù),致力于提供高性能和簡(jiǎn)單易用的分布式事務(wù)服務(wù)藤乙。
Seata相關(guān)資料
Seata的發(fā)展歷程
阿里巴巴作為國(guó)內(nèi)最早一批進(jìn)行應(yīng)用分布式(微服務(wù)化)改造的企業(yè)猜揪,很早就遇到微服務(wù)架構(gòu)下的分布式事務(wù)問題,阿里巴巴對(duì)于分布式事務(wù)問題先后發(fā)布了以下解決方案:
2014 年坛梁,阿里中間件團(tuán)隊(duì)發(fā)布 TXC(Taobao Transaction Constructor)而姐,為集團(tuán)內(nèi)應(yīng)用提供分布式事務(wù)服務(wù)。
2016 年划咐,TXC 在經(jīng)過產(chǎn)品化改造后拴念,以 GTS(Global Transaction Service) 的身份登陸阿里云,成為當(dāng)時(shí)業(yè)界唯一一款云上分布式事務(wù)產(chǎn)品褐缠。在阿云里的公有云政鼠、專有云解決方案中,開始服務(wù)于眾多外部客戶队魏。
2019 年起公般,基于 TXC 和 GTS 的技術(shù)積累,阿里中間件團(tuán)隊(duì)發(fā)起了開源項(xiàng)目 Fescar(Fast & EaSy Commit And Rollback, FESCAR)器躏,和社區(qū)一起建設(shè)這個(gè)分布式事務(wù)解決方案俐载。
2019 年 fescar 被重命名為了seata(simple extensiable autonomous transaction architecture)。
TXC登失、GTS遏佣、Fescar以及seata一脈相承,為解決微服務(wù)架構(gòu)下的分布式事務(wù)問題交出了一份與眾不同的答卷揽浙。
事務(wù)相關(guān)概念
- 事務(wù):由一組操作構(gòu)成的可靠状婶、獨(dú)立的工作單元,事務(wù)具備 ACID 的特性馅巷,即原子性膛虫、一致性、隔離性和持久性钓猬。
分布式事務(wù)的相關(guān)概念
分布式事務(wù)的基本原則可以理解成一個(gè)包含了若干個(gè)分支事務(wù)的全局事務(wù)稍刀。
分布式事務(wù)主要涉及以下概念
- 本地事務(wù):本地事務(wù)由本地資源管理器(通常指數(shù)據(jù)庫(kù)管理系統(tǒng) DBMS,例如 MySQL、Oracle 等)管理账月,嚴(yán)格地支持 ACID 特性综膀,高效可靠。
- 全局事務(wù):全局事務(wù)指的是一次性操作多個(gè)資源管理器完成的事務(wù)局齿,由一組分支事務(wù)組成剧劝。
- 分支事務(wù):在分布式事務(wù)中,就是一個(gè)受全局事務(wù)管轄和協(xié)調(diào)的本地事務(wù)抓歼。
注意:本地事務(wù)不具備分布式事務(wù)的處理能力讥此,隔離的最小單位受限于資源管理器,即本地事務(wù)只能對(duì)自己數(shù)據(jù)庫(kù)的操作進(jìn)行控制谣妻,對(duì)于其他數(shù)據(jù)庫(kù)的操作則無(wú)能為力萄喳。
全局事務(wù)
全局事務(wù)的職責(zé)是協(xié)調(diào)其管轄的各個(gè)分支事務(wù)達(dá)成一致,要么一起成功提交蹋半,要么一起失敗回滾取胎。此外,通常分支事務(wù)本身就是一個(gè)滿足 ACID特性的本地事務(wù)湃窍。
Seata的運(yùn)作原理
Seata對(duì)分布式事務(wù)的協(xié)調(diào)和控制,主要是通過XID和3個(gè)核心組件實(shí)現(xiàn)的匪傍。
XID
XID是全局事務(wù)唯一標(biāo)識(shí)您市,可以在服務(wù)的調(diào)用鏈路中傳遞,綁定到服務(wù)的事務(wù)上下文中役衡。
核心組件
Seata定義了3個(gè)核心組件
TC(Transaction Coordinator):事務(wù)協(xié)調(diào)器茵休,它是事務(wù)的協(xié)調(diào)者(這里指的是 Seata服務(wù)器),主要負(fù)責(zé)維護(hù)全局事務(wù)和分支事務(wù)的狀態(tài)手蝎,驅(qū)動(dòng)全局事務(wù)提交或回滾榕莺。
-
TM(Transaction Manager):事務(wù)管理器,它是事務(wù)的發(fā)起者棵介,負(fù)責(zé)定義全局事務(wù)的范圍钉鸯,并根據(jù)TC維護(hù)的全局事務(wù)和分支事務(wù)狀態(tài),做出開始事務(wù)邮辽、提交事務(wù)唠雕、回滾事務(wù)的決議。
-
RM(Resource Manager):資源管理器吨述,它是資源的管理者(這里可以將其理解為各服務(wù)使用的數(shù)據(jù)庫(kù))岩睁。它負(fù)責(zé)管理分支事務(wù)上的資源,向TC注冊(cè)分支事務(wù)揣云,匯報(bào)分支事務(wù)狀態(tài)捕儒,驅(qū)動(dòng)分支事務(wù)的提交或回滾。
以上三個(gè)組件相互協(xié)作邓夕,TC 以 Seata 服務(wù)器(Server)形式獨(dú)立部署刘莹,TM 和 RM 則是以 Seata Client的形式集成在微服務(wù)中運(yùn)行阎毅。
Seata的運(yùn)行流程
Seata 的整體工作流程如下
- TM向TC申請(qǐng)開啟一個(gè)全局事務(wù),全局事務(wù)創(chuàng)建成功后栋猖,TC會(huì)針對(duì)這個(gè)全局事務(wù)生成一個(gè)全局唯一的XID净薛;
- XID 通過服務(wù)的調(diào)用鏈傳遞到其他服務(wù);
- RM向TC注冊(cè)一個(gè)分支事務(wù),并將其納入XID對(duì)應(yīng)全局事務(wù)的管轄蒲拉;
- TM根據(jù)TC收集的各個(gè)分支事務(wù)的執(zhí)行結(jié)果肃拜,向TC發(fā)起全局事務(wù)提交或回滾決議;
- TC調(diào)度XID下管轄的所有分支事務(wù)完成提交或回滾操作雌团。
Seata的事務(wù)模式
目前Seata為用戶提供了 AT燃领、TCC、SAGA 和 XA 事務(wù)模式锦援,為用戶打造一站式的分布式解決方案猛蔽,可以快速有效地對(duì)分布式事務(wù)進(jìn)行控制。
在這四種事務(wù)模式中使用最多灵寺,最方便的就是 AT 模式曼库。與其他事務(wù)模式相比,AT 模式可以應(yīng)對(duì)大多數(shù)的業(yè)務(wù)場(chǎng)景略板,且基本可以做到無(wú)業(yè)務(wù)入侵毁枯,開發(fā)人員能夠有更多的精力關(guān)注于業(yè)務(wù)邏輯開發(fā)。
Seata最后結(jié)論
接下來會(huì)針對(duì)于Seata的每種事務(wù)模式進(jìn)行實(shí)戰(zhàn)指南叮称。