關於事務補償機制

mcxiaoracle發表於2022-06-24

事務補償機制

什麼是事務補償機制?

針對每個操作,都要註冊一個與其對應的補償(撤銷)操作

在執行失敗時,呼叫補償操作,撤銷之前的操作

A給B轉賬的例子,A和B在兩家不同的銀行

A賬戶減200元,B賬戶加200元

兩個操作要保證原子性,要麼全成功、要麼全失敗

由於A和B在兩家不同的銀行,所以存在分散式事務的問題

轉賬介面需要提供補償機制

如果A在扣減的過程出現問題,直接丟擲異常,事務回滾

B在增加餘額的過程中,出現問題,要呼叫A的補償介面

A之前的扣減操作,得到了補償,進行了撤銷

保證了A和B的賬是沒有問題的


  • 優點:邏輯清晰、流程簡單
  • 缺點:資料一致性比XA還要差,可能出錯的點比較多
  • TCC屬於應用層的一種補償方式,程式設計師需要寫大量程式碼



重試補償案例:

當時是簡單的進行定時,每隔15分鐘拉取所有的未推送記錄(包含上次未推成功的),放入MQ中,在消費端進行資料推送。---在消費端有另一套資料一致性機制,這裡可以預設只要放入MQ,即可認定資料推送成功。

1、線下記錄表增加兩個欄位,推送是否成功欄位status,推送次數字段reload_count,表中已有記錄建立時間ins_time

2、設定篩選條件:當前時間 - 建立時間 >= 2的n次冪 * 初次間隔時長

SELECT oh.*

ta_combine_order_hdr oh

where oh.`status`=2

and UNIX_TIMESTAMP(NOW())-UNIX_TIMESTAMP(oh.ins_time) >= POW(2,oh.reload_count) *10

and oh.ask_type = 1

limit 200


————————————————

推薦閱讀:

原文連結:https://blog.csdn.net/weixin_45647118/article/details/117929335

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69949806/viewspace-2902747/,如需轉載,請註明出處,否則將追究法律責任。

相關文章