Amazon DynamoDB, 面向互联网应用的高性能、可扩展的NoSQL数据库

来源:互联网 发布:瓜瓜播放器mac版 编辑:程序博客网 时间:2024/06/06 11:41

DynamoDB是一款全面托管的NoSQL数据库服务,客户可以非常简单地使用DynamoDB的服务,同时享受到高性能,海量扩展性和数据的持久性保护。

DynamoDB数据库是Amazon在2012年1月18日发布的。它融入了亚马逊在大规模非关系型数据库和云计算领域积累的多年丰富经验。其实早在2007年,亚马逊就曾经发布了一篇论文,深入讨论了AmazonDynamo所使用的设计理念和实现技术,并且讨论了如何在大规模扩展的同时提供高可靠的数据保护的问题。最初的Dynamo设计基于一系列核心原则,以实现在分布式系统中搭建高可靠、高扩展系统。现在的Amazon DynamoDB,继续基于这些设计原则来构建,但是同时融入了Amazon多年以来在非关系型数据库和云计算领域积累的宝贵经验,比如Amazon SimpleDB和AmazonS3服务的技术。客户可以非常简单的方式使用到完全托管的数据库服务。

AmazonDynamoDB 是高性能、可扩展的NoSQL数据库。今天的互联网应用的用户、流量和数据都在不断地增长。数据库如何很好地扩展,以满足互联网应用对容量和性能的需求是让很多客户头疼的问题。DynamoDB很好地解决了这一难题。使用DynamoDB,开发者可以从相对小的规模开始,在应用吸引了更多用户的时候,相应地增加DynamoDB的表的性能。DynamoDB中的表没有任何容量限制。通过分布式的技术,DynamoDB把用户对一个表的数据和流量请求分布在足够数量的服务器上,以满足并发请求的性能要求。同时,在面对任何规模的请求的时候,DynamoDB都可以提供可以预测的高性能低延时的用户体验。

我们在国内的客户,木瓜移动,就是采用了DynamoDB的数据库服务,在RTB实时竞价的在线移动营销领域获得成功。AppFlood是木瓜移动发布的移动实时竞价的广告平台。作为AppFlood的核心组件,数据库的性能很大程度上决定平台的实时竞价的能力。很多因素,如网络通讯延迟、数据库数据读取的延迟、定价算法的延迟都可能造成竞价过程超时。提供稳定的高性能、低延迟响应的DynamoDB,很大程度上帮助木瓜移动搭建成功的RTB平台。

DynamoDB给用户提供了如下价值:

  • 使用简单。DynamoDB帮助用户处理所有的数据库管理工作,从硬件资源配置,安装配置,分布式集群的搭建,和日常的系统维护。开发者可以从繁琐的数据库管理工作解放出来。作为完全托管的数据库,你不需要专家的技能来管理DynamoDB的安装-你的开发者完全可以独立完成。访问DynamoDB的时候,可以通过简单地API的方式。目前通过仅仅13个API,你就可以实现对DynamoDB数据库的表的管理,查询检索操作,单个项目Item的访问和实现批量存取项目。
  • 可扩展。Amazon DynamoDB的设计,没有任何容量上得限制。可以把单个表的数据,分布在多个可用区内的多台服务器上,来满足容量和吞吐的需求。
  • 高性能。在高并发请求的情况下,DynamoDB仍然可以保证很低的延时。因为所有数据都存储在固态磁盘上,所以可以保证持续的高性能。运行在同一个区域的EC2上的应用程序,在访问DynamoDB的数据对象的时候,通常可以在服务器端体验到个位数毫秒的响应时间。更重要的是,DynamoDB的表的性能是可以预测的。即使在数据增长的情况下,因为DynamoDB分布式的特点,仍然可以维持稳定的低延时的响应。DynamoDB在后台把你的数据在大量资源之间进行分区和在需要的时候重新分区,从而能够在大规模访问的情况下还能提供很高的IO性能。
  • 持久和高可用。AmazonDynamoDB自动地在至少3个数据中心内复制数据。每个写操作,在至少写入两个节点之后,才会返回写成功确认。在任何一个节点或者磁盘发生损坏的时候,数据都会及时的重新复制数据和重新分区。这样可以确保在各种复杂的故障出现的时候,DynamoDB仍然可以正常的提供服务,你完全不需要担心因为物理故障造成的数据丢失的情况。

