1. 程式人生 > >微軟想要打造一統天下的單一資料庫:Cosmos DB

微軟想要打造一統天下的單一資料庫:Cosmos DB

微軟在今天(2017年5月11日)召開的Build開發者大會上釋出了新的全域性分散式資料庫:Cosmos DB,微軟技術院士達爾瑪·舒克拉(Dharma Shukla)與我聊起該資料庫時說:“我們希望這是未來的資料庫,能夠在今後延續幾十年。”而對於舒克拉來說,這是一個始於七年前的專案,當時他開始建立原型,研究全域性分散式資料庫會是什麼樣子,微軟經常喜歡將全域性分散式稱之為“全球規模”(planet-scale)。這個專案(當初名為“Project Florence”)最初變成了Azure的NoSQL資料庫服務:DocumentDB,該資料庫服務於2015年釋出,現在演變成了Cosmos DB。

用舒克拉的話來說,相比DocumentDB所提供的功能,Cosmos DB“向前邁出了一大步”。DocumentDB提供的功能只是如今的Cosmos DB的一小部分,難怪知名IT網站ZDNet將Cosmos DB稱為是DocumentDB的超集。DocumentDB實際上是儲存JavaScript物件標註(JSON)資料的資料庫,而Cosmos DB覆蓋的範圍要廣泛得多。它拓展了無索引資料庫系統這個概念,增添了支援多種新型資料的功能,這讓Cosmos DB擁有足夠的靈活性,比如說足以充當圖形資料庫,或者充當鍵值資料庫。對於期望儲存較為傳統的列式關係型資料的那些人來說,Cosmos DB還將提供支援那類資料的功能。

Azure Cosmos DB

這一切都秉承這年頭你與微軟開發部門的人員交談時,幾乎免不了都會聽到的這句口號:“我們想要滿足開發人員的需要,無論他們在什麼地方。”所以,雖然你也可以使用MongoDB API來訪問DocumentDB中的資料,但是Cosmos DB還支援SQL表、Gremlin表和Azure表,開發團隊計劃在不遠的將來發布一大批類似的驅動層和轉換層。

舒克拉告訴我:“沒有資料天生就是關係型資料。在現實世界中,沒有人從模式(schema)方面來考慮――他們考慮圖形,或者如果面對的是物聯網裝置,可能考慮JSON文件。我們想要確保,我們開發的系統有一個通用引擎,可以高效地處理不同的資料模型。”

考慮到其淵源,Cosmos DB在許多方面借鑑了DocumentDB,這不足為奇。其中一個方面就是擁有可調整的一致性模型(consistency model)。如果你平時不常考慮全域性分散式資料庫,那麼一致性模型對你來說根本不是那麼重要,但是大多數與之競爭的資料庫系統(包括谷歌最近釋出的Cloud Spanner,https://cloud.google.com/spanner/)只有兩種一致性模型:強一致性(strong consistency)和最終一致性(eventual consistency)。比如說,就強一致性而言,只要資料被寫入到資料庫,所有的不同節點(這些節點可能分佈於全球各地的資料中心)都要先就一個新的值達成一致,之後新的值才出現在應用程式中。任何時刻,任何使用者或節點都可以讀到最近一次成功更新的副本資料。由於這種方法增添了延遲,這在效能方面顯然存在著一些不足。最終一致性實際上是一種比較寬容的系統;所有節點並不同時更新,而是隻有在一段時間沒有任何最近的更新後,才就某個值達成一致。

Azure Cosmos DB

圖靈獎得主萊斯利·蘭伯特(Leslie Lamport)對我說:“Cosmos DB不同尋常的地方在於,它提供了不同的一致性模型,那樣使用者可以在獲得多強的一致性與承受多大的效能開銷之間作一個取捨。”許多這些概念都離不開蘭伯特的研究工作,他還開發了LaTeX文件準備系統(https://en.wikipedia.org/wiki/LaTeX),2001年加入了微軟研究中心。Cosmos DB為不同的使用場景提供了三種不同型別的一致性。蘭伯特解釋道:“那種中間一致性保證機制之前就存在於人們為了編寫論文而開發的學術系統。”Cosmos DB是最先商用化的提供這多種一致性模型的資料庫系統之一。

比如說,對於Cosmos DB(以及之前的DocumentDB)而言,那意味著,你可以選擇這種一致性模型:允許讀取操作比寫入操作只延後某一段時間(毫秒級),也可以選擇這種一致性模型:專注於為某種特定的客戶會話提供一致性(比如在類似Twitter的應用中),但是每個使用者在同一時間(或者以完全一樣的順序)看到每次寫入的資料又不是那麼重要。

Azure Cosmos DB

不過正如舒克拉特別指出,他在這裡的想法是,開發一種可以延續幾十年之久的資料庫系統。為此,他還請來蘭伯特教團隊TLA+(http://lamport.azurewebsites.net/tla/tla.html)。蘭伯特長期以來對於開發人員如何為應用軟體編寫規範有著特別濃厚的興趣。TLA+實際上就是一種完全適用於此的正規語言。舒克拉對我說:“我們在2010年開始著手時,想開發一種經久不衰的系統。這就是微軟眼裡的未來資料庫。我們努力確保為自己的工程團隊賦予儘量嚴謹的理念……TLA+的魅力在於,它可以將這種嚴謹的設計理念灌輸給工程師團隊,以便樹立很高的質量標準。”蘭伯特特別指出,TLA+讓你可以以一種完全正規的方式,做好系統的概要性設計――又由於它是以正規方式完成的,所以還可以檢查正確性(客觀地說,AWS及其他公司也使用TLA+為分散式系統編寫規範,詳見http://lamport.azurewebsites.net/tla/amazon.html)。蘭伯特補充道:“我倒不是想炫耀TLA+有多棒、我有多出色。TLA+之所以很棒,是因為它幾乎完全基於數學。”

Cosmos DB對於自己的技術很有自信,現在它還提供許多在資料庫領域不太常見的服務級別協議(SLA)。雖說保證一定程度的正常執行時間很常見,但是微軟還針對吞吐量、一致性和延遲提供了相應的SLA。舒克拉說:“我特別引以為豪的就是,它是用高超的技術開發出來的,我們認為這是寶貴的遺產。”

值得一提的是,Cosmos DB長期以來就在微軟內部使用,先在內部使用新技術現在是微軟的一個傳統。微軟表示,Cosmos DB之前的版本稱為DocumentDB,Cosmos DB目前服務於“成千上萬個客戶”,儲存數PB的資料。

如今Cosmos DB在34個Azure地理區域投入使用,向公眾開放,並且附有SLA方面的所有承諾。現有的DocumentDB客戶(及其資料)將一律自動成為Cosmos DB使用者。