分布式事務(wù)Saga (一) TCC vs Saga
分布式事務(wù)Saga(二)事務(wù)管理者SagaTransactionalAspect
分布式事務(wù)Saga(三)事務(wù)參與方管理SagaParticipantAspect
分布式事務(wù)Saga(四)事務(wù)恢復(fù)SagaRecoveryManager
項(xiàng)目地址:https://github.com/yangxb2010000/saga
該項(xiàng)目的實(shí)現(xiàn)本質(zhì)上說不是一個(gè)嚴(yán)格意義上的Saga實(shí)現(xiàn)赁还,更像是一個(gè)簡化版的TCC事務(wù)
先對比一下Saga與TCC的區(qū)別
TCC流程
Try 預(yù)留資源 (如:庫存服務(wù)的預(yù)占庫存艘策,支付服務(wù)的凍結(jié)部分賬戶余額)
Confirm 如果所有的事務(wù)參與者try 操作都執(zhí)行成功了,就會調(diào)用所有事務(wù)參與者的confirm操作朋蔫,確認(rèn)資源。(如:庫存服務(wù)的減庫存驯妄,支付服務(wù)的扣減賬戶余額)
Cancel 如果有事務(wù)參與者在try階段執(zhí)行失敗合砂,就調(diào)用所有已執(zhí)行try階段成功的參與方的cancel方法,釋放try階段占用的資源(如:庫存服務(wù)的釋放預(yù)占庫存翩伪,支付服務(wù)的釋放凍結(jié)的賬戶余額)
正常邏輯時(shí)序圖
支付服務(wù)在調(diào)用try階段失敗的事務(wù)回滾
本項(xiàng)目Saga流程
confirm 直接執(zhí)行資源操作缘屹,(如:庫存服務(wù)的減庫存,支付服務(wù)的扣減賬戶余額)
cancel 回滾資源操作轻姿,這個(gè)地方的cancel與TCC中的cancel不一樣逻炊,準(zhǔn)確點(diǎn)說應(yīng)該是回滾犁享,(如:回滾庫存服務(wù)的減庫存操作,回滾支付服務(wù)的扣減賬戶余額的操作)饼疙。當(dāng)然是業(yè)務(wù)層面實(shí)現(xiàn)的回滾窑眯,而非數(shù)據(jù)庫事務(wù)層面的回滾
saga 正常流程圖
saga 異常流程圖
結(jié)論
可以看到Saga對比TCC少了一步try的操作卷要,TCC無論最終事務(wù)成功失敗都需要與事務(wù)參與方交互兩次棺榔。而Saga在事務(wù)成功的情況下只需要與事務(wù)參與方交互一次, 如果事務(wù)失敗,需要交互兩次