「分布式事務(wù)」之?dāng)?shù)據(jù)一致性模型

概念

?分布式系統(tǒng)中的數(shù)據(jù)一致性模型定義了在事務(wù)處理過(guò)程中,系統(tǒng)如何保證數(shù)據(jù)在不同節(jié)點(diǎn)間的正確性和一致性。

分類(lèi)

?在分布式系統(tǒng)中,一致性模型主要分為六大類(lèi):
?1.強(qiáng)一致性模型 (Strong Consistency)
?2.弱一致性模型 (Weak Consistency)
?3.最終一致性模型 (Eventual Consistency)
?4.線性一致性 (Linearizability)
?5.順序一致性 (Sequential Consistency)
?6.因果一致性 (Causal Consistency)

介紹

強(qiáng)一致性模型 (Strong Consistency)

?描述:所有節(jié)點(diǎn)在同一時(shí)間看到的數(shù)據(jù)完全一致
?特點(diǎn)

  • 任何讀操作都能獲取最新的寫(xiě)入值
  • 性能較低但可靠性最高(需要等待所有節(jié)點(diǎn)同步)
  • 實(shí)現(xiàn)復(fù)雜度高

?缺點(diǎn)

  • 犧牲了可用性

?實(shí)現(xiàn)方式
?兩階段提交(2PC)、三階段提交(3PC),Raft/Paxos共識(shí)算法

示例:銀行轉(zhuǎn)賬(2PC)

?事務(wù):用戶(hù)A向用戶(hù)B轉(zhuǎn)賬100元。
?過(guò)程
?準(zhǔn)備階段:協(xié)調(diào)者詢(xún)問(wèn)A和B的賬戶(hù)服務(wù)是否可執(zhí)行扣款和加款。
?提交階段:如果A和B都同意,則執(zhí)行轉(zhuǎn)賬;否則回滾。
?特點(diǎn):要么全部成功,要么全部失敗,保證數(shù)據(jù)強(qiáng)一致。


弱一致性模型 (Weak Consistency)

?描述:不保證讀操作能立即看到最新寫(xiě)入

系統(tǒng)并不保證續(xù)進(jìn)程或者線程的訪問(wèn)都會(huì)返回最新的更新過(guò)的值。用戶(hù)讀到某一操作對(duì)系統(tǒng)特定數(shù)據(jù)的更新需要一段時(shí)間,稱(chēng)這段時(shí)間為“不一致性窗口”。系統(tǒng)在數(shù)據(jù)寫(xiě)入成功之后,不承諾立即可以讀到最新寫(xiě)入的值,也不會(huì)具體的承諾多久之后可以讀到。

?特點(diǎn)

  • 系統(tǒng)性能較高
  • 可能出現(xiàn)暫時(shí)不一致(這段時(shí)間稱(chēng)為“不一致性窗口”)

?缺點(diǎn)
?犧牲了一致性

?典型應(yīng)用
?DNS系統(tǒng)、網(wǎng)頁(yè)緩存

示例:社交媒體的點(diǎn)贊計(jì)數(shù)

?事務(wù):用戶(hù)A給某帖子點(diǎn)贊,計(jì)數(shù)+1。
?過(guò)程

  1. 主數(shù)據(jù)庫(kù)更新點(diǎn)贊數(shù),但緩存可能不會(huì)立即刷新。
  2. 不同用戶(hù)可能短暫看到不同的點(diǎn)贊數(shù),但最終會(huì)一致。

最終一致性模型 (Eventual Consistency)

?描述:弱一致性的特例,保證在沒(méi)有新更新的情況下,最終所有訪問(wèn)都將返回最后更新的值

是弱一致性的一種特例。在這種一致性下系統(tǒng)保證用戶(hù)最終能夠讀取到某操作對(duì)系統(tǒng)特定數(shù)據(jù)的更新(讀取操作之前沒(méi)有改數(shù)據(jù)的其他更新操作)。在沒(méi)有故障發(fā)生的前提下,不一致窗口的時(shí)間主要受通信延遲,系統(tǒng)負(fù)載和復(fù)制副本的個(gè)數(shù)影響。

?特點(diǎn)

  • 延遲較低
  • 需要沖突解決機(jī)制
  • 高可用和高性能
  • 平衡了系統(tǒng)的 可用性/一致性

?實(shí)現(xiàn)方式
?異步復(fù)制、消息隊(duì)列(Kafka)、Saga模式

?變種

  • 因果一致性(Causal Consistency)
  • 讀寫(xiě)一致性(Read-your-writes Consistency)
  • 會(huì)話一致性(Session Consistency)
  • 單調(diào)讀一致性(Monotonic Read Consistency)
  • 單調(diào)寫(xiě)一致性(Monotonic Write Consistency)

