分布式系統原理 之7 基於MVCC的分布式事務

2021-08-20 11:45:41 字數 1836 閱讀 4098

實現分布式事務除了使用類似「兩階段提交」協議等方式外,另一種簡單高效的方式就是使用mvcc(multi-version cocurrent control,多版本併發控制)技術[3][5]。

顧名思義,mvcc 即多個不同版本的資料實現併發控制的技術,其基本思想是為每次事務生成乙個新版本的資料,在讀資料時選擇不同版本的資料即可以實現對事務結果的完整性讀取。在使用mvcc 時,每個事務都是基於乙個已生效的基礎版本進行更新,事務可以並行進行,從而可以產生一種圖狀結構。

mvcc 的流程過程非常類似於 svn 等版本控制系統的流程,或者說 svn 等版本控制系統就是使用的 mvcc 思想。

分布式 mvcc 的重點不在於併發控制,而在於實現分布式事務

假設在乙個分布式系統中,更新操作以事務進行,每個事務包括若干個對不同節點的不同更新操作。更新事務必須具有原子性,即事務中的所有更新操作要麼同時在各個節點生效,要麼都不生效。假設不存在併發的事務,即上乙個事務成功提交後才進行下乙個事務。

例如,用(site, k, op, oprd)表示在 site 節點上對變數 k 進行 op 操作,運算元為 oprd。那麼乙個典型的事務可能是,這個事務在site_a 上將變數 var1 加 10,將變數 var3 設定為 2,在 site_b 上將變數 var2 減 1。

基於 mvcc 的分布式事務的方法為:為每個事務分配乙個遞增的事務編號,這個編號也代表了資料的版本號。當事務在各個節點上執行時,各個節點只需記錄更新操作及事務編號,當事務在各個節點都完成後,在全域性元資訊中記錄本次事務的編號。在讀取資料時,先讀取元資訊中已成功的最大事務編號,再於各個節點上讀取資料,只讀取更新操作編號小於等於最後最大已成功提交事務編號的操作,並將這些操作應用到基礎資料形成讀取結果。

例 2.7.1:假設系統中有兩個節點 a、b。節點 a、節點 b 狀態如下表

節點操作

事務序號

aset var1 = 11a

set var2 = 21a

set var1 = var1 + 22b

set var3 = 21b

set var4 = 12

1. 若此時全域性元資訊中的最大的生效事務序號為 1,則在節點 a 上:var1=1,var2=2,在節點 b上:var3 =2;

2. 若此時全域性元資訊中的最大的生效事務序號為 2,則在節點 a 上:var1= 1+2=3,var2=2,在節點 b 上:var3=2,var4=1;

從這個例子可以看出,每個節點上儲存了對資料的更新操作,也就是資料的增量(delta),從而可以在讀取資料時將應用不同的更新操作得出不同的資料版本。上例中,計算編號小於等於 1 的事務操作得出的資料即為版本號為 1 的資料,計算編號小於等於 2 的事務操作得出的資料即為版本號為 2 的資料。在新事務執行過程中,雖然更新操作已經逐步記錄到各個節點,但只要全域性元資訊不修改,始終不會讀到沒有生效的事務資料,從而實現了全域性一致性。另外,由於資料具有多個版本,可以自然實現對歷史版本資料的讀取。

上述方法的乙個重要問題是,隨著執行的事務越來越多,各個站點儲存的更新操作會越來越多,讀取資料時需要應用的更新操作也越來越多。工程中可以對此週期性的啟動合併操作,將歷史上不再需要的版本合併為乙個更新操作。例如,對例 2.7.1 中事務序號小於等於 2 的操作進行合併,合併後的節點狀態如下表:

節點操作

事務序號

aset var1 = 32a

set var2 = 22b

set var3 = 22b

set var4 = 12

這裡合併後事務序號設定為合併使用的事務序號。如果節點中存在序號大於 2 的操作,則需要保留這些操作不參與合併。

參考:《分布式系統原理介紹》 - 劉傑

分布式系統原理 筆記

資料分布協議 使用維度各有利弊 雜湊 更新起來要成倍遷移 一致性雜湊 環雜湊,易實現負載均衡 資料量 元資料多,類似b樹的中間節點 資料範圍 也是元資訊多 基本副本協議 中心化 primary secondary 中心節點負責維護資料的更新 併發控制 協調副本的一致性 去中心化 乙個節點向另乙個節點...

日誌系統之基於Zookeeper的分布式協同設計

最近這段時間在設計和實現日誌系統,在整個日誌系統系統中zookeeper的作用非常重要 它用於協調各個分布式元件並提供必要的配置資訊和元資料。這篇文章主要分享一下zookeeper的使用場景。這裡主要涉及到zookeeper在日誌系統中的使用,但其實它在我們的訊息匯流排和搜尋模組中也同樣非常重要。日...

分布式系統 (大規模分布式系統原理解析和架構實踐)

分布式系統的基礎理論 分布式系統 多台機器通過網路連線在一起,作為乙個整體為上層提供服務。一 基礎理論知識 資料分布 複製 一致性 容錯。1 異常 1 伺服器宕機 記憶體錯誤,伺服器停電 如何通過讀取持久化戒指 機械硬碟 固態硬碟 中的資料恢復記憶體資訊,從而恢復宕機前某個一致性狀態。2 網路異常 ...