一:分享下 對阿里的seata 分布式事務(wù)中間件的理解
????? 非分布式系統(tǒng)的業(yè)務(wù)模式如下圖:
??????

購物流程:訂單-->支付-->物流 三個(gè)模塊都是連接同一數(shù)據(jù)庫。把三個(gè)模塊都放在同一個(gè)事務(wù)中,就可以保證業(yè)務(wù)的原子性。
分布式架構(gòu)中的購物流程如下圖:

訂單,交易,物流 這三個(gè)模塊分別擁有自己的數(shù)據(jù)庫。所以無法把三個(gè)模塊放在同一個(gè)數(shù)據(jù)庫事務(wù)中。
那seata 是如何來解決分布式事務(wù)的呢?看下圖

先來聲明幾個(gè)名詞:
a.事務(wù)管理者
b.事務(wù)發(fā)送者
c.XID(用來標(biāo)記節(jié)點(diǎn)事務(wù)歸屬于那個(gè)全局事務(wù))
這3個(gè)名詞并不完全和seata吻合,只是我的理解。
描述下購物流程。seata 的事務(wù)處理流程:
整個(gè)購物流程? 首先發(fā)起于 訂單模塊:
購物各個(gè)模塊中引入seata 的客戶端用于向事務(wù)管理者發(fā)送信息。
訂單:事務(wù)發(fā)送者-->創(chuàng)建全局事務(wù)(生成XID)-->向事務(wù)管理者發(fā)送本地事務(wù)-->等待
交易:? 事務(wù)發(fā)送者-->向事務(wù)管理者發(fā)送歸屬于XID的本地事務(wù)-->等待
物流:? 事務(wù)發(fā)送者-->向事務(wù)管理者發(fā)送歸屬于XID的本地事務(wù)-->等待
物流:事務(wù)發(fā)送者-->向事務(wù)管理者申請?zhí)峤换蚧貪L全局事務(wù)-->等待
事務(wù)管理者: 檢查這個(gè)全局事務(wù)鏈上的每個(gè)節(jié)點(diǎn)事務(wù)狀態(tài)-->如果有1個(gè)需要回滾的事務(wù),那就全體回滾,否則就提交--> 通知所有節(jié)點(diǎn)事務(wù)提交或回滾。
訂單,交易,物流 根據(jù)接收到的通知,進(jìn)行本地事務(wù)的 提交或回滾。
這樣就保證了所有節(jié)點(diǎn)事務(wù)都是統(tǒng)一的。
最后獻(xiàn)上seata 官網(wǎng)鏈接:seata 分布式事務(wù)
對seata 講解的非常詳細(xì)的視頻:seata 講解視頻