1.Seata模式
Seata有四種模式

有AT、TCC、SAGA、XA模式
我們?cè)跍y(cè)試時(shí)候使用的是AT模式
2.Seata組件
Seata有三個(gè)組件,TC、TM、RM,那么我們?nèi)绾卫斫馑麄兡兀?br> TC:事務(wù)控制者,也就是我們要加@GlobalTransactional的地方

TM:事務(wù)管理者,也就是直接啟動(dòng)的Seata服務(wù)
RM:資源管理者,也就是數(shù)據(jù)庫(kù)
3.AT模式

在一階段,Seata會(huì)攔截業(yè)務(wù)sql:
①解析SQL語(yǔ)義,找到“業(yè)務(wù)SQL”要更新業(yè)務(wù)數(shù)據(jù),在業(yè)務(wù)數(shù)據(jù)被更新前,將其保存成"before image"
②執(zhí)行“業(yè)務(wù)SQL”更新業(yè)務(wù)數(shù)據(jù)
③在業(yè)務(wù)數(shù)據(jù)更新之后,將其保存成"after image",最后生成行鎖
以上操作全部在一個(gè)數(shù)據(jù)庫(kù)事務(wù)內(nèi)完成,這樣就保證了一階段操作的原子性
二階段如果是順利提交的話,
因?yàn)椤皹I(yè)務(wù)SQL”在一階段以及提交至數(shù)據(jù)庫(kù),所以Seata框架只需將一階段保存的快照數(shù)據(jù)和行鎖刪掉,完成數(shù)據(jù)清理即可
二階段回滾:
二階段如果是回滾的話,Seata就需要回滾一階段已經(jīng)執(zhí)行的"業(yè)務(wù)SQL",還原業(yè)務(wù)數(shù)據(jù)。
回滾方式時(shí)用"before image"還原業(yè)務(wù)數(shù)據(jù);但在還原前要首先校驗(yàn)臟寫(xiě),對(duì)比"數(shù)據(jù)庫(kù)當(dāng)前業(yè)務(wù)數(shù)據(jù)"和"after image",如果兩份數(shù)據(jù)完全一直說(shuō)明沒(méi)有臟寫(xiě),可以還原業(yè)務(wù)數(shù)據(jù),如果不一致說(shuō)明有臟寫(xiě),出現(xiàn)臟寫(xiě)需要轉(zhuǎn)人工處理