分布式事務的實現方案


 一,柔性事務

互聯網分布式高並發場景,傳統單機事務在數據庫性能和處理能力上都出現瓶頸,於是有人就基於分布式CAP (一致性、可用性、分區容忍性)和BASE (基本可用(Basically Available)、柔性狀態(Soft State)、最終一致性(Eventual Consistency),BASE理論是大型分布式系統場景下的設計思想,通過強一致性保證最終一致性來獲得高可用性理論提出了“柔性事務”的概念。

 與傳統單機事務嚴格遵守ACID原則不同,柔性事務遵守BASE理論,通常用在分布式環境下,常見的實現方式有:兩階段提交(2PC)、TCC補償性提交,基於消息的異步確保型,最大努力通知型。

1、2PC兩階段提交

 2PC兩階段提交,有強一致性,是CP的典型實現。常見的標准有XA、JTA等。

缺點:協調者要等待所有參與者發出yes或至少一個發出no請后才能執行提交或中斷操作,可能會造成長時間鎖住多個只有,造成性能瓶頸,導致系統可用性很低。實現復雜,不利於擴展, 一般很少使用。

2、TCC補償性提交

TCC(Try-Confirm-Cancle)是基於補償型事務的一種實現,具有最終一致性,是AP的實現。

 特點:TCC能對分布式事務中各個資源進行分別鎖定,分別提交與釋放,如果事后出現問題,追加執行補償性事務即可。要注意事務管理器節點要以帶同步復制語義的高可用集群(HAC)方式部署,並使用多數派算法避免集群發生腦裂問題。

 使用場景:實時性、一致性要求高,需要獲取遠程執行結果決定邏輯業務走向,如紅包業務等。

3、異步確保型

異步確保型是將同步事務操作變為基於消息執行的異步操作,通過異步信息和補償性事務實現了服務的解耦,避免了分布式事務中的同步阻塞操作的影響。

特點:本地發送事務消息到MQ並收到MQ確認后就執行commit操作,事務執行失敗,則MQ丟棄該消息,事務執行成功則MQ允許並保證消息訂閱方消費本條事務消息(訂閱方消費成功MQ將事務消息刪除,否則嘗試直到消費成功)。 此方案要求MQ支持HAC來確保事務消息不丟失。實際實現時可根據具體業務場景,先將事務消息在本地落地執行事務操作后再將消息發送到MQ,並保證本地休息到MQ,再從MQ到訂閱方過程消息不丟失(要有確認操作,失敗重試)。

使用場景: 實時性要求不高,主業務邏輯無需外部數據變更協助來完成的最終一致性事務,如跨行轉賬匯款,退貨、退款業務等。

4、最大努力通知型

最大努力通知型和前面異步確保型類似,也是基於異步消息執行,只是在消息從MQ到訂閱者時,允許在達到最大重試次數之后正常結束事務。

使用場景:對一致性要求不高,如交易結果消息通知等。 

 二、最佳實踐

  • 如果業務場景需要強一致性, 那么盡量避免將它們放在不同服務中, 也就是盡量使用本地事務, 避免使用強一致性的分布式事務.
  • 如果業務場景能夠接受最終一致性, 那么最好是使用基於消息的最終一致性的方案(異步確保型)來解決.
  • 如果業務場景需要強一致性, 並且只能夠進行分布式服務部署, 那么最好是使用TCC方案而不是2PC方案來解決.

https://github.com/QNJR-GROUP/EasyTransaction 

http://blog.csdn.net/congyihao/article/details/70195154

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM