漲知識:亞馬遜的DynamoDB如何幫助數(shù)據(jù)庫重塑?
譯文在亞馬遜網(wǎng)站的早期階段,SQL數(shù)據(jù)庫沒有達到其要求,于是該公司開發(fā)出了DynamoDB;而且在這個過程中,幫助開創(chuàng)了NoSQL市場。
DynamoDB是一款在亞馬遜網(wǎng)絡(luò)服務(wù)公司的云環(huán)境下托管的NoSQL數(shù)據(jù)庫。
每一個知名的電子商務(wù)網(wǎng)站后面都離不開數(shù)據(jù)庫;而在2000年初,亞馬遜網(wǎng)站的數(shù)據(jù)庫未能跟上該公司的業(yè)務(wù)發(fā)展需要。
問題的一方面在于,亞馬遜當時并不是只有一個數(shù)據(jù)庫――它依賴一系列數(shù)據(jù)庫,每個數(shù)據(jù)庫都有各自的職責。隨著公司逐漸成為一家年收入100億美元的大公司,其SQL數(shù)據(jù)庫的數(shù)量和大小都急劇增長,管理起來變得更困難重重。到2004年節(jié)假日購物高峰期,服務(wù)停運事件變得更常見了,很大程度上歸咎于SQL數(shù)據(jù)庫不堪重負。
看來哪里需要有所變化。
但亞馬遜不是在公司外面尋求解決方案,而是自行開發(fā)了數(shù)據(jù)庫管理系統(tǒng)。那是一種全新的數(shù)據(jù)庫,這種數(shù)據(jù)庫擯棄了傳統(tǒng)SQL數(shù)據(jù)庫的規(guī)則,能夠不斷向上擴展。2007年,亞馬遜向世人公布了其研發(fā)成果:***技術(shù)官Werner Vogels及其團隊發(fā)布了一篇題為《Dynamo:亞馬遜高可用性的鍵值存儲系統(tǒng)》的文章(http://www.allthingsdistributed.com/files/amazon-dynamo-sosp2007.pdf)。一些人稱之為由此孕育了NoSQL數(shù)據(jù)庫市場。
SQL存在的問題
關(guān)系數(shù)據(jù)庫問世至今已有幾十年,最常使用SQL編程語言,它最適合用整潔的表來組織管理數(shù)據(jù),并對它們執(zhí)行查詢操作。它們的成功無可爭議:知名調(diào)研機構(gòu)加特納集團估計,SQL數(shù)據(jù)庫市場的產(chǎn)值達到300億美元。
但在2000年至2005年,亞馬遜、雅虎和谷歌等公司面臨的數(shù)據(jù)需求是SQL數(shù)據(jù)庫根本無法很好滿足的。(不妨向各位普及一點計算機科學(xué)知識,CAP定理表明,像大型數(shù)據(jù)庫這種分布式系統(tǒng)不可能同時具有一致性、可用性和容錯性。相比速度和靈活性,SQL數(shù)據(jù)庫更注重一致性,因而讓它們很適合管理財務(wù)交易之類的核心企業(yè)數(shù)據(jù),但無法同樣有效地管理其他類型的任務(wù)。)
以亞馬遜的網(wǎng)上購物車服務(wù)為例。顧客瀏覽這家電子商務(wù)網(wǎng)站后,將商品放入到虛擬購物車里面,商品保存起來,可能以后購買。亞馬遜需要購物車里面的數(shù)據(jù)對顧客來說總是可用;丟失了購物車數(shù)據(jù)無異于丟失了銷售機會。但它未必需要全球各地的每個數(shù)據(jù)庫節(jié)點都擁有每個顧客的***購物車信息。SQL/關(guān)系系統(tǒng)要耗費大量的計算資源讓數(shù)據(jù)在分布式系統(tǒng)上確保一致性,而不是確保信息總是可用、隨時可以提供給顧客。
亞馬遜的Dynamo、乃至普通NoSQL數(shù)據(jù)庫的基本原則之一就是,它們犧牲數(shù)據(jù)一致性以換取可用性。亞馬遜的優(yōu)先事項是,保持購物車數(shù)據(jù),并且非常迅速地提供給顧客。另外,系統(tǒng)必須能夠靈活擴展,以滿足亞馬遜快速增長的需要。Dynamo解決了所有這些問題:它可以跨節(jié)點備份數(shù)據(jù),能處理大量負載,同時保持快速可靠的性能。
亞馬遜DynamoDB的技術(shù)主管Khawaja Shams解釋:“它是早期的NoSQL數(shù)據(jù)庫之一。我們放棄了一致性和非常嚴格的查詢語義,以換取可預(yù)測的性能、耐久性和擴展性――那些是Dynamo超擅長的幾個方面。”
#p#
DynamoDB是一款云端數(shù)據(jù)庫
Dynamo為亞馬遜解決了SQL數(shù)據(jù)庫解決不了的許多問題。但是在2005年至2010年,它仍然不***。Dynamo聲稱擁有亞馬遜工程師需要的功能,但是需要大量資源來安裝和管理。
不過事實證明,2012年引入的DynamoDB是一個重要的升級版。亞馬遜內(nèi)部使用的主機托管版數(shù)據(jù)庫駐留在亞馬遜網(wǎng)絡(luò)服務(wù)公司的基礎(chǔ)設(shè)施即服務(wù)(IaaS)云中,受到了全面管理。亞馬遜工程師和AWS客戶并不配置數(shù)據(jù)庫,也不管理數(shù)據(jù)的存儲。他們要做的就是向DynamoDB請求所需的吞吐量??蛻裘啃r付0.0065美元,就可以享用向數(shù)據(jù)庫寫入約36000次的服務(wù)(這意味著每小時導(dǎo)入到數(shù)據(jù)庫的數(shù)據(jù)量),另外每月存儲在系統(tǒng)中的每GB數(shù)據(jù)收費0.25美元。如果應(yīng)用程序需要更多的計算容量,那么只要點擊幾下鼠標,數(shù)據(jù)庫就會將工作負載分攤到更多的節(jié)點上。
眾所周知,AWS在DynamoDB及其他許多基礎(chǔ)設(shè)施即服務(wù)產(chǎn)品在底層如何運行這方面很不透明,不過這段促銷視頻(https://www.youtube.com/watch?v=oz-7wJJ9HZ0)表明該服務(wù)采用固態(tài)硬盤,特別指出如果客戶使用DynamoDB,其數(shù)據(jù)分散在多個可用區(qū)/數(shù)據(jù)中心,確保數(shù)據(jù)可用性。
弗雷斯特研究公司的***分析師Noel Yuhanna稱之為是一種“功能相當強大”的數(shù)據(jù)庫,認為它躋身于***的NoSQL數(shù)據(jù)庫之列,對鍵值存儲使用場合而言更是如此。
DynamoDB自發(fā)布以來已取得了長足發(fā)展。雖然AWS不愿公布客戶方面的數(shù)字,但公司工程師James Hamilton在去年11月表示,相比2013年,DynamoDB每年處理的請求數(shù)量增長了3倍,存儲的數(shù)據(jù)量增長了4倍。盡管有如此龐大的規(guī)模和如此迅猛的發(fā)展,DynamoDB還是能在短短3至4毫秒內(nèi)返回查詢結(jié)果,表現(xiàn)一貫出色。
功能特性方面,DynamoDB也日趨豐富。NoSQL數(shù)據(jù)庫通常細分為幾個類別:鍵值存儲數(shù)據(jù)庫使用鍵和值來組織管理信息;文檔數(shù)據(jù)庫允許搜索整個文檔;而圖形數(shù)據(jù)庫可跟蹤數(shù)據(jù)與數(shù)據(jù)之間的關(guān)系。DynamoDB起初是一種鍵值數(shù)據(jù)庫,但去年AWS支持JSON格式文件,因而讓它搖身變成了文檔數(shù)據(jù)庫。AWS去年還為DynamoDB添加了全局二級索引(Global Secondary Indexes),這讓用戶可以擁有數(shù)據(jù)庫副本,通常一個用于生產(chǎn)環(huán)境,另一個用于查詢、分析或測試。
NoSQL的使用場合和廠商格局
NoSQL數(shù)據(jù)庫的根本優(yōu)勢在于,能夠擴展,并且擁有靈活的數(shù)據(jù)庫模式,這意味著用戶可以輕松改變數(shù)據(jù)結(jié)構(gòu),并且對數(shù)據(jù)執(zhí)行多個查詢。許多新的基于Web的應(yīng)用程序是使用NoSQL數(shù)據(jù)庫構(gòu)建的,比如社交應(yīng)用程序、移動應(yīng)用程序和以游戲為中心的應(yīng)用程序。
雖然亞馬遜幫助啟動了NoSQL市場,但它如今卻是幾十家試圖從NoSQL大發(fā)其財?shù)膹S商當中的一家。加特納集團的研究人員Nick Heudecker強調(diào),盡管NoSQL吸引了許多開發(fā)人員的注意力,但它仍是一種比較新的技術(shù)。他估計,NoSQL產(chǎn)品的收入每年甚至不超過5億美元(這不是加特納集團的官方估計數(shù)字)。Heudecker表示,絕大多數(shù)企業(yè)客戶咨詢的對象仍是SQL數(shù)據(jù)庫。
Huedecker表示,NoSQL的競爭對手:MongoDB、MarkLogic、Couchbase和Datastax在市場也各自牢牢站穩(wěn)了腳跟,有些似乎比DynamoDB更受企業(yè)客戶的追捧。
為云時代而生
到底是什么因素阻礙DynamoDB在企業(yè)市場取得求進展?舉例說,它沒有內(nèi)部部署版(on-premises version)――它只能在AWS的云端使用。Heudecker表示,一些用戶根本就不習(xí)慣使用基于云的數(shù)據(jù)庫。DynamoDB的競爭對手卻為用戶提供了這一機會:在本企業(yè)內(nèi)部在自己的防火墻后面運行數(shù)據(jù)庫。
而許多企業(yè)仍從SQL系統(tǒng)獲得很大價值。那些關(guān)系數(shù)據(jù)庫管理系統(tǒng)(RDBM)并沒有消失――它們?nèi)院苓m合作為企業(yè)的記錄系統(tǒng)。
DynamoDB可能最飽受詬病的地方在于,它只駐留在云端,但AWS的工作人員堅持認為,這恰恰也是其***的賣點之一。
DynamoDB技術(shù)主管Khawaja Shams表示,公司開發(fā)Dynamo之初,不得不擯棄了SQL數(shù)據(jù)庫的舊規(guī)則。
Shams是AWS的DynamoDB技術(shù)主管,他表示,由于這項技術(shù)托管在云端,用戶沒必要為配置或提供任何硬件而操心。他表示,用戶只管使用服務(wù),可以根據(jù)需要增加或減少服務(wù),同時只需要為存儲空間和吞吐量付費。
對關(guān)注安全的客戶來說,DynamoDB存儲數(shù)據(jù)時,客戶有機會加密數(shù)據(jù)。另外,DynamoDB與AWS這個市場領(lǐng)先的IaaS平臺(據(jù)加特納集團的魔力象限報告聲稱)集成起來,這支持眾多工具,包括Aurora和RDS等其他關(guān)系數(shù)據(jù)庫。
#p#
Adroll隨AWS DynamoDB飛揚
一些企業(yè)輕松自如地使用基于云的DynamoDB,營銷平臺提供商Adroll就是其中之一,該公司服務(wù)于150個國家的20000多個客戶。基本上來說,如果電子商務(wù)網(wǎng)站的訪客瀏覽產(chǎn)品網(wǎng)頁,但不購買商品,AdRoll會在該用戶訪問的另一個網(wǎng)站上競標廣告位,顯示他們之前考慮購買的產(chǎn)品。這種有效的方法可以吸引人們購買之前考慮的產(chǎn)品。
不過,想弄清楚向哪些用戶投放哪些廣告對AdRoll來說確實很復(fù)雜。而更為復(fù)雜的是,AdRoll需要差不多在網(wǎng)頁裝入的時間里確定要不要競標廣告位、投放哪個廣告。那是***技術(shù)官Valentino Volonghi的工作――他有大約100毫秒的時間來做決定。這點時間大半被網(wǎng)絡(luò)延遲給占用了,所以不用說,AdRoll需要一種可靠而高速的平臺。它還需要龐大規(guī)模:AdRoll每天考慮的廣告印象超過600億次。
AdRoll于是使用DynamoDB和亞馬遜的簡單存儲服務(wù)(S3)來存儲關(guān)于顧客的數(shù)據(jù),并幫助其算法確定顧客會購買哪些廣告。2013年,AdRoll在DynamoDB中有1250億項數(shù)據(jù),如今增加到了0.5萬億項數(shù)據(jù)。它每秒向系統(tǒng)提出100萬次請求,數(shù)據(jù)在5毫秒內(nèi)返回――每次都是如此。AdRoll將另外1700萬個文件上傳到了亞馬遜S3,占用的存儲空間超過1.5PB。
AdRoll沒必要構(gòu)建全球性的數(shù)據(jù)中心網(wǎng)絡(luò)來支撐其產(chǎn)品,這在很大程度上歸功于使用了DynamoDB。
Volonghi說:“我們根本不用派一名工程師來運行該系統(tǒng)。運行規(guī)模如此龐大的數(shù)據(jù)庫確實很有意思。”
不是每家公司都會有亞馬遜電子商務(wù)網(wǎng)站或AdRoll實時競標平臺的需要。但是許多公司正在不投入大量資本的前提下,設(shè)法獲得更大的規(guī)模。云讓這成為了可能,而DynamoDB就是***的例子。
原文標題:How Amazon’s DynamoDB helped reinvent databases