2012年8月21日 星期二

CAP理論與分散式資料庫


根據CAP理論,一致性(C),可用性(A),分區容錯性(P),三者不可兼得,必須有所取捨。而傳統資料庫保 證了強一致性(ACID模型)和高可用性,所以要想實現一個分散式資料庫集群非常困難,這也解釋了為什麼資料庫的擴展能力十分有限。而近年來不斷發展壯大 NoSQL運動,就是通過犧牲強一致性,採用BASE模型,用最終一致性的思想來設計分散式系統,從而使得系統可以達到很高的可用性和擴展性。

但是,對於CAP理論也有一些不同的聲音,資料庫大師Michael Stonebraker就撰文《Errors in Database Systems, Eventual Consistency, and the CAP Theorem》,表示為了P而犧牲C是不可取的。事實上,資料庫系統最大的優勢就對一致性的保證,如果我們放棄了一致性,也許NoSQL比資料庫更有優勢。那麼,有沒有可能實現一套分散式資料庫集群,即保證可用性和一致性,又可以提供很好的擴展能力呢?回答是:有的。

目前,有很多分散式 資料庫的產品,但是絕大部分是面向DSS類型的應用,因為相比較OLTP應用,DSS應用更容易做到分散式擴展。Michael Stonebraker提到了一種新型的資料庫VoltDB,它的定義是Next-Generation SQL Database for Fast-Scaling OLTP Applications。雖然產品還沒有問世,但是從技術資料上來看,它有幾個特點:

  1. 採用Share nothing架構,將物理伺服器劃分為以CPU core為單位的Virtual node,採用Sharding技術,將資料自動分佈到不同的Virtual node,最大限度的利用機器的計算資源;
  2. 採用記憶體資料訪問技術,類似於記憶體中資料庫(In-memory database),區別于傳統的資料庫(Disk-based database),消除了傳統資料庫記憶體管理的開銷,而且回應速度非常快;
  3. 每個Virtual node上的操作是自治的,利用佇列技術將併發訪問變為串列訪問,消除了傳統資料庫串列控制的開銷(比如LatchLock)
  4. 資料同步寫多個副本,不存在單點故障,而且消除了傳統資料庫需要記錄redo log的開銷。


 VoltDB與傳統資料庫的對比,可以看到VoltDB即支援傳統資料庫的ACID模型,又提供了類似NoSQL產品很高的擴展能力。

這個產品,讓我想到了MySQL cluster,同樣是shared-nothing架構,NDB存儲引擎也要求將資料存放在記憶體中,資料根據PK被分佈到多個不同的節點上,同一份資料可以保存多個副本,防止單點故障。
MySQL cluster目前的主要問題是性能不佳,但是我認為MySQL cluster的架構是分散式資料庫未來的趨勢,Oracle收購MySQL後,很多人對MySQL的前途表示擔憂,而我作為一個用戶,除了可能會收費這件事以外,我一點也不擔心MySQL的前景,反而有所期待,因為在資料庫領域沒有任何一個公司比Oracle更懂資料庫,而Oracle也正在大力發展MySQL clusterMySQL cluster一定會成為分散式資料庫領域內最好的解決方案之一。



沒有留言: