SpringCloud(46)——Seata

1.Seata模式

Seata有四種模式

image.png

有AT、TCC、SAGA、XA模式
我們?cè)跍y(cè)試時(shí)候使用的是AT模式

2.Seata組件

Seata有三個(gè)組件,TC、TM、RM,那么我們?nèi)绾卫斫馑麄兡兀?br> TC:事務(wù)控制者,也就是我們要加@GlobalTransactional的地方

image.png

TM:事務(wù)管理者,也就是直接啟動(dòng)的Seata服務(wù)

RM:資源管理者,也就是數(shù)據(jù)庫(kù)

3.AT模式

image.png

在一階段,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)人工處理

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容