seata介紹
Seata 是一款開(kāi)源的分布式事務(wù)解決方案,致力于提供高性能和簡(jiǎn)單易用的分布式事務(wù)服務(wù)隘世。Seata 將為用戶(hù)提供了 AT掉盅、TCC、SAGA 和 XA 事務(wù)模式以舒,為用戶(hù)打造一站式的分布式解決方案趾痘。
Seata元素
TC (Transaction Coordinator) - 事務(wù)協(xié)調(diào)者
維護(hù)全局和分支事務(wù)的狀態(tài),驅(qū)動(dòng)全局事務(wù)提交或回滾蔓钟。
TM (Transaction Manager) - 事務(wù)管理器
定義全局事務(wù)的范圍:開(kāi)始全局事務(wù)永票、提交或回滾全局事務(wù)。
RM (Resource Manager) - 資源管理器
管理分支事務(wù)處理的資源滥沫,與TC交談以注冊(cè)分支事務(wù)和報(bào)告分支事務(wù)的狀態(tài)侣集,并驅(qū)動(dòng)分支事務(wù)提交或回滾。
Seata AT模式
AT(自動(dòng)事務(wù))模式是Seata最主推的分布式事務(wù)解決方案兰绣,它是基于XA演進(jìn)而來(lái)的一種分布式事務(wù)模式世分,所以它同樣分為三大模塊,分別是TM缀辩、RM和TC臭埋,其中TM和RM作為Seata的客戶(hù)端與業(yè)務(wù)系統(tǒng)集成,TC作為Seata的服務(wù)器獨(dú)立部署臀玄。TM表示事務(wù)管理器(Transaction Manager)瓢阴,它負(fù)責(zé)向TC注冊(cè)一個(gè)全局事務(wù),并生成一個(gè)全局唯一的XID健无。在AT模式下荣恐,每個(gè)數(shù)據(jù)庫(kù)資源被當(dāng)作一個(gè)RM(Resource Manager),在業(yè)務(wù)層面通過(guò)JDBC標(biāo)準(zhǔn)的接口訪(fǎng)問(wèn)RM時(shí)累贤,Seata會(huì)對(duì)所有請(qǐng)求進(jìn)行攔截叠穆。每個(gè)本地事務(wù)進(jìn)行提交時(shí),RM都會(huì)向TC(Transaction Coordinator臼膏,事務(wù)協(xié)調(diào)器)注冊(cè)一個(gè)分支事務(wù)硼被。
AT模式和XA一樣,也是一個(gè)兩階提交事務(wù)模型讶请,不過(guò)和XA相比祷嘶,做了很多優(yōu)化。
工作流程
1.Business主業(yè)務(wù)通過(guò)TM通知TC開(kāi)啟全局事務(wù)夺溢。
2.Businiess調(diào)用的每個(gè)分支事務(wù)(比如Storage论巍,order,account)需要注冊(cè)到TC中,并時(shí)時(shí)匯報(bào)狀態(tài)风响。
3.通過(guò)RM實(shí)時(shí)匯報(bào)事務(wù)狀態(tài)嘉汰,TC掌握每個(gè)分支事務(wù)的狀態(tài)。
4.因?yàn)門(mén)C實(shí)時(shí)掌握每個(gè)分支事務(wù)状勤,一旦某個(gè)事務(wù)失敗鞋怀,TC可以命令所有分支事務(wù)回滾双泪。
可以看出TC就是seat抽離出的一層,用來(lái)維護(hù)全局和分支事務(wù)的狀態(tài)(這種抽離出一層的方案密似,分布式組件中到處可見(jiàn))焙矛,此圖中TC協(xié)調(diào)三個(gè)遠(yuǎn)程的事務(wù)(Storage,Order,Account),Business是主業(yè)務(wù)代碼(TM)残腌,開(kāi)啟全局事務(wù)村斟,控制總事務(wù),RM資源管理應(yīng)用在每一個(gè)服務(wù)中抛猫,負(fù)責(zé)和數(shù)據(jù)庫(kù)交互蟆盹,每一個(gè)服務(wù)里面對(duì)于本地事務(wù)的管理通過(guò)RM。
notice:
如果分支事務(wù)發(fā)現(xiàn)失敗闺金,默認(rèn)情況下seata采用AT模式逾滥,每個(gè)服務(wù)的事務(wù)維系一個(gè)UNDO_LOG (回滾日志表)表,每個(gè)分支事務(wù)都是已提交的败匹,TC通過(guò)每個(gè)事務(wù)的回滾表將之反向補(bǔ)償寨昙,這整個(gè)過(guò)程都是自動(dòng)回滾的。