分布式事務

2021-10-19 23:23:12 字數 2453 閱讀 9291

事務:指作為單個邏輯工作單元執行一系列操作,要麼完全地執行,要麼完全地不執行

本地事務也稱為資料庫事務,在操作前開啟事務在操作完提交事務,出現異常就回滾,一次事務只連線乙個資料庫

acid

原子性:一組操作要麼全部成功,要麼全部失敗

一致性:保證資料的安全,資料的修改和預期一致

隔離性:事務之間相互隔離,不會互相影響

永續性:事務提交後,資料就持久到磁碟上,就不會改變了(當前事務就不會再去改變資料了)

1.3.1 atomicity 原子性

mysql如何實現原子性的?

利用innodb的undo log ,undo log名為回滾日誌,是實現原子性的關鍵,當食物回滾時能夠撤銷所有已經成功執行的sql語句,它需要記錄你要回滾的相應日誌資訊

例如,當你delete一條資料時候,如果回滾就會insert一條資料

1.3.2 consistency 一致性

是資料庫從乙個有效狀態切換到另乙個有效狀態,要求任何寫到資料庫的資料必須滿足預先定義的額規則,就是在任何時間點都不能出現違反了一致性的要求狀態

1.3.3 durability 永續性
永續性屬性保證一旦事務提交,即是在斷電 崩潰等清空下資料也不會丟失,undolog實現了原子性,redolog實現了事務的永續性

redolog記錄的新資料的備份,在事務提交之前,只要將redolog持久化即可,不需要資料持久化,當系統崩潰時,雖然資料沒有持久化,但是redolog已經持久了,系統可以根據redolog的內容,將所有資料恢復到最新的狀態

undolog+redolog事務的簡化過程,例如:

需求:a:1—–>3 b:2—–>4

1.3.4 isolation 隔離性

隔離性確保資料的併發執行,要求如果兩個事務修改同乙個資料,必須按照順序執行,並且前乙個事務如果未完成,那麼未完成的中間狀態對另乙個事務不可見.

sql標準定義了四種隔離級別mysql全部都支援

事務併發帶來的問題

讀取到了其他事務未提交的資料,未提交意味著資料可能回滾,也可能是最終不會修改到資料庫中,也就是讀取到了不存在的資料,這就是髒讀.

如果我們的隔離級別為讀未提交就可能發生髒讀

我們可以改為讀提交,就可以解決髒讀問題

事務a按照一定的條件進行資料讀取,期間事務b插入了相同搜尋條件的新資料,事務a再次按照原先條件進行讀取時,發現了事務b插入的資料稱為幻讀, 即事務的兩次讀取相同條件的資料讀取到資料數量可能不一樣

mysql的可重複度隔離級別做了間隙鎖,避免了幻讀

可重複讀是指在乙個事務內,最開始讀到的資料和事務結束前的任意時刻讀到的資料都是一致的

反之,不可重複度就是乙個事務多次讀取到的資料是不一致的,通常針對資料更新操作

將隔離級別設定為可重複度,這是mysql的預設隔離級別

小結:

隔離級別

髒讀不可重複度

幻讀讀未提交

可能可能

可能讀提交

不可能可能

可能可重複讀

不可能不可能

可能序列化

不可能不可能

不可能mysql的事務隔離其實是通過鎖來實現的,加鎖自然會造成效能的損失,讀未提交是不加鎖,所以它的效能是最好的,但是安全性也是最低

鎖和mvcc機制

mvcc的全稱是多版本併發控制,這項技術使得innodb的事務隔離級別下執行一致性操作有了保證,乙個行記錄資料有多個版本快照資料,每個事務操作的是自己的快照版本,通過不同的粒度進行快照就可以實現 讀提交 可重複讀隔離級別

2pc即兩階段提交協議,是將整個事務流程分為兩個階段,準備階段和提交階段,

在第一階段,事務管理器與資源管理器先傳送準備請求,大家都ok了就進入第二階段,統一提交

缺陷

2.1.2 基於xa協議的兩階段提交方案

2pc的傳統方案是在資料庫層面實現的,如oracle,mysql都支援2pc協議

dtp模型定義

三個角色之間的互動方式

tm向ap提**用程式程式設計介面,ap通過tm提交及回滾事務

tm交易中介軟體通過xa介面

例如 註冊功能:往使用者庫insert使用者 在積分庫insert積分資訊

使用tm通知使用者rminsert資料,通知積分rminsert資料,兩種都成功之後,鎖定資源,返回結果給tm,最後再統一提交資料

分布式 分布式事務

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

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

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

分布式之分布式事務

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