at 模式是一種無侵入的分布式事務解決方案。在 at 模式下,使用者只需關注自己的「業務 sql」,使用者的 「業務 sql」 作為一階段,seata 框架會自動生成事務的二階段提交和回滾操作。
at 模式的執行流程
在一階段,seata 會攔截「業務 sql」,首先解析 sql 語義,找到「業務 sql」要更新的業務資料,在業務資料被更新前,將其儲存成「before image」,然後執行「業務 sql」更新業務資料,在業務資料更新之後,再將其儲存成「after image」,最後生成行鎖。以上操作全部在乙個資料庫事務內完成,這樣保證了一階段操作的原子性。
寫操作以官網的例項作解釋,官網成為寫隔離(說的更加直白)。
官網的例子是這樣的:兩個全域性事務 tx1 和 tx2,分別對 a 表的 m 字段進行更新操作,m 的初始值 1000。
第一階段:tx1 先開始,開啟本地事務,拿到本地鎖,更新操作 m = 1000 - 100 = 900。本地事務提交前,先拿到該記錄的全域性鎖 ,本地提交釋放本地鎖。 tx2 後開始,開啟本地事務,拿到本地鎖,更新操作 m = 900 - 100 = 800。本地事務提交前,嘗試拿該記錄的 全域性鎖 ,tx1 全域性提交前,該記錄的全域性鎖被 tx1 持有,tx2 需要重試等待 全域性鎖 。
注意:在全域性事務中,每一條記錄都有乙個本地鎖和乙個全域性鎖。事務的成功提交需要本地鎖和全域性鎖來把關。在第一階段,不同的事務要操作同一條記錄的時候需要獲得這條記錄的本地鎖和全域性鎖。本地鎖對資料進行acid操作,全域性鎖進行commit操作。
第二階段:
第二階段分為成功與失敗。
成功的時候:全域性提交,釋放 全域性鎖 。tx2 拿到 全域性鎖 提交本地事務。
失敗的時候:如果 tx1 的二階段全域性回滾,則 tx1 需要重新獲取該資料的本地鎖,進行反向補償的更新操作,實現分支的回滾。
此時,如果 tx2 仍在等待該資料的 全域性鎖,同時持有本地鎖,則 tx1 的分支回滾會失敗。分支的回滾會一直重試,直到 tx2 的 全域性鎖 等鎖超時,放棄 全域性鎖 並回滾本地事務釋放本地鎖,tx1 的分支回滾最終成功。
因為整個過程 全域性鎖 在 tx1 結束前一直是被 tx1 持有的,所以不會發生 髒寫 的問題。
成功的提交過程比較容易理解,不同的事務依次提交即可。
失敗的時候:需要等待tx2釋放已經拿到的本地鎖,即tx2的事務提交失敗,tx2的事務開始回滾。然後tx1開始執行回滾操作,tx1事務開始回滾。從而保證了資料不會出現髒讀。
同樣按照官網的例子進行解析。具體可參考官網的工作機制
一階段過程:查詢前映象:根據解析得到的條件資訊,生成查詢語句,定位資料。
select id, name, since from product where name =
'txc'
;
select id, name, since from product where id
= 1`;
, , ]}
], "tablename"
:"product"
}, "beforeimage"
:, , ]}
], "tablename"
:"product"
}, "sqltype"
:"update"}],
"xid"
:"xid:***"
}
二階段-回滾update product set name =
'txc' where id
= 1;
二階段-提 MVPVM模式介紹
一 概述 mvpvm即 model view presenter viewmodel。此模式是mvvm和mvp模式的結合體。但是互動模式發生了比較大的變化。mvvm參考本部落格文章 ios mvvm 模式介紹 mvp參考本部落格文章 mvp模式介紹 二 原理 presenter同時持有view mo...
B S C S模式介紹
1.b s模式 b s browser server,瀏覽器 伺服器 方式的網路結構。客戶端統一採用瀏覽器如 netscape和ie,通過web瀏覽器向web伺服器提出請求,由web伺服器對資料庫進行操作,並將結果傳回客戶端。b s結構簡化了客戶機的工作,但伺服器將擔負更多的工作,對資料庫的訪問和應...
開發模式介紹
1 瀑布模型是由w.w.royce在1970年最初提出的軟體開發模型,瀑布式開發是一種老舊的計算機軟體開發方法。瀑布模型式是最典型的預見性的方法,嚴格遵循預先計畫的需求分析 設計 編碼 整合 測試 維護的步驟順序進行。步驟成果作為衡量進度的方法,例如需求規格,設計文件,測試計畫和 審閱等等。瀑布式的...