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