涨知识:亚马逊的DynamoDB如何帮助数据库重塑?
在亚马逊网站的早期阶段,SQL数据库没有达到其要求,于是该公司开发出了DynamoDB;而且在这个过程中,帮助开创了NoSQL市场。
DynamoDB是一款在亚马逊网络服务公司的云环境下托管的NoSQL数据库。
每一个知名的电子商务网站后面都离不开数据库;而在2000年初,亚马逊网站的数据库未能跟上该公司的业务发展需要。
问题的一方面在于,亚马逊当时并不是只有一个数据库DD它依赖一系列数据库,每个数据库都有各自的职责。随着公司逐渐成为一家年收入100亿美元的大公司,其SQL数据库的数量和大小都急剧增长,管理起来变得更困难重重。到2004年节假日购物高峰期,服务停运事件变得更常见了,很大程度上归咎于SQL数据库不堪重负。
看来哪里需要有所变化。
但亚马逊不是在公司外面寻求解决方案,而是自行开发了数据库管理系统。那是一种全新的数据库,这种数据库摈弃了传统SQL数据库的规则,能够不断向上扩展。2007年,亚马逊向世人公布了其研发成果:首席技术官Werner Vogels及其团队发布了一篇题为《Dynamo:亚马逊高可用性的键值存储系统》的文章(http://www.allthingsdistributed.com/files/amazon-dynamo-sosp2007.pdf)。一些人称之为由此孕育了NoSQL数据库市场。
SQL存在的问题
关系数据库问世至今已有几十年,最常使用SQL编程语言,它最适合用整洁的表来组织管理数据,并对它们执行查询操作。它们的成功无可争议:知名调研机构加特纳集团估计,SQL数据库市场的产值达到300亿美元。
但在2000年至2005年,亚马逊、雅虎和谷歌等公司面临的数据需求是SQL数据库根本无法很好满足的。(不妨向各位普及一点计算机科学知识,CAP定理表明,像大型数据库这种分布式系统不可能同时具有一致性、可用性和容错性。相比速度和灵活性,SQL数据库更注重一致性,因而让它们很适合管理财务交易之类的核心企业数据,但无法同样有效地管理其他类型的任务。)
以亚马逊的网上购物车服务为例。顾客浏览这家电子商务网站后,将商品放入到虚拟购物车里面,商品保存起来,可能以后购买。亚马逊需要购物车里面的数据对顾客来说总是可用;丢失了购物车数据无异于丢失了销售机会。但它未必需要全球各地的每个数据库节点都拥有每个顾客的最新购物车信息。SQL/关系系统要耗费大量的计算资源让数据在分布式系统上确保一致性,而不是确保信息总是可用、随时可以提供给顾客。
亚马逊的Dynamo、乃至普通NoSQL数据库的基本原则之一就是,它们牺牲数据一致性以换取可用性。亚马逊的优先事项是,保持购物车数据,并且非常迅速地提供给顾客。另外,系统必须能够灵活扩展,以满足亚马逊快速增长的需要。Dynamo解决了所有这些问题:它可以跨节点备份数据,能处理大量负载,同时保持快速可靠的性能。
亚马逊DynamoDB的技术主管Khawaja Shams解释:“它是早期的NoSQL数据库之一。我们放弃了一致性和非常严格的查询语义,以换取可预测的性能、耐久性和扩展性DD那些是Dynamo超擅长的几个方面。”
DynamoDB是一款云端数据库
Dynamo为亚马逊解决了SQL数据库解决不了的许多问题。但是在2005年至2010年,它仍然不完美。Dynamo声称拥有亚马逊工程师需要的功能,但是需要大量资源来安装和管理。
不过事实证明,2012年引入的DynamoDB是一个重要的升级版。亚马逊内部使用的主机托管版数据库驻留在亚马逊网络服务公司的基础设施即服务(IaaS)云中,受到了全面管理。亚马逊工程师和AWS客户并不配置数据库,也不管理数据的存储。他们要做的就是向DynamoDB请求所需的吞吐量。客户每小时付0.0065美元,就可以享用向数据库写入约36000次的服务(这意味着每小时导入到数据库的数据量),另外每月存储在系统中的每GB数据收费0.25美元。如果应用程序需要更多的计算容量,那么只要点击几下鼠标,数据库就会将工作负载分摊到更多的节点上。
众所周知,AWS在DynamoDB及其他许多基础设施即服务产品在底层如何运行这方面很不透明,不过这段促销视频(https://www.youtube.com/watch?v=oz-7wJJ9HZ0)表明该服务采用固态硬盘,特别指出如果客户使用DynamoDB,其数据分散在多个可用区/数据中心,确保数据可用性。
弗雷斯特研究公司的首席分析师Noel Yuhanna称之为是一种“功能相当强大”的数据库,认为它跻身于顶尖的NoSQL数据库之列,对键值存储使用场合而言更是如此。
DynamoDB自发布以来已取得了长足发展。虽然AWS不愿公布客户方面的数字,但公司工程师James Hamilton在去年11月表示,相比2013年,DynamoDB每年处理的请求数量增长了3倍,存储的数据量增长了4倍。尽管有如此庞大的规模和如此迅猛的发展,DynamoDB还是能在短短3至4毫秒内返回查询结果,表现一贯出色。
功能特性方面,DynamoDB也日趋丰富。NoSQL数据库通常细分为几个类别:键值存储数据库使用键和值来组织管理信息;文档数据库允许搜索整个文档;而图形数据库可跟踪数据与数据之间的关系。DynamoDB起初是一种键值数据库,但去年AWS支持JSON格式文件,因而让它摇身变成了文档数据库。AWS去年还为DynamoDB添加了全局二级索引(Global Secondary Indexes),这让用户可以拥有数据库副本,通常一个用于生产环境,另一个用于查询、分析或测试。
NoSQL的使用场合和厂商格局
NoSQL数据库的根本优势在于,能够扩展,并且拥有灵活的数据库模式,这意味着用户可以轻松改变数据结构,并且对数据执行多个查询。许多新的基于Web的应用程序是使用NoSQL数据库构建的,比如社交应用程序、移动应用程序和以游戏为中心的应用程序。
虽然亚马逊帮助启动了NoSQL市场,但它如今却是几十家试图从NoSQL大发其财的厂商当中的一家。加特纳集团的研究人员Nick Heudecker强调,尽管NoSQL吸引了许多开发人员的注意力,但它仍是一种比较新的技术。他估计,NoSQL产品的收入每年甚至不超过5亿美元(这不是加特纳集团的官方估计数字)。Heudecker表示,绝大多数企业客户咨询的对象仍是SQL数据库。
Huedecker表示,NoSQL的竞争对手:MongoDB、MarkLogic、Couchbase和Datastax在市场也各自牢牢站稳了脚跟,有些似乎比DynamoDB更受企业客户的追捧。
为云时代而生
到底是什么因素阻碍DynamoDB在企业市场取得求进展?举例说,它没有内部部署版(on-premises version)DD它只能在AWS的云端使用。Heudecker表示,一些用户根本就不习惯使用基于云的数据库。DynamoDB的竞争对手却为用户提供了这一机会:在本企业内部在自己的防火墙后面运行数据库。
而许多企业仍从SQL系统获得很大价值。那些关系数据库管理系统(RDBM)并没有消失DD它们仍很适合作为企业的记录系统。
DynamoDB可能最饱受诟病的地方在于,它只驻留在云端,但AWS的工作人员坚持认为,这恰恰也是其最大的卖点之一。
DynamoDB技术主管Khawaja Shams表示,公司开发Dynamo之初,不得不摈弃了SQL数据库的旧规则。
Shams是AWS的DynamoDB技术主管,他表示,由于这项技术托管在云端,用户没必要为配置或提供任何硬件而操心。他表示,用户只管使用服务,可以根据需要增加或减少服务,同时只需要为存储空间和吞吐量付费。
对关注安全的客户来说,DynamoDB存储数据时,客户有机会加密数据。另外,DynamoDB与AWS这个市场领先的IaaS平台(据加特纳集团的魔力象限报告声称)集成起来,这支持众多工具,包括Aurora和RDS等其他关系数据库。
Adroll随AWS DynamoDB飞扬
一些企业轻松自如地使用基于云的DynamoDB,营销平台提供商Adroll就是其中之一,该公司服务于150个国家的20000多个客户。基本上来说,如果电子商务网站的访客浏览产品网页,但不购买商品,AdRoll会在该用户访问的另一个网站上竞标广告位,显示他们之前考虑购买的产品。这种有效的方法可以吸引人们购买之前考虑的产品。
不过,想弄清楚向哪些用户投放哪些广告对AdRoll来说确实很复杂。而更为复杂的是,AdRoll需要差不多在网页装入的时间里确定要不要竞标广告位、投放哪个广告。那是首席技术官Valentino Volonghi的工作DD他有大约100毫秒的时间来做决定。这点时间大半被网络延迟给占用了,所以不用说,AdRoll需要一种可靠而高速的平台。它还需要庞大规模:AdRoll每天考虑的广告印象超过600亿次。
AdRoll于是使用DynamoDB和亚马逊的简单存储服务(S3)来存储关于顾客的数据,并帮助其算法确定顾客会购买哪些广告。2013年,AdRoll在DynamoDB中有1250亿项数据,如今增加到了0.5万亿项数据。它每秒向系统提出100万次请求,数据在5毫秒内返回DD每次都是如此。AdRoll将另外1700万个文件上传到了亚马逊S3,占用的存储空间超过1.5PB。
AdRoll没必要构建全球性的数据中心网络来支撑其产品,这在很大程度上归功于使用了DynamoDB。
Volonghi说:“我们根本不用派一名工程师来运行该系统。运行规模如此庞大的数据库确实很有意思。”