分佈式事務

分佈式事務概念

業務的本質是對數據進行的操作,最終沉澱下來的就是數據,當然這些數據沉澱都是在某個確定的上下文條件下進行沉澱的。事務就是業務操作數據時的性質(一致性和原子性是基本,隔離性和持久性是方法)。分佈式事務指的就是事務是在分佈式場景下的特殊情況而已。

原子性

爲了保證操作數據的安全,必須將操作數據控制在同一個上下文,也就是說從看到數據到操作數據這整個過程都是同一個上下文。也就是說這些操作要麼都執行,要麼都不執行。

實現原子性的方法

爲了保障數據處在同一個上下文,提出了鎖的概念,鎖就是將數據控制在同一個上下文的手段,這種手段是獨佔和強制的。一旦鎖被佔用,就不能再佔用,鎖是資源的入口。這就是所謂的悲觀鎖方案。先控制住上下文,然後在進行修改。

CAS

CAS是另一種將數據控制在同一個上下文的手段,只不過它不是強制性地把資源的入口給獨佔,而是在更新資源的時候把自己的上下文給寫進去,告訴其他使用資源的“這個資源已經被我給更新了”。這就是所謂的樂觀鎖方案。先獲取上下文,修改的同時比較寫入的上下文和獲取的上下文,相同表明處於同一個上下文裏。

一致性

業務操作的本質就是對數據的狀態進行改變,這就說明了數據庫在整個狀態的變化過程中是有序的。從另一個角度來說,每個業務操作其實就對應了數據庫的某個具體的狀態,也就是數據快照。反向理解,如果某個業務操作失敗了,那麼整個數據庫應該可以回滾到上一個狀態。這就是一致性,用來表示業務操作和沉澱數據之間一一對應的關係。
原子性和一致性其實本質上都是對同一個東西的不同描述吧。有了原子性,一致性肯定是有保障的;需要一致性,那麼必須有原子性給他提供保駕護航。
當處於分佈式場景下,事務所操作數據是分佈在不同網絡節點下的。換個角度看問題,其實就是對同一份數據的描述需要有多個網絡節點的參與。
一致性在分佈式場景下,按照使用的強度,可以分爲最終一致性和強一致性。

最終一致性實現方案

最終一致性實現方案業界都比較成熟了,基本都是通過MQ異步進行數據同步。也就是說先只以網絡中的某個節點上的數據作爲整個操作成功與否的判斷條件,如果成功了就以後就把這個成功操作的行爲同步到其他節點,注意是行爲,也就是對操作的描述。

強一致性實現方案

分佈式鎖

兩段提交協議

CAS本質就是兩段提交協議。在操作資源的時候,先獲取資源的上下文(commit階段),然後在更新(accept階段),只有最先更新的才成功。

paxos協議

paxos協議就是兩段提交協議在分佈式系統中的運用,原來更新數據都只有唯一的一份,現在是有多份相同的數據。

raft協議

raft協議是一種簡化過的paxos協議。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章