網(wǎng)站開發(fā)的背景百度百科官網(wǎng)
解決分布式事務(wù)的方案有很多,但實(shí)現(xiàn)起來(lái)都比較復(fù)雜,因此我們一般會(huì)使用開源的框架來(lái)解決分布式事務(wù)問(wèn)題。
在眾多的開源分布式事務(wù)框架中,功能最完善、使用最多的就是阿里巴巴在2019年開源的Seata了。?
1. 初識(shí)Seata
Seata是 2019 年 1 月份螞蟻金服和阿里巴巴共同開源的分布式事務(wù)解決方案,致力于在微服務(wù)架構(gòu)下提供高性能和簡(jiǎn)單易用的分布式事務(wù)服務(wù)。
Seata 可能給是目前已知最可靠的分布式事務(wù)解決方案。
官網(wǎng)地址:Seata | Seata,其中的文檔、播客中提供了大量的使用說(shuō)明、源碼分析。
2. Seata的架構(gòu)
其實(shí)分布式事務(wù)產(chǎn)生的一個(gè)重要原因,就是參與事務(wù)的多個(gè)分支事務(wù)互相無(wú)感知,不知道彼此的執(zhí)行狀態(tài),因此解決分布式事務(wù)的思想非常簡(jiǎn)單:
- 就是找一個(gè)統(tǒng)一的事務(wù)協(xié)調(diào)者,與多個(gè)分支事務(wù)通信,檢測(cè)每個(gè)分支事務(wù)的執(zhí)行狀態(tài),保證全局事務(wù)下的每一個(gè)分支事務(wù)同時(shí)成功或失敗接口,大多數(shù)的分布式事務(wù)框架都是基于這個(gè)理論來(lái)實(shí)現(xiàn)的。?
Seata也不例外,在Seata的事務(wù)管理中有三個(gè)重要的角色:
?
- TC(Transaction Coordinator)- 事務(wù)協(xié)調(diào)者:維護(hù)全局和分支事務(wù)的狀態(tài),協(xié)調(diào)驅(qū)動(dòng)全局事務(wù)提交或回滾。
- TM(Transaction Manager)- 事務(wù)管理器:定義全局事務(wù)的范圍、開始全局事務(wù)、提交或回滾全局事務(wù)。
- RM(Resource Manager)- 資源管理器:管理分支事務(wù)處理的資源,與TC交談以注冊(cè)分支事務(wù)和報(bào)告分支事務(wù)的狀態(tài),并驅(qū)動(dòng)分支事務(wù)提交或回滾。
其中,TC 為單獨(dú)部署的?Server?服務(wù)端,TM 和 RM 為嵌入到應(yīng)用中的?Client?客戶端。?
在 Seata 中,一個(gè)分布式事務(wù)的生命周期如下:?
作為一個(gè)分布式事務(wù),它肯定也會(huì)有一個(gè)入口方法,在這個(gè)入口方法當(dāng)中,一定會(huì)去調(diào)用多個(gè)其它的微服務(wù),每調(diào)一個(gè)微服務(wù),這個(gè)微服務(wù)不就是一個(gè)分支事務(wù),因此將來(lái)調(diào)了多少個(gè)微服務(wù),將來(lái)我們這個(gè)全局事務(wù)就包含多少個(gè)分支事務(wù),因此在這個(gè)入口方法里就定義了全局事務(wù)的范圍了,而TM就會(huì)去監(jiān)控這個(gè)入口的方法或者說(shuō)是代理這個(gè)入口方法,這樣一來(lái),TM就知道了全局事務(wù)里面總共有多少個(gè)分支事務(wù),整個(gè)范圍就確定下來(lái)了,當(dāng)入口方法被執(zhí)行時(shí),TM會(huì)首先攔截當(dāng)前的這個(gè)執(zhí)行,會(huì)去向TC發(fā)起一個(gè)請(qǐng)求,去注冊(cè)全局事務(wù),接下來(lái),就可以去執(zhí)行這個(gè)入口的業(yè)務(wù)邏輯了,去調(diào)用每一個(gè)微服務(wù),到了微服務(wù)里面每個(gè)分支事務(wù)就要開始執(zhí)行了,?