分布式事務

2021-10-09 07:34:36 字數 1848 閱讀 4099

上面這個圖是什麼意思呢?tx1和tx2是兩個全域性的事務,

這個時候tx1去對 a 表的 m 字段進行更新操作,m 的初始值 1000。tx1 先開始,開啟本地事務,拿到本地鎖,更新操作 m = 1000 - 100 = 900。本地事務提交前,先拿到該記錄的 全域性鎖 ,本地提交釋放本地鎖。

tx2又開始對a表進行操作,tx2 後開始,開啟本地事務,拿到本地鎖,更新操作 m = 900 - 100 = 800。本地事務提交前,嘗試拿該記錄的 全域性鎖 ,注意tx1 全域性提交前,該記錄的全域性鎖被 tx1 持有,tx2 需要重試等待 全域性鎖 。

如果tx1沒有釋放全域性鎖,那麼tx2就會一直等待全域性鎖,這樣就可以保證資料的一致性了

1.1:at事務如何保證資料的完整性?

假如接下來我們要對這些業務執行一系列操作,假如我們扣錢成功了,但是我們在呼叫另乙個為服務扣庫存的時候,異常了,那麼如果使用ta來實現呢?

at在對每個資料庫操作的時候,必須有乙個日誌表,也就是如果中間的事務出錯了,那麼可以根據日誌表來進行回滾,

1.2:at優點?

1.3:at的缺點?

1.4:at事務的回滾機制?

1. 一階段:

2. 二階段:

多個服務的回滾:

假如說 我現在要呼叫三個服務的介面, 我呼叫了第乙個介面後,這個介面執行完成了 生成了xid和資料存在了log表中,當我執行第二個服務的介面時,這時候介面報錯了,tm會告訴tc說這個事務沒有執行成功,那麼tc就會把已經執行完的事務進行乙個回滾操作。

從上圖我們舉個例子來講述tcc事務,假如現在我們要執行這樣乙個邏輯,當使用者下單以後,我們要去扣使用者的錢,並且扣除對應商品的庫存,然後增加使用者在我們平台的積分,這個時候我們使用tcc事務來保證這幾個事務的一致性

2.1 try操作

這時候我們要對,我們要扣的錢,弄到乙個凍結表裡 我們並不會去操作主表的資料 這就是tcc的乙個try操作

2.2 confirm操作
所謂的confirm操作也就是 如果try都執行完成的情況下 那麼就會執行confirm操作,並且把凍結表裡面的資料都變成0

2.3 cancel操作

即上圖,如果其中乙個try執行失敗的話,那麼我們不必對資料庫進行處理,直接對凍結表將上乙個try的凍結表弄成0就可以了,那麼這個事務就執行失敗了

2.4 tcc的缺點

對業務層需要大量的**(這是個工作量問題)

分布式 分布式事務

是資料庫執行過程中的乙個邏輯單位,由乙個有限的資料庫操作序列構成。事務的acid四大特性 原子性 atomicity 事務作為乙個整體被執行。一致性 consistency 從乙個一致的狀態轉換到另乙個一致的狀態。隔離性 isolation 多個事務併發執行時,併發事務之間互相影響的程度。永續性 d...

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

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

分布式之分布式事務

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