分佈式產生的背景:
1. 傳統項目多數據源時;
2. RPC遠程調用中發起方A調用遠程接口B成功後,發起方A突然報錯(此時B方可能已經提交,A報錯後無法再回滾B);
解決思路:採用最終一致性和2PC或3PC(兩階段提交、三階段提交),短暫的數據延遲是允許的,但是最終數據要保持一致。
解決方案:
1. JTA+Atomic,適用於傳統項目
2. 基於MQ補償解決分佈式事務,RabbitMQ
3.RocketMQ中自帶事務消息;
4.基於LCN解決分佈式事務,原理:代理我們自己的數據源重寫連接Commit和Rollback方法實現假關閉,傳遞事務的全局ID;
5.基於Seata解決分佈式事務,原理和LCN一致,
兩者區別:在於回滾的方式,LCN回滾是假關閉容易造成死鎖,但是
seata採用undo log日誌逆向生成sql語句實現回滾。
以上5種方案適合於企業內部項目的服務實現。
如果是外部和外部的接口解決分佈式事務問題,可以採用類似支付寶異步回調方式+主動查詢