一致性模型 (Consistency Models)

★★★★★Draft

FromDDIA

📚 From the Books

一致性模型 (Consistency Models)ConceptConsistency & Consensus

「一致性」不是一個開關,而是一道從強到弱的光譜。愈強愈好推理、但代價愈高;愈弱愈快、但要自己處理異常。選型的關鍵是:這個場景真的需要多強?

🧠 Core Ideas

TIP

三個常考的層級:線性一致 (Linearizable) =系統看起來只有一份資料、寫入後所有讀取立刻看到新值;因果一致 (Causal) =有因果關係的事件保序、並行事件可各自排列;最終一致 (Eventual) =副本最終收斂、過程中什麼舊值都可能讀到。

⚖️ 為什麼需要線性一致

鎖與 Leader 選舉
  • 單主系統要保證任一時刻只有一個 leader,靠的是線性一致的鎖——否則腦裂 (split brain),多個節點都自認是 leader。
  • ZooKeeper / etcd 正是用共識演算法實作線性一致的鎖與 leader 選舉。
唯一性約束
  • 使用者名稱唯一、餘額不能為負、同一座位不賣兩次——本質都是 compare-and-set,需要就「誰先到」達成一致。
跨通道的時序依賴
  • 圖片先寫入儲存、再經訊息佇列通知縮圖服務。若儲存非線性一致,訊息可能比複製更快到達,縮圖服務讀到舊檔或空檔——兩個獨立通道 + 缺線性一致 = 競態。

⚖️ 線性一致的代價

CAP:分區時必須在 C 與 A 間二選一
  • 網路分區時,要線性一致就得讓連不到 leader 的一側停止服務;要可用就得放棄線性一致。
  • CAP 的 C 專指線性一致這一種模型,不涵蓋較弱的一致性。詳見 CAP 與 PACELC
延遲:回應時間至少正比於網路延遲
  • Attiya & Welch 證明:要線性一致,讀寫回應時間下限就是網路延遲——這是數學結論,不是實作問題。
  • 所以延遲敏感的系統常主動放棄線性一致(連現代多核 CPU 的 RAM 都不提供)。
因果一致是「最佳折衷」
  • 研究指出:因果一致是不犧牲效能與可用性、能達到的最強一致性
  • 意義:在 CAP 限制下,若想兼顧可用與低延遲,因果一致就是上限——比它更強就得付 CAP / 延遲的帳。

🔑 Takeaways

✍️ My Notes

No notes yet — jot your takeaways or Q&A here.

📖 Further Reading

🔗 Dive Deeper