一、什麼是事務?事務的特性
1.事務的單個邏輯單元執行一系列操作要麼全部成功要麼全部失敗。
2.事務有四個特性,分別是acid。
atomic:原子性 事務中的各項操作要麼全部做,要麼全部不做,任何一項操作的失敗都會導致整個事務的失敗。
consistent:一致性 事務結束後系統狀態是一致的。
isolate:隔離性 併發執行的事務彼此無法看到對方的中間狀態。
durable:永續性 事務完成後所做的改動都會被持久化,即使發生災難性的失敗,通過日誌和同步備份可以在故障發生後重建資料。
二、當事務併發時,出現的問題
1.第一類更新丟失:a事務撤銷時,把b事務已經提交更新的資料給覆蓋了。
2.髒讀:a事務讀取到了b事務還沒有提交更新的資料。
3.不可重複讀:事務a讀取到了事務b提交的更新(update和delete)資料。(如果要避免不可重複讀就要鎖行)
4.幻讀:事務a讀取到了事務b新插入(insert)的資料。(如果要避免幻讀就要鎖表)
5.第二類更新丟失:a事務提交更新的資料,將b事務提交更新的資料覆蓋了。
三、事務的隔離級別
事務的隔離級別越高,併發性越差
四、什麼是分布式事務?
分布式事務就是指事務的參與者、支援事務的伺服器、資源伺服器以及事務管理器分別位於不同的分布式系統的不同節點之上。由於業務的過於龐大,很多系統都被拆成多個服務和資料庫。如果乙個操作需要多個服務和資料庫來共同執行,但是單個的事務只能作用於乙個資料庫,這樣就需要應用分布式事務來保證資料的一致性。常見的例子就是
五、現行的分布式事務方案。
1.基於xa協議的兩階段提交方案
所謂的兩段式提交方案就是將整個分布式事務分為兩個階段,第一階段是表決階段,所有參與者都將本事務能否成功的資訊反饋發給協調者;第二階段是執行階段,協調者根據所有參與者的反饋,通知所有參與者,步調一致地在所有分支上提交或者回滾。
兩階段提交方案應用很廣泛,但是效能不是很好,比較耗時間。xa是乙個分布式協議,其大致分為兩個部分,事務協調器和本地資源管理器。本地資源管理器是由資料庫實現,而事務管理器作為全域性的排程者,負責各個本地資源的提交和回滾。mysql對ax的支援不是很理想。
2.tcc方案
tcc方案是兩段式提交的一種改進,在電商和金融領域應用的比較多。其將整個業務邏輯的每個分支顯式的分成了try、confirm、cancel三個操作。try部分完成業務的準備工作,confirm部分完成業務的提交,cancel部分完成事務的回滾。
事務開始時,業務應用會向事務協調器註冊啟動事務。之後業務應用會呼叫所有服務的try介面,完成一階段準備。之後事務協調器會根據try介面返回情況,決定呼叫confirm介面或者cancel介面。如果介面呼叫失敗,會進行重試。
tcc對業務**的入侵性比較強,且開發難度比較大。
基本原理如下圖所示。
3.基於訊息的最終一致性方案
基於訊息的最終一致性方案就是保證本地操作和傳送訊息在乙個事務中,其他服務通過訂閱訊息來進行相應的資料庫操作,以達到資料的最終一致性。
分布式 分布式事務
是資料庫執行過程中的乙個邏輯單位,由乙個有限的資料庫操作序列構成。事務的acid四大特性 原子性 atomicity 事務作為乙個整體被執行。一致性 consistency 從乙個一致的狀態轉換到另乙個一致的狀態。隔離性 isolation 多個事務併發執行時,併發事務之間互相影響的程度。永續性 d...
分布式事務 分布式事務的實現
如果在多個服務中需要對不同的資料庫進行操作。因為不同服務操作的資料庫都不同,所以保證在同乙個事務中完成操作顯然是不科學的。那實現分布式事務的思想 1 方法入口,建立一條日誌記錄,狀態定義為初始狀態,即儲存本條日誌記錄 可以儲存在資料庫中,也可以寫出到本地磁碟檔案 2 可以在非同步執行緒或在定時任務中...
分布式之分布式事務
被人問到分布式事務,之前學rabbitmq 的時候學到過rabbitmq 高階的事務,因為沒有用過,所有沒有回答好。這裡總結一下。1.單機版事務。事務的四大特性 acid a.原子性 b.一致性 c.隔離性 d.永續性 單機事務可以通過設定事務的隔離級別 參見spring 的事務隔離級別 2.分布式...