Distributed OLTP Database Systems
在上節中,我們討論了基本的分散式資料庫系統,但仍然有很多細節沒有討論到,這節會討論一些分散式 OLTP 系統的細節,像是 :
- 如果其中有節點發生故障怎麼處理
- 如果訊息在網路上延遲怎麼處理
- 是否需要所有節點都同意才能 commit 一個 transaction
我們要假設所有的節點都是可信任的,不然就需要採用 Byzantine Fault Tolerance 的方法 (blockchain)。
Replication
DBMS 可以將資料複製到多個節點上以及高可用性,在實現上,有幾個重要的考慮因素 :
- Replication Configuration
- Propagation Scheme
- Propagation Timing
- Update Method
Replication Configuration
主要可以分為兩種方式,Primary-Replica 和 Multi-Master。
Primary-Replica
所有關於寫的操作都會先寫到 primary node, primary node 更新完後再通知其他 replica node 更新,而只讀的資料可以直接從 replica node 讀取。 如果 master 節點崩潰,則由共識算法選擇新的 master 節點。
Multi-Master
每個節點都可以更新資料,但節點之間需要透過 atomic commit protocol 來確保一致性。
K-safety
K-safety 是用來衡量資料庫的容錯能力的閾值,K 值表示每個物件必須始終可用的副本數量,如果副本數量低於這個閾值,DBMS 會停止系統。
Propagation Scheme
當交易在資料庫上提交時,DBMS 會決定是否需要等待該交易傳播到其他節點後再向應用程式客戶端發送確認,主要有兩種方式 :
- Synchronous Propagation : Strong Consistency
- Asynchronous Propagation : Eventual Consistency
Synchronous Propagation
主節點將更新發送到從節點,並等待它們確認已完全應用更改後,再通知客戶端更新成功。 確保了強一致性,不會丟失任何數據,通常在傳統的 DBMS 中使用。