什麼是分散式資料庫?
分散式資料庫將資料分佈在不同位置的多個伺服器(節點)上。CAP定理指出,你只能保證三個特性中的兩個:一致性(每次讀取都能看到最新的寫入)、可用性(每個請求都能獲得響應)和分割槽容錯性(系統在網路分裂時仍能工作)。
為什麼這很重要?從Google到Netflix,每個主要的網際網路服務都依賴分散式資料庫。理解一致性和可用性之間的權衡,對於構建服務數十億使用者的可靠、可擴充套件系統至關重要。
📖 深入了解
類比 1
想像一下一個在 5 個城市設有分公司的圖書館系統,所有分公司都共享相同的目錄。當有人在 A 分行借書時,所有其他分行都需要更新他們的記錄。如果分支 C 的電話線路發生故障(網路分區),分支 C 可能仍會顯示該書可用 — 這是一致性問題。您可以鎖定所有借貸,直到分支 C 重新連接(選擇一致性),或讓每個分支保持獨立借貸並稍後進行協調(選擇可用性)。
類比 2
想像與不同國家的朋友進行群聊。當您發送訊息時,每個人都應該以相同的順序看到它。但如果某人的網路斷線,他們就會錯過訊息,並可能回覆過時的訊息,從而產生衝突的對話串。分散式資料庫大規模地面臨這個確切的問題,並使用向量時鐘和 CRDT 等技術來解決每個人重新連接時的混亂情況。
🎯 模擬器提示
初學者
從 5 個節點和複製因子 3 開始 — 這表示每個資料都儲存在 5 個節點中的 3 個上
中級
比較寫入一致性 ALL 與 ONE — ALL 速度較慢,但保證每個副本都擁有最新數據
專家
停用向量時鐘並在分區期間觸發並發寫入,以觀察未解決的衝突
📚 術語表
🏆 關鍵人物
Eric Brewer (2000)
在加州大學柏克萊分校提出了 CAP 定理,透過證明同時保證一致性、可用性和分區容錯性的不可能性,從根本上塑造了分散式資料庫設計
Leslie Lamport (1998)
創建了 Paxos 共識演算法,並開創了分散式系統理論,其中包括邏輯時鐘、Lamport 時間戳和拜占庭將軍問題等概念
Diego Ongaro (2014)
在史丹佛大學設計了 Raft 共識演算法,使分散式共識對於 etcd 和 CockroachDB 等現實系統來說變得易於理解和實用
Werner Vogels (2007)
領導了 Amazon Dynamo 的設計,該產品引入了一致的哈希、向量時鐘和草率仲裁 — 啟發了 Cassandra、Riak 和整個 NoSQL 運動
Jeff Dean & Wilson Hsieh (2012)
共同設計了 Google Spanner,這是第一個使用 TrueTime API 和 GPS/原子鐘同步實現外部一致事務的全球分散式資料庫
Marc Shapiro (2011)
INRIA 首創的無衝突複製資料類型 (CRDT),為無協調的最終一致性提供數學基礎
🎓 學習資源
- Brewer's Conjecture and the Feasibility of Consistent, Available, Partition-Tolerant Web Services [paper]
CAP 定理的形式證明,建立了分散式系統的基本不可能性結果(ACM SIGACT News,2002) - Dynamo: Amazon's Highly Available Key-value Store [paper]
Amazon 關於使用一致雜湊、向量時脈和草率仲裁的最終一致分散式儲存的影響力論文 (SOSP 2007) - Spanner: Google's Globally Distributed Database [paper]
Google 基於 TrueTime 的全球一致資料庫透過 GPS 和原子鐘同步實現外部一致性 (OSDI 2012) - In Search of an Understandable Consensus Algorithm (Raft) [paper]
Raft 共識演算法旨在易於理解,現已用於 etcd、CockroachDB 和 TiKV(USENIX ATC 2014) - Designing Data-Intensive Applications [article]
Martin Kleppmann 的分散式系統基礎知識、複製、分區和一致性模型綜合指南 - Jepsen.io [article]
Kyle Kingsbury 對真實故障條件下分散式資料庫正確性聲明的嚴格測試和分析 - The Raft Consensus Algorithm Visualization [article]
Raft 共識演算法的互動式視覺化,包括逐步的領導者選舉和日誌複製