除了上述的好处之外,作为一款云上的全面托管的数据库服务,DynamoDB还有很多不同的地方。比较特别是它提供预先配置的吞吐量目标。以前大家在使用数据库的时候,想要准确的获得你所预期的性能指标,包括响应时间和吞吐量,是一件非常复杂的事情。你需要配置不同的硬件资源,包括CPU,内存,存储容量和性能等等,然后期望这样特定的硬件资源能够很好地支撑你的数据库的性能需求。但实际上,你想要的数据库性能是响应时间,和每秒钟支持事务量,它们和硬件资源之间没有准确的相关性。很多时候数据库的性能容量规划都像一个科研项目,充满了不确定性。DynamoDB很好地解决了这个问题。用户在开始创建DynamoDB的表的时候,可以配置应用所需要支持的吞吐量目标。你可以分别指定表每秒钟支持多少个读取和写入的请求。完成目标设定后,DynamoDB将会为你预留必要的机器资源,从而确保只要是在给定的并发访问量下面,应用就可以享受到个位数毫秒的低延时的快速响应。更重要的是,预配置的性能容量目标不是一成不变的。如果你的数据库的访问量有了大幅度的增长,你可以随时调大DynamoDB的表的容量目标,从而支撑更多的访问请求。相应地,如果你的应用不再需要之前预配置的并发访问容量,你还可以灵活地降低预配置的容量指标,从而帮你降低成本。

 使用DynamoDB可以让开发者灵活地开发应用程序。DynamoDB是模式自由的,这样用户不会被限制在某一个特定的数据模型里。传统的SQL数据库中,表的模式在创建的时候就定义好。你不能修改或者增加新的列到一个已经创建好的表中。Amazon DynamoDB没有一个固定的模式,这样开发者可以随时给表增加新的属性。灵活的数据模型可以让开发者更加方便地进行敏捷开发和应用的快速迭代更新。

当然,和任何分布式的系统一样,使用DynamoDB也需要注意一致性的问题。DynamoDB把一致性的选择权交给开发者,让开发者自由地选择适合自己应用的一致性模型。在读取数据的时候,开发者可以选择采用强一致性的方式,还是最终一致性的方式来读取数据。如果是最终一致性的方式,意味着应用在刚提交一个写操作之后,如果马上进行读取,可能无法读取到最新的数据,但是最终你会读的一致的数据。最终一致性的模型可以在最大程度上确保服务的可用性,并且改善性能。比较典型的场景是大家在网上购物时使用的购物车,或者网站的评论信息等等。这些场景对于一致性没有很严格的要求。如果选择采用强一致性的方式读取数据,可能会牺牲一定程度的性能和服务的可用性,好处是在任何情况下都可以访问到最新的数据。软件开发也比较简单。比较典型的用例是需要强一致性的场景,比如网上购物时提交订单的场景。需要使用强一致性来确保同一商品不会同时销售给两个不同的客户。

使用DynamoDB的成本是可以预测。DynamoDB的定价模式非常简单,基于每月每GB的存储容量,和每月预配置的读取和写入的吞吐量容量单位计费。容量比较容易理解。吞吐量容量单位是个比较重要,大家也比较陌生的概念。每个读取容量单位(或者写入容量单位)支持每秒钟进行1次读取(或者写入)1个项目(item),每个读取操作最大4KB大小,每个写入操作最大1KB大小。超出大小的项目(item)需要额外的性能吞吐容量。举个例子,比如你配置了1000个读取吞吐量容量单位,和1000个写入性能的吞吐量容量单位。这种情况下你的表将可以支撑每秒钟1000个读取操作,和1000个写入操作。如果是最终一致性的方式来读取的话,你的表将可以支撑每秒2000个读取操作。

DynamoDB还提供了其他功能来进一步提高应用访问的性能, DynamoDB可以创建和维护针对主键属性的索引。应用程序把需要查询的主键提交给数据库,就能很快地获得所对应的数据集。除此之外,Amazon DynamoDB还支持创建全局和本地的二级索引。使用二级索引,可以让应用程序在查询主键以外的其他属性时,也可以获得很好的性能。客户可以对一个表创建一个或者多个二级索引,然后对索引运行查询query的操作。

 Amazon DynamoDB能让用户以简单并且经济有效地方式存储和检索任意规模的数据,同时提供高并发下地低时延的响应。对于吞吐量的保证和几毫秒的低时延响应,使DynamoDB非常适合游戏、广告、移动等等基于互联网的应用程序。

如果您想要了解更详细的信息,可以访问DynamoDB页面。




0 0