分布式事務Saga (一) TCC vs Saga

分布式事務Saga (一) TCC vs Saga
分布式事務Saga(二)事務管理者SagaTransactionalAspect
分布式事務Saga(三)事務參與方管理SagaParticipantAspect
分布式事務Saga(四)事務恢復SagaRecoveryManager

項目地址:https://github.com/yangxb2010000/saga

該項目的實現(xiàn)本質上說不是一個嚴格意義上的Saga實現(xiàn),更像是一個簡化版的TCC事務
先對比一下Saga與TCC的區(qū)別

TCC流程

Try 預留資源 (如:庫存服務的預占庫存,支付服務的凍結部分賬戶余額)
Confirm 如果所有的事務參與者try 操作都執(zhí)行成功了,就會調用所有事務參與者的confirm操作,確認資源。(如:庫存服務的減庫存,支付服務的扣減賬戶余額)
Cancel 如果有事務參與者在try階段執(zhí)行失敗,就調用所有已執(zhí)行try階段成功的參與方的cancel方法,釋放try階段占用的資源(如:庫存服務的釋放預占庫存,支付服務的釋放凍結的賬戶余額)

正常邏輯時序圖

TCC 正常流程圖.png

支付服務在調用try階段失敗的事務回滾

TCC Confirm異常流程圖.png

本項目Saga流程

confirm 直接執(zhí)行資源操作,(如:庫存服務的減庫存,支付服務的扣減賬戶余額)
cancel 回滾資源操作,這個地方的cancel與TCC中的cancel不一樣,準確點說應該是回滾,(如:回滾庫存服務的減庫存操作,回滾支付服務的扣減賬戶余額的操作)。當然是業(yè)務層面實現(xiàn)的回滾,而非數(shù)據(jù)庫事務層面的回滾

saga 正常流程圖

saga 正常流程圖.png

saga 異常流程圖

saga 異常流程圖.png

結論

可以看到Saga對比TCC少了一步try的操作,TCC無論最終事務成功失敗都需要與事務參與方交互兩次。而Saga在事務成功的情況下只需要與事務參與方交互一次, 如果事務失敗,需要交互兩次

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

友情鏈接更多精彩內容