1. 強一致性(Strong Consistency)
- 定義:所有節點在任何時間點看到的數據完全一致,讀操作總是返回最近的寫操作結果。
- 特點:
- 寫操作完成后,所有后續讀操作都能立即看到更新。
- 通常需要同步機制(如分布式鎖或兩階段提交)。
- 犧牲部分可用性和性能以保證一致性。
- 優點:
- 數據高度可靠,適合需要嚴格正確性的場景。
- 客戶端邏輯簡單,無需處理數據不一致。
- 缺點:
- 在網絡分區或高延遲時,可能導致系統不可用(符合 CAP 的 CP 模型)。
- 寫操作延遲較高,因為需要跨節點同步。
- 實現方式:
- 兩階段提交(2PC)、Paxos、Raft 共識算法。
- 數據庫例子:Google Spanner(通過 TrueTime 實現)、ZooKeeper。
- 應用場景:
- 金融系統(銀行賬戶、交易)。
- 庫存管理(防止超賣)。
- 分布式鎖和協調服務(ZooKeeper)。
2. 最終一致性(Eventual Consistency)
- 定義:如果沒有新的寫操作,系統最終會使所有節點的數據達到一致,但短期內可能存在不一致。
- 特點:
- 寫操作后,節點間數據可能暫時不一致,但通過同步機制(如后臺復制)最終一致。
- 優先保證可用性和分區容錯性(符合 CAP 的 AP 模型)。
- 優點:
- 高可用性,系統在網絡分區時仍可響應。
- 寫操作延遲低,適合高并發場景。
- 缺點:
- 客戶端可能讀取到舊數據,需處理不一致性。
- 一致性收斂時間可能較長,依賴系統設計。
- 實現方式:
- 異步復制、沖突解決機制(如向量時鐘、CRDT)。
- 數據庫例子:Cassandra、DynamoDB、CouchDB。
- 應用場景:
- 社交媒體(帖子、評論更新)。
- 內容分發網絡(CDN)。
- 日志收集和分析系統。
最終一致性的子類型
- 因果一致性(Causal Consistency):
- 保證因果相關的操作按順序執行(如 A 導致 B,則所有節點先看到 A 再看到 B)。
- 例子:Riak(部分配置)、Dynamo。
- 場景:消息系統、社交網絡的事件流。
- 會話一致性(Session Consistency):
- 在同一會話內,讀操作能看到之前的寫操作結果。
- 例子:Redis(部分配置)、Memcached。
- 場景:用戶會話管理、購物車。
- 單調讀一致性(Monotonic Read Consistency):
- 如果客戶端讀取到某個值,后續讀操作不會返回更舊的值。
- 場景:緩存系統、推薦系統。
- 單調寫一致性(Monotonic Write Consistency):
- 保證同一客戶端的寫操作按提交順序執行。
- 場景:日志系統、事件溯源。
3. 讀寫一致性(Read-your-Writes Consistency)
- 定義:客戶端在寫入數據后,立即讀取時能保證看到自己的寫結果。
- 特點:
- 強調客戶端的寫后讀一致性,不要求全局一致。
- 常用于最終一致性系統的增強。
- 優點:
- 提高用戶體驗,避免寫后讀到舊數據的困惑。
- 實現成本較低。
- 缺點:
- 不保證其他客戶端的一致性。
- 依賴客戶端會話管理。
- 實現方式:
- 會話粘性(Sticky Sessions)、客戶端緩存。
- 數據庫例子:MongoDB(讀寫分離配置)。
- 應用場景:
- 用戶賬戶更新(如密碼修改后立即生效)。
- 個人化設置(如主題切換)。
4. 順序一致性(Sequential Consistency)
- 定義:所有節點的讀寫操作按全局統一的順序執行,操作結果與某種順序化的執行一致。
- 特點:
- 比強一致性稍弱,不要求實時同步,但要求操作順序一致。
- 所有客戶端看到相同的操作順序。
- 優點:
- 提供較強的一致性保證,同時比強一致性性能稍好。
- 適合需要明確操作順序的場景。
- 缺點:
- 仍可能犧牲部分可用性。
- 實現復雜,需協調機制。
- 實現方式:
- 分布式日志、共識算法。
- 數據庫例子:CockroachDB(部分場景)。
- 應用場景:
- 分布式任務隊列。
- 協作編輯系統(如 Google Docs 的操作序列)。
5. 弱一致性(Weak Consistency)
- 定義:對數據一致性幾乎沒有保證,客戶端可能讀取到任意數據狀態。
- 特點:
- 優先最大化可用性和性能。
- 通常依賴客戶端或應用程序自行處理一致性。
- 優點:
- 極高的可用性和低延遲。
- 適合對一致性要求極低的場景。
- 缺點:
- 數據不一致風險高,客戶端邏輯復雜。
- 實現方式:
- 無同步的分布式緩存、簡單復制。
- 數據庫例子:某些 NoSQL 數據庫在最低一致性配置下。
- 應用場景:
- 實時游戲狀態(短暫不一致可接受)。
- 非關鍵性緩存(如廣告展示)。
一致性模型對比
一致性模型 | 一致性強度 | 可用性 | 延遲 | 典型應用場景 |
---|---|---|---|---|
強一致性 | 高 | 低 | 高 | 金融、庫存管理 |
最終一致性 | 低 | 高 | 低 | 社交媒體、CDN |
因果一致性 | 中 | 高 | 中 | 消息系統、事件流 |
會話一致性 | 中 | 高 | 低 | 購物車、用戶會話 |
順序一致性 | 高 | 中 | 中 | 任務隊列、協作編輯 |
弱一致性 | 低 | 高 | 低 | 實時游戲、非關鍵緩存 |