相關概念
XID:一個全局事務的唯一標識
Transaction Coordinator (TC): 事務協調器,維護全局事務的運行狀態,負責協調并驅動全局事務的提交或回滾(可以理解為事務的協調者)。
Transaction Manager (TM): 控制全局事務的邊界,負責開啟一個全局事務,并最終發起全局提交或全局回滾的決議(可以理解為事務發起者)。
Resource Manager (RM): 控制分支事務,負責分支注冊、狀態匯報,并接收事務協調器的指令,驅動分支(本地)事務的提交和回滾(可以理解為事務的參與者)。yao
?
事務發起者(TM)和事務的參與者(RM)要注冊到事務的協調者(TC)上,事務的協調者(TC)由Seata為我們提供,事務發起者(TM)操作事務參與者(RM),比如事務發起者者這個服務叫做transaction,事務參與者有order和order_item,transaction服務統一調用order服務和order_item服務,比如調用的時候order_item服務報錯了能通知到transaction服務,transaction服務收到了通知,知道了order_item服務報錯了,那么transaction服務就告訴事務的協調者(TC)order_item服務報錯了你要通知事務的參與者(RM)order服務回滾,事務發起者(TM)下面有一個全局事務XID,那么這個全局事務XID怎么知道他下面有哪些參與者呢,所以他下面還有一個參與者id,我叫他分支事務id(branchID),每一個事務參與者去通信連接上事務的協調者(TC)上的時候,事務的協調者(TC)會給事務的參與者(RM)下發一個branchID,比如order服務的branchID為1,order_item服務的branchID為2,transaction服務下面的全局事務XID為1,他包含了order服務的branchID 1和order_item服務的branchID 2,這樣就控制住了,transaction服務調用方法的時候,一報錯,能根據branchID找到全局事務XID,由全局事務XID通知事務的協調者(TC)下面的兩個分支需要回滾,一但使用了AT模式,就會涉及全局鎖的概念,犧牲了可用性保證了一致性