示例:電商訂單處理(Saga模式)

?事務(wù):用戶(hù)下單 → 扣庫(kù)存 → 支付 → 發(fā)貨。
?過(guò)程

  1. 如果支付失敗,Saga會(huì)觸發(fā)補(bǔ)償事務(wù)(如恢復(fù)庫(kù)存)。
  2. 系統(tǒng)可能短暫不一致(如庫(kù)存已扣但支付未完成),但最終會(huì)調(diào)整。

?特點(diǎn):適用于長(zhǎng)事務(wù),避免長(zhǎng)時(shí)間鎖資源。


線性一致性 (Linearizability)

?描述:最強(qiáng)的單對(duì)象一致性模型
?特點(diǎn)

  • 所有操作看起來(lái)像是原子性的
  • 操作有全局順序
  • 實(shí)現(xiàn)代價(jià)高

?實(shí)現(xiàn)方式
? ZooKeeper、Redis

示例:分布式鎖(ZooKeeper)

?事務(wù):多個(gè)服務(wù)競(jìng)爭(zhēng)同一把鎖。
?過(guò)程

  1. 服務(wù)A獲取鎖后,所有其他服務(wù)必須等待,直到鎖釋放。
  2. 所有節(jié)點(diǎn)看到的鎖狀態(tài)一致,沒(méi)有歧義。

?特點(diǎn)
?適用于分布式協(xié)調(diào),如選主、配置管理。


順序一致性 (Sequential Consistency)

?描述:所有節(jié)點(diǎn)看到的操作順序一致,但不一定實(shí)時(shí)
?特點(diǎn)

  • 比線性一致性弱
  • 保證操作的全局順序
  • 不保證操作的實(shí)時(shí)性

?適用場(chǎng)景
?分布式日志、數(shù)據(jù)庫(kù)復(fù)制

示例:數(shù)據(jù)庫(kù)主從復(fù)制

?事務(wù):主庫(kù)寫(xiě)入數(shù)據(jù),從庫(kù)異步復(fù)制。
?過(guò)程

  1. 主庫(kù)按順序?qū)懭階 → B → C。
  2. 從庫(kù)可能延遲,但最終會(huì)按相同順序A → B → C同步。

?特點(diǎn):適用于讀寫(xiě)分離,讀操作可能讀到舊數(shù)據(jù)。


因果一致性 (Causal Consistency)

?描述:保證有因果關(guān)系的操作順序在所有節(jié)點(diǎn)一致
?特點(diǎn)

  • 無(wú)因果關(guān)系的操作可以并發(fā)執(zhí)行
  • 比順序一致性更高效

?適用場(chǎng)景:社交網(wǎng)絡(luò)、評(píng)論系統(tǒng)

示例:論壇的評(píng)論和回復(fù)

?事務(wù)

  1. 用戶(hù)A發(fā)表帖子(操作X)。
  2. 用戶(hù)B回復(fù)A的帖子(操作Y,依賴(lài)X)。

?過(guò)程:

  1. 所有節(jié)點(diǎn)必須先看到X,再看到Y(jié)。
  2. 但無(wú)關(guān)操作(如用戶(hù)C的獨(dú)立評(píng)論)可以亂序。

?特點(diǎn): 比順序一致性更靈活,適用于社交應(yīng)用。

總結(jié)

一致性模型 保證級(jí)別 示例 適用場(chǎng)景
強(qiáng)一致性 所有節(jié)點(diǎn)實(shí)時(shí)一致 銀行轉(zhuǎn)賬(2PC) 金融、支付
弱一致性 可能短暫不一致 社交媒體點(diǎn)贊 緩存、CDN
最終一致性 最終一致 電商訂單(Saga) 微服務(wù)事務(wù)
線性一致性 全局順序一致 分布式鎖(ZooKeeper) 協(xié)調(diào)服務(wù)
順序一致性 操作順序一致 主從數(shù)據(jù)庫(kù) 數(shù)據(jù)復(fù)制
因果一致性 因果操作有序 論壇評(píng)論 社交網(wǎng)絡(luò)

關(guān)鍵說(shuō)明

  1. 強(qiáng)一致性通過(guò)同步阻塞實(shí)現(xiàn)最高一致性
  2. 最終一致性通過(guò)異步機(jī)制實(shí)現(xiàn)高可用
  3. 線性一致性是強(qiáng)一致性的強(qiáng)化版(包含實(shí)時(shí)性)
  4. 因果一致性在社交場(chǎng)景中平衡性能與正確性
  5. 實(shí)際系統(tǒng)常采用混合模式(如:支付用強(qiáng)一致,訂單用最終一致)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容