來談談分佈式事務

什麼是事務?

事務具體表現A(原子性)C(一致性)I(隔離性)D(持久性)。
本地事務是解決單個數據源上的數據操作的一致性問題的話。
分佈式事務是爲了解決跨越多個數據源上數據操作的一致性問題。

業界目前方案:

  • 兩階段提交(2PC)

    導致佔用鎖很長時間

  • saga

    是一種基於補償的消息驅動的用於解決long-running process的一種解決方案。目標是爲了在確保系統高可用的前提下儘量確保數據的一致性。犧牲了數據的強一致性,僅僅實現了最終一致性,但是提高了系統整體的可用性

  • 補償事務(TCC)

    其實就是採用的補償機制,其核心思想是:針對每個操作,都要註冊一個與其對應的確認和補償(撤銷)操作。TCC模型是把鎖的粒度完全交給業務處理。代碼量會明顯增多

  • 本地消息表(異步確保)

    本地消息表這種實現方式應該是業界使用最多的,其核心思想是將分佈式事務拆分成本地事務進行處理,這種思路是來源於ebay。我們可以從下面的流程圖中看出其中的一些細節:
    在這裏插入圖片描述

  • 事務消息

    和本地消息表的區別是事務由MQ維護
    在這裏插入圖片描述

TCC屬於業務上的分段提交,Try,confirm,cancel都是對應的一段業務邏輯的操作,先預留資源,預留成功後進行確認,不成功就取消,例如轉賬先凍結資金,進行一系列的餘額各方面的檢查,發現符合條件就對賬戶對應的資金狀態改爲凍結,確認階段修改狀態爲扣除,取消的話就把凍結的資金加回原賬戶,其對應的數據庫的操作每段都是一個完整的事物;

2PC是屬於數據庫層面的,先進行prepare,然後逐個進行commit或者rollback,不和具體業務邏輯掛鉤。

TCC的應用範圍更廣,不一定是事物關係數據庫,也可能操作的KV數據庫,文檔數據庫,粒度也可以隨着具體業務靈活調整,性能更好。

掘金原文

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章