NoSQL中的分布式、容錯事務
原文 http://www.infoq.com/cn/news/2015/01/distributed-fault-tolerant-nosql
5年前,術語NoSQL才 剛剛開始出現 ,那時 很多 NoSQL 數據庫 的版本都還不到1.0,對于 CAP理論 來說,眾多NoSQL數據庫都選擇了可用性要高于一致性的做法。 ACID 是一個沉重的負擔,而 BASE 則被認為是未來的發展方向。時至今日,社區已經逐漸成熟起來,一些天花亂墜的宣傳也都不見了蹤跡,新一輪的NoSQL數據庫開始尋求重新定義我們對NoSQL的期待,隨之而來的是分布式、容錯事務又開始出現在了人們的視野中。
向分布式、容錯事務領域的進軍起始于2012年秋季,那時Google發布了 Spanner 數據庫。Spanner是個全局分布式、容錯、事務型的NoSQL數據庫;這一系列屬性在之前則被認為是自相矛盾的。不過,Google擊碎了人們的這種誤解,宣稱他們已經在生產環境下使用該數據庫一年多時間了。
就在Google宣布Spanner數據庫的幾個月后, HyperDex 團隊默默地發布了 Warp 擴展,它為HyperDex帶來了分布式、容錯的事務功能。這標志著對這種事務的首個開源實現的發布。趨勢開始發生了轉移,不過還有很長的路要走。
2013年5月, Kyle Kingsbury 在 RICON 上談到了 Jepsen 。在演講中,Kingsbury披露了各種NoSQL數據庫在各種失敗情況下的一系列缺陷。甚至諸如 MongoDB 和 Redis (一般情況下人們都認為他們可以保證一致性)這樣的數據庫都無法信守其承諾。Kingsbury的工作使得社區開始更多地關注于測試與形式化設計,在選擇可用性優于一致性時能更好地理解這種折衷。
出于對一致性的密切關注, FoundationDB 發布了其鍵值存儲的1.0版,這是第一個擁有分布式、容錯事務支持的私有NoSQL數據庫。FoundationDB團隊深刻理解嚴格測試的必要性,同時對其測試框架 Lithium 給予了高度評價,這使得FoundationDB能夠確保ACID特性。后來他們又可以通過 Jepsen 對FoundationDB進行 測試 。
去年又涌現出了兩款將支持分布式、容錯事務作為設計目標的開源NoSQL數據庫。CockroachDB嘗試模仿Spanner的地理位置復制事務,它于去年初啟動; Treode 則在去年6月發布了最初的0.1版。這兩個項目都認真地采取了形式化設計,并吸取了很多分布式系統的學術研究成果。
這些事務型數據庫已經逐步對NoSQL世界產生了影響,我們看到一致性的NoSQL數據庫正在不斷改進自己的承諾。比如說,Redis就面臨著 持續的壓力 ,在構建器分布式功能時要求專注于形式化設計與測試。最近, Tokutek 為MonogoDB發布了其新的Ark一致性算法。Ark基于 Raft 協議,旨在修復MongoDB已知的一致性問題。
雖然現在還是Treode與CockroachDB的早期發展時段,但已經有 不少公司 在生產環境中使用了FoundationDB與HyperDex Warp。分布式、容錯事務將會扎根于NoSQL,我們將會看到其產生的影響。