作者:清風(fēng)
鏈接:https://www.zhihu.com/question/45413135/answer/115487086
來源:知乎
著作權(quán)歸作者所有,轉(zhuǎn)載請聯(lián)系作者獲得授權(quán)。
分布式系統(tǒng)架構(gòu)中,分布式事務(wù)是一個繞不過去的挑戰(zhàn)!微服務(wù)架構(gòu)本質(zhì)上就是分布式服務(wù)化架構(gòu),微服務(wù)架構(gòu)的流行,讓分布式事務(wù)問題日益突出!尤其是在訂單業(yè)務(wù)、資金業(yè)務(wù)等系統(tǒng)核心業(yè)務(wù)流程中,一定要有可靠的分布式事務(wù)解決方案來保證業(yè)務(wù)數(shù)據(jù)的可靠性和準確性。
目前比較多的解決方案有幾個:
一、結(jié)合MQ消息中間件實現(xiàn)的可靠消息最終一致性
二、TCC補償性事務(wù)解決方案
三、最大努力通知型方案
第一種方案:可靠消息最終一致性,需要業(yè)務(wù)系統(tǒng)結(jié)合MQ消息中間件實現(xiàn),在實現(xiàn)過程中需要保證消息的成功發(fā)送及成功消費。即需要通過業(yè)務(wù)系統(tǒng)控制MQ的消息狀態(tài)
第二種方案:TCC補償性,分為三個階段TRYING-CONFIRMING-CANCELING。每個階段做不同的處理。
TRYING階段主要是對業(yè)務(wù)系統(tǒng)進行檢測及資源預(yù)留
CONFIRMING階段是做業(yè)務(wù)提交,通過TRYING階段執(zhí)行成功后,再執(zhí)行該階段。默認如果TRYING階段執(zhí)行成功,CONFIRMING就一定能成功。
CANCELING階段是回對業(yè)務(wù)做回滾,在TRYING階段中,如果存在分支事務(wù)TRYING失敗,則需要調(diào)用CANCELING將已預(yù)留的資源進行釋放。
第三種方案:最大努力通知xing型,這種方案主要用在與第三方系統(tǒng)通訊時,比如:調(diào)用微信或支付寶支付后的支付結(jié)果通知。這種方案也是結(jié)合MQ進行實現(xiàn),例如:通過MQ發(fā)送http請求,設(shè)置最大通知次數(shù)。達到通知次數(shù)后即不再通知。
http://www.roncoo.com/article/detail/124243