1. 程式人生 > >微服務-分布式事務解決方案

微服務-分布式事務解決方案

消費者 每一個 設有 業務 rdquo 基於 例如 一致性 移除

微服務的搭建

微服務中我們把業務的能力進行了抽象,實際的業務中我們需要用到不同的服務的能力,並且我們處理的業務需要事務的一致性,避免出現數據的紊亂,那麽我們就需要對分布式的微服務進行一致性事務的處理。下面是我自己總結的幾種方案。

分布式事務解決的方案

一、(XA)兩階段方案

1、先提交每一個(這個是加鎖)

2、確認資源,確認每一個RM是否都成功了,判斷是否要提交還是要回滾

二、TCC(try-confirm-cancle)兩階段補償性方案

1、先提交狀態為中間狀態(數據表更改為更新中,而不是加鎖)

2、確認資源,確認每一個RM是否都成功了,都成功了,更新sql的狀態,否則回滾

TCC相比於XA的優點

1、TCC是更新數據為中間狀態,而兩階段方案是加鎖

2、TCC能夠對分布式事務中的各個資源進行分別鎖定,分別提交與釋放,例如,假設有AB 兩個操作,假設A操作耗時短,那麽A就能較快的完成自身的try-confirm-cancel流程,釋 放資源,無需等待B操作。如果事後出現問題, 追加執行補償性事務即可

3、TCC是綁定在各個子業務上的(除了cancle中的全局回滾操作),也就是各服務之間可以 在一定程度上”異步並行”執行

適用的場景:

1、嚴格一致性

2、執行時間短

3、實時性要求高

三、異步確認性

通過將一系列同步的事務操作變為基於消息執行異步操作,避免了分布式事務中的同步阻塞 操作的影響。

需要額外說明的一點,就是事務消息投遞到MQ定閱方後,並不一定能夠成功執行。

需要 MQ訂閱方主動給予消費反饋(ack):

1、如果MQ訂閱方執行遠程事務成功,則給予消費成功的ACK,那麽MQ server可以將事務 消息移除;

2、如果執行失敗,MQ Server需要對消息重新投遞,直至消費成功。

註意事項

1、消息中間件在系統中扮演一個重要的角色,所有的事務消息都需要通過它來傳達,所以 消息中間件也需要支持 HAC 來確保事務消息不丟失。

2、根據業務邏輯的具體實現不同,還可能需要對消息中間件增加消息不重復,不亂序等其 它要求。

適用場景

1、執行周期較長

2、實時行要求不高

例如

1、跨行轉賬/匯款業務(兩個服務分別在不同的銀行中)

2、退貨/退款業務

3、財務,賬單統計業務(先發送到消息中間件,然後進行批量記賬)

四、最大努力通知型

這是分布式事務中要求最低的一種,也可以通過消息中間件實現,與前面異步確保型操作不 同的一點是,在消息由MQ Server投遞到消費者之後,允許在達到最大重試次數之後正常 結束事務。

適用場景

交易結果消息的通知等。

微服務-分布式事務解決方案