預建立訂單失敗:如果實際預建立訂單成功,訂單定時補償機制,定時刪除這部分訂單,不影響資料一致性,下單失敗
預扣減庫存失敗:如果預扣減庫存真實失敗,則下單失敗(訂單由定時補償機制定時刪除,其它應用參照場景4的處理方式,下單失敗;如果實際預扣減庫存成功,參照場景4的處理方式,下單失敗
實際建立訂單失敗:如果建立訂單真實失敗(不需要傳送下單失敗訊息,防止實際建立訂單成功場景)
,訂單的預處理資料通過訂單的定時補償機制嘗試刪除(需要考慮事務處理時間,將超過某個時間範圍該事務還處於預處理狀態的訂單刪除),下單失敗;如果實際建立訂單成功,其它應用參照場景4的處理方式,下單成功(提示使用者下單失敗)
傳送訂單建立成功訊息失敗/庫存服務由於各種原因沒有接到下單成功訊息:庫存服務定時輪詢處理資料(需要考慮事務處理時間,將超過某個時間範圍該事務還處於預處理狀態的訂單篩選出來),詢問訂單服務改訂單id對應的訂單是否建立成功,根據訂單建立成功與否選取相應的事務補償機制
tcc
是把所有的訂單建立步驟平等看待,只要有乙個失敗,整個下單流程全部失敗(比較tcc
裡面的confirm
失敗和基於mq實際建立訂單失敗的補償難易程度)
tcc
是通過發訊息給tcc
伺服器,然後由tcc
服務呼叫應用服務;基於mq的分布式事務補償機制,是通過將訊息傳送到mq
,然後由應用自己去監聽mq
的事件
說說分布式事務
分布式事務說的就是乙個事務的兩個或者多個操作不是在乙個資料庫中進行的,而是在多個資料庫中執行。這個時候,如何保證事務操作的原子性和一致性?舉個支付的例子,支付進行買東西。事務由兩個行為組成,我的購買商品資料表資料 1,支付金額表資料 1。如果這兩個都是在同一庫中,沒啥問題。try catch 事務失...
說說分布式事務 三
tcc是由支付寶架構師提供的一種柔性解決分布式事務解決方案,主要包括三個步驟 tcc的關鍵流程如下圖 以下單和扣減庫存為例子 q 預生成訂單失敗了,為什麼要通過tcc執行預處理資料回滾?a 可能預生成訂單成功,但是介面返回失敗 超時失敗 所以預處理在某些情況下是有預處理資料,需要清理 在整個流程,我...
分布式 分布式事務
是資料庫執行過程中的乙個邏輯單位,由乙個有限的資料庫操作序列構成。事務的acid四大特性 原子性 atomicity 事務作為乙個整體被執行。一致性 consistency 從乙個一致的狀態轉換到另乙個一致的狀態。隔離性 isolation 多個事務併發執行時,併發事務之間互相影響的程度。永續性 d...