天天看點

分布式事務分布式事務的解決方案一、兩階段送出(2PC)二、三階段送出(3PC)三、補償事務(TCC)四、本地消息表五、MQ 事務消息

分布式事務的解決方案

強一緻性:

一、兩階段送出(2PC)

  1. 引進一個事務協調者
  2. 準備階段:每個節點執行自己的任務,并傳回執行結果!
  3. 送出階段:如果全部成功,則全部執行事務送出;否則全部執行事務復原!【如果失敗,則不斷嘗試送出或復原!】
分布式事務分布式事務的解決方案一、兩階段送出(2PC)二、三階段送出(3PC)三、補償事務(TCC)四、本地消息表五、MQ 事務消息
分布式事務分布式事務的解決方案一、兩階段送出(2PC)二、三階段送出(3PC)三、補償事務(TCC)四、本地消息表五、MQ 事務消息

存在的問題?

  1. 同步阻塞:等所有事務執行結果後才能送出或復原
  2. 單點問題:協調者如果中途故障,則參與者可能會一直阻塞
  3. 資料不一緻:協調者如果中途故障

二、三階段送出(3PC)

和2PC類似,隻是準備階段隻是詢問參與者是否可以執行事務,然後預送出階段和送出階段分别是執行、送出事務!

補償性事務

三、補償事務(TCC)

TCC 指的是

Try - Confirm - Cancel

  • Try 指的是預留,即資源的預留和鎖定,注意是預留。
  • Confirm 指的是确認操作,這一步其實就是真正的執行了。
  • Cancel 指的是撤銷操作,可以了解為把預留階段的動作撤銷了。
  1. 先預留
  2. 預留成功則執行
  3. 預留失敗則撤銷
    分布式事務分布式事務的解決方案一、兩階段送出(2PC)二、三階段送出(3PC)三、補償事務(TCC)四、本地消息表五、MQ 事務消息

最終一緻性事務:

四、本地消息表

就是将事務和事務的執行結果放在自己的一張表中,背景任務定時去讀取本地消息表,篩選出還未成功的消息再調用對應的服務,服務更新成功了再變更消息的狀态。 可以容忍了資料暫時不一緻的情況,保證最終一緻性就可以!【可能需要保證幂等性】

五、MQ 事務消息

RocketMQ 就很好的支援了消息事務,讓我們來看一下如何通過消息實作事務。

第一步先給 Broker 發送事務消息即半消息,半消息不是說一半消息,而是這個消息對消費者來說不可見,然後發送成功後發送方再執行本地事務。

再根據本地事務的結果向 Broker 發送 Commit 或者 RollBack 指令。

上一篇: 分布式知識
下一篇: 分布式體驗