分布式事務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階段占用的資源(如:庫存服務的釋放預占庫存,支付服務的釋放凍結的賬戶余額)
正常邏輯時序圖

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

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

saga 異常流程圖

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