分布式 分布式事務

2021-10-07 14:14:36 字數 2157 閱讀 3009

是資料庫執行過程中的乙個邏輯單位,由乙個有限的資料庫操作序列構成。

事務的acid四大特性:

原子性(atomicity):事務作為乙個整體被執行。

一致性(consistency):從乙個一致的狀態轉換到另乙個一致的狀態。

隔離性(isolation):多個事務併發執行時,併發事務之間互相影響的程度。

永續性(durability):已被提交的事務對資料庫的修改應該永久儲存在資料庫中。

事務的參與者、支援事務的伺服器、資源伺服器以及事務管理器分別位於不同的分布式系統的不同節點智商,且屬於不同的應用,分布式事務需要保證這些操作要麼全部成功,要麼全部失敗。

分布式事務解決方案

優點:盡量保證資料的強一致,適合對資料強一致要求很高的關鍵領域

缺點:

無法解決的問題:協調者發出commit訊息之後宕機,唯一接收到這條訊息的參與者同時也宕機。那麼即使協調者通過選舉協議產生了新的協調者,這條事務的狀態也是不確定的,沒人知道事務是否被提交了。

優點: 相對2pc,3pc主要解決單點故障問題,並減少阻塞,因為一旦參與者無法及時收到來自協調者的資訊之後,他會預設執行commit。而不會一直持有事務資源並處於阻塞狀態。

缺點: 由於網路原因,還是會存在資料不一致問題。

例如: 小紅要向小白轉賬100元,執行流程:

首先在 try 階段,要先呼叫遠端介面檢查小紅的賬戶餘額是否大於等於100元,若足夠則對餘額進行凍結,檢查小白的賬戶狀態是否正常。

在 confirm 階段,執行遠端呼叫的轉賬的操作,扣除小紅賬戶100元,小白賬戶加100元。

如果第2步執行成功,那麼轉賬成功,小紅賬戶解凍,流程結束。

如果第二步執行失敗,則呼叫服務a的cancel方法,賬戶餘額回滾100元及解凍小紅賬戶,同時呼叫服務b的cancel方法,賬戶扣除100元。

優點: 跟2pc比起來,實現以及流程相對簡單了一些。

缺點:

工作流程:

訊息生產方,需要額外建乙個訊息表,並記錄訊息傳送狀態。訊息表和業務資料要在乙個事務裡提交,也就是說他們要在乙個資料庫裡面。然後訊息會經過mq傳送到訊息的消費方。如果訊息傳送失敗,會進行重試傳送。

訊息消費方,需要處理這個訊息,並完成自己的業務邏輯。此時如果本地事務處理成功,表明已經處理成功了,如果處理失敗,那麼就會重試執行。如果是業務上面的失敗,可以給生產方傳送乙個業務補償訊息,通知生產方進行回滾等操作。

生產方和消費方定時掃瞄本地訊息表,把還沒處理完成的訊息或者失敗的訊息再傳送一遍。

優點: 一種非常經典的實現,避免了分布式事務,實現了最終一致性。

缺點: 訊息表會耦合到業務系統中,如果沒有封裝好的解決方案,會有很多雜活需要處理。

有一些第三方的mq是支援事務訊息的,比如rocketmq,他們支援事務訊息的方式也是類似於採用的二階段提交,但是市面上一些主流的mq都是不支援事務訊息的,比如 rabbitmq 和 kafka 都不支援(rabbitmq、kafka基於ack機制)。

以阿里的 rocketmq 中介軟體為例,流程為:

傳送乙個事務訊息,這個時候,rocketmq將訊息狀態標記為prepared,注意此時這條訊息消費者是無法消費到的。

執行業務**邏輯。

確認傳送訊息,rocketmq將訊息狀態標記為可消費,這個時候消費者才能真正消費到這條訊息。

如果步驟3確認訊息傳送失敗,rocketmq會定期掃瞄訊息集群中的事務訊息,如果發現了prepared訊息,它會向訊息傳送端(生產者)確認。rocketmq會根據傳送端設定的策略來決定是回滾還是繼續傳送確認訊息。這樣就保證了訊息傳送與本地事務同時成功或同時失敗。

優點: 實現了最終一致性,不需要依賴本地資料庫事務。

缺點: 目前主流mq中只有rocketmq支援事務訊息。

核心元件:

工作流程:

tm 向 tc 申請開啟乙個全域性事務,全域性事務建立成功並生成乙個全域性唯一的事務id(xid),xid 在微服務呼叫鏈路的上下文中傳播。

rm 向 tc 註冊分支事務,接著執行這個分支事務並提交事務(重點:rm在此階段就已經執行了本地事務的提交/回滾),最後將執行結果匯報給tc。

tm 根據 tc 中所有的分支事務的執**況,發起全域性提交或回滾決議。

tc 排程 xid 下管轄的全部分支事務完成提交或回滾請求。

分布式之分布式事務

被人問到分布式事務,之前學rabbitmq 的時候學到過rabbitmq 高階的事務,因為沒有用過,所有沒有回答好。這裡總結一下。1.單機版事務。事務的四大特性 acid a.原子性 b.一致性 c.隔離性 d.永續性 單機事務可以通過設定事務的隔離級別 參見spring 的事務隔離級別 2.分布式...

分布式理論 分布式事務

資料庫事務 事務的基本特性 事務有4個非常重要的特性,即我們常說的 acid atomicity 原子性 是說事務是乙個不可分割的整體,所有操作要麼全做,要麼全不做 只要事務中有乙個操作出錯,回滾到事務開始前的狀態的話,那麼之前已經執行的所有操作都是無效的,都應該回滾到開始前的狀態。consiste...

分布式事務 分布式事務的實現

如果在多個服務中需要對不同的資料庫進行操作。因為不同服務操作的資料庫都不同,所以保證在同乙個事務中完成操作顯然是不科學的。那實現分布式事務的思想 1 方法入口,建立一條日誌記錄,狀態定義為初始狀態,即儲存本條日誌記錄 可以儲存在資料庫中,也可以寫出到本地磁碟檔案 2 可以在非同步執行緒或在定時任務中...