分布式事務中常見的三種解決方案

2021-10-04 16:11:42 字數 3172 閱讀 7991

三、基於可靠訊息的最終一致性方案詳解

在電商領域等網際網路場景下,傳統的事務在資料庫效能和處理能力上都暴露出了瓶頸。柔性事務有兩個特性:基本可用和柔性狀態。所謂基本可用是指分布式系統出現故障的時候允許損失一部分的可用性。柔性狀態是指允許系統存在中間狀態,這個中間狀態不會影響系統整體的可用性,比如資料庫讀寫分離的主從同步延遲等。柔性事務的一致性指的是最終一致性。

處理方式一:

public

void

completeorderservice()

在上面的情況中,如果業務操作成功,執行的訊息傳送之前應用發生故障,訊息傳送不出去,導致訊息丟失,將會產生訂單系統與會計系統的資料不一致。如果訊息系統或者網路異常,也會導致訊息傳送不出去,也會造成資料不一致。

處理方式二:

public

void

completeorderservice()

如果將上面的兩個操作調換一下順序,這種情況就會更加不可控了,訊息發出去了業務訂單可能會失敗,會造成訂單系統與業務系統的資料不一致。那麼jms標準中的xa協議是否可以保障傳送的一致性?

xaconnection.

class

xaconnectionfactory.class

xaqueueconnection.

class

xaqueueconnectionfactory.class

xasession.

class

xatopicconnection.class

xatopicconnectionfactory.

class

xatopicsession.class

要求業務操作的資源必須支援xa協議,但是並不是所有的資源都支援xa協議。

兩階段提交協議的成本。

持久化成本等dtp模型的侷限性,例如:全域性鎖定、成本高、效能低。

使用xa協議違背了柔性事務的初衷。

傳送訊息:主動方現將應用把訊息發給訊息中介軟體,訊息狀態標記為「待確認」狀態。

訊息中介軟體收到訊息後,把訊息持久化到訊息儲存中,但是並不影響被動方投遞訊息。

訊息中介軟體返回訊息持久化結果,主動方根據返回的結果進行判斷如何進行業務操作處理:

(1) 失敗:放棄執行業務操作處理,結束,必要時向上層返回處理結果。

(2) 成功:執行業務操作處理。

業務操作完成後,把業務操作結果返回給訊息中介軟體。

訊息中介軟體收到業務操作結構後,根據業務結果進行處理:

(1) 失敗:刪除訊息儲存中的訊息,結束。

(2) 成功:更新訊息儲存中的訊息狀態為「待傳送」,然後執行訊息投遞。

前面的正向流程都成功之後,向被動方應用投遞訊息。

但是在上面的處理流程中,任何乙個環節都有可能出現問題。

對於未確認的訊息,採用按規則重新投遞的方式進行處理。對於以上流程,訊息重**送會導致業務處理介面出現重複呼叫的問題。訊息消費過程中訊息重**送的主要原因就是消費者成功接收處理完訊息後,訊息中介軟體沒有及時更新投遞狀態導致的。如果允許訊息重**送,那麼消費方應該實現業務介面的冪等性設計。

優點:

缺點:優點:

缺點:示例訊息資料表:

名稱資料型別

允許空預設值

屬性釋義

uuid

varchar(50)no—

unique

uuid

version

int(11)no0

—版本號

editer

varchar(100)

yesnull

—修改者

creater

varchar(100)

yesnull

—建立者

edit_time

datetime

yes0000-00-00 00:00:00

—最後修改時間

create_time

datetime

no0000-00-00 00:00:00

—建立時間

msg_id

varchar(50)no—

—訊息id

msg_body

longtextno—

—訊息內容

msg_date_type

varchar(50)

yes—

—訊息資料型別

consumer_queue

varchar(100)no—

—消費佇列

send_times

int(6)no0

—訊息重發次數

is_dead

varchar(20)no—

—是否死亡

status

varchar(20)no—

—狀態remark

varchar(200)

yes——備註

field0

varchar(200)

yes—

—擴充套件欄位0

field1

varchar(200)

yes—

—擴充套件欄位1

field2

varchar(200)

yes—

—擴充套件欄位2

不積跬步,無以至千里;不積小流,無以成江河。

分布式事務中常見的三種解決方案

目錄 三 基於可靠訊息的最終一致性方案詳解 在電商領域等網際網路場景下,傳統的事務在資料庫效能和處理能力上都暴露出了瓶頸。柔性事務有兩個特性 基本可用和柔性狀態。所謂基本可用是指分布式系統出現故障的時候允許損失一部分的可用性。柔性狀態是指允許系統存在中間狀態,這個中間狀態不會影響系統整體的可用性,比...

分布式事務中的三種解決方案詳解

toc 在電商領域等網際網路場景下,傳統的事務在資料庫效能和處理能力上都暴露出了瓶頸。柔性事務有兩個特性 基本可用和柔性狀態。所謂基本可用是指分布式系統出現故障的時候允許損失一部分的可用性。柔性狀態是指允許系統存在中間狀態,這個中間狀態不會影響系統整體的可用性,比如資料庫讀寫分離的主從同步延遲等。柔...

分布式事務中的三種解決方案詳解

toc 在電商領域等網際網路場景下,傳統的事務在資料庫效能和處理能力上都暴露出了瓶頸。柔性事務有兩個特性 基本可用和柔性狀態。所謂基本可用是指分布式系統出現故障的時候允許損失一部分的可用性。柔性狀態是指允許系統存在中間狀態,這個中間狀態不會影響系統整體的可用性,比如資料庫讀寫分離的主從同步延遲等。柔...