怎么建立和設(shè)計(jì)網(wǎng)站推推蛙seo顧問
????????Seata可以解決分布式事務(wù)問題,利用@GlobalTransacational(name = "fsp-create-order",rollbackFor = Exception.class)注解就可以實(shí)現(xiàn)全局的事務(wù)管理,但是我們需要明白原理的實(shí)現(xiàn)。
????????我們舉例創(chuàng)建訂單——>調(diào)減庫存——>調(diào)扣余額——>改訂單狀態(tài)。
TC,TM,RM三大組件通俗說明:
?
1.分布式事務(wù)的執(zhí)行流程
-
TM開啟分布式事務(wù),TM向TC注冊全局事務(wù)記錄(事務(wù)ID)。
-
事務(wù)的參與方準(zhǔn)備事務(wù)資源,RM向TC匯報(bào)資源的準(zhǔn)備情況。
-
執(zhí)行業(yè)務(wù),TM分布式事務(wù)第一階段結(jié)束,TM通知TC此時(shí)應(yīng)該向RM獲取事務(wù)狀態(tài)信息了。
-
TC匯總RM上報(bào)的事務(wù)信息,決定分布式事務(wù)是提交/回滾。
-
TC通知所有的RM提交/回滾事務(wù)。
2.AT事務(wù)模式到底是如何操作的?
AT模式是Seata為用戶提供的一種事務(wù)模式,有一階段加載,二階段提交/二階段回滾。
在一階段中,Seata會攔截SQL語句,在業(yè)務(wù)SQL執(zhí)行前解析出要更新的業(yè)務(wù)數(shù)據(jù),保存before image,執(zhí)行完業(yè)務(wù)SQL后,保存after image,記錄回滾日志undo log,并且加上行鎖。
?
????????在二階段中,如果各個(gè)事務(wù)順利上報(bào)提交,Seata只需將前后快照的記錄、undo log和行鎖刪除,即完成數(shù)據(jù)的清理即可。
????????但是如果提交失敗,Seata就需要回滾一階段已經(jīng)執(zhí)行完的SQL,還原業(yè)務(wù)數(shù)據(jù),在還原前還需要校對臟寫,after image中記錄的數(shù)據(jù)必須和當(dāng)前的業(yè)務(wù)數(shù)據(jù)一樣,如果不一致就說明有臟寫,要轉(zhuǎn)人工處理。如果數(shù)據(jù)一致沒有臟寫,需要利用undo log和before image將數(shù)據(jù)還原,并刪除前后快照記錄、undo log和行鎖。