最強的單物件一致性保證:讓一個被複製的系統「看起來只有一份資料」。一旦某次讀拿到新值,之後所有的讀都不准再看到舊值。它是 CAP 裡那個與可用性對撞的「C」。
🧠 Intuition
TIP
線性一致 = 「彷彿單副本 + 即時生效」。把每個操作想成在它「真正生效」的某一瞬間原子完成;只要能把所有操作排成一條符合各自起訖時間的全序,且讀總是回傳該序中最近一次寫,就是線性一致。
- 它是關於單一物件的即時性 (recency) 保證,不是關於多物件交易——別跟 serializability 混淆。
- 一旦寫入完成並被任何一個讀者看到,這個事實對所有人立即可見,不存在「有人還讀到舊值」的窗口。
⚖️ Tradeoffs
線性一致 vs 可序列化 — 兩個不同的軸
- Linearizability:單物件、強調即時順序(recency),分散式複製層的保證。
- Serializability:多物件交易、強調等價於某個序列執行,不要求那個序列符合真實時間。
- 兩者正交:合起來叫 strict serializability(如 Spanner)。SI 兩者都不滿足。
代價 — CAP 與 PACELC
- 網路分區時,要線性一致就不能同時保有可用性(CAP 的 CP 側):少數派必須拒絕服務。
- 即使沒分區,跨副本協調(quorum 讀寫、共識)也會增加延遲(PACELC 的 EL/EC 取捨)。
- 多數系統因此退讓到因果一致——保住「不違反因果」又不必全域協調。
怎麼實作 — 共識是底座
- 單主 + 同步複製讀走 leader:近似,但 failover/腦裂會破壞。
- 共識演算法 (Raft / Paxos) 提供的全序廣播是線性一致的標準底座。
- quorum(w + r > n)本身不足以保證線性一致,需配合讀修復 / 同步等額外手段。
🔑 Takeaways
- 線性一致 = 單副本假象 + 即時生效;判準是能否排成符合真實時序的全序、讀總回最近寫。
- 它與 serializability 正交:前者單物件即時性、後者多物件序列等價,合起來才是 strict serializability。
- 代價硬:分區下與可用性二選一(CP),無分區下也增延遲——所以實務常退到因果一致。
- 共識/全序廣播是標準實作底座;裸 quorum 不足以保證線性一致。
2026-07-01
- Q: quorum 讀寫
w + r > n不是保證讀到最新值嗎,為什麼還不算線性一致? - A:
w + r > n只保證讀寫的副本集合有交集,所以讀「至少看得到一份最新寫」。但並發讀之間可能落在不同副本、看到新舊不一的中間狀態,且寫入未完成時的讀可能一次看到新、下一次又看到舊——破壞了「讀到新值後不再回退」的 recency。要補上同步讀修復或讀時 quorum 修復才接近線性一致。