风君子博客2月10日消息,十年前,亚马逊云科技正式推出Amazon DynamoDB,一种快速、灵活的 NoSQL 数据库服务,可在任意规模环境中提供一致的个位数毫秒响应时间。
亚马逊首席技术官Werner Vogels曾表示:“我们非常高兴推出Amazon DynamoDB,一种快速、可靠且具有成本效益的 NoSQL 数据库服务,专为互联网规模的应用程序而设计。” Amazon DynamoDB代表了亚马逊在大型非关系型数据库和云服务技术领域15年持续投入的成果。
亚马逊云科技数据库、数据分析、机器学习副总裁Swami Sivasubramanian是Amazon DynamoDB开发的主要贡献者。
Amazon DynamoDB发布十年之际,Swami分享了Amazon DynamoDB的起源、前身以及未来。
以下为Swami分享内容:
关于Dynamo的起源
Swami:我们在2007年发表了Dynamo论文,探讨这个话题之前,我们需要先追溯到2004、2005 年。那时我正在攻读博士学位,(并随后于2006年从阿姆斯特丹自由大学获得计算机科学博士学位),也在考虑我将在哪里工作。看到亚马逊正在快速成长,并不断突破常规,打破界限,我选择了以亚马逊研究工程师实习生的身份加入亚马逊。
那时亚马逊云科技还不存在,加入亚马逊后,我很快意识到作为一家电子商务公司,亚马逊实际上也是一家科技公司。为了支持自身电子商务业务相关的各类运营场景和工作负载,亚马逊涌现出了大量创新技术、专利和发明,这种情形在全球任何一家公司都难得一见。
在亚马逊担任工程师时,我和团队曾在假期流量高峰期间经历过一次严重的扩展失败。这是由数据库事务死锁而导致的,其背后正是亚马逊当时使用的商业关系型数据库。故障发生后,我们一群工程师们一起编写了一份错误更正文档,对发生了什么、学到了什么、如何解决问题以及如何避免问题再次发生等进行了详细说明。
我当时问了一个问题:“为什么我们要为这些工作负载使用关系型数据库?本质上,它们并不需要 SQL 级别的复杂性和事务保证。”
这导致我们开始重新思考如何设计底层数据存储。当时,还没有可伸缩的非关系型数据库,这是我们开始着手搭建Amazon Dynamo原型并撰写论文的原因。事实上,Amazon Dynamo 并不是工程师们当时唯一思考和研究的架构。我们意识到我们还需要一个可扩展的存储系统,Amazon S3 就诞生于此。同时,还需要一个更易于管理的关系型数据库,能够自动进行复制、故障切换和备份/恢复,这也是 Amazon RDS 的由来。
最初撰写Dynamo论文时,我们就定了一条规则,即“在开发原始设计时不对外发布”,而是先将Dynamo运行于支持多个Amazon.com服务的实际生产环境中。这样,Dynamo论文就会是一种端到端的可用方案,并有实际应用经验。Werner和我对此感受非常强烈,因为我们不希望仅仅撰写一篇学术论文而已。10年后,我们非常荣幸的是Dynamo论文还获得了ACM的时间考验奖,这是由ACM主办的The SIGOPS Hall of Fame Award,从2016年开始评选过去十年科技圈最具影响力的论文名人堂。
构建Amazon DynamoDB的初衷及其过去十年的演进
Swami:Amazon DynamoDB背后的想法来自于与SmugMug、Flickr等客户首席执行官的对话和讨论。他们是最早带有互联网属性的公司,而在当时类似这样的互联网公司正在快速走向市场。他们的典型特征包括在线用户数量呈爆炸式增长、数据模式不固定,追求快速交付和轻运维等。传统关系型数据库将所有数据存储在一个盒子中,无法高效地扩展,这迫使用户需要对其数据库重新分片,然后还需要管理所有的分区和重新分区等,这让用户面临巨大的运维挑战和压力。
这对我们来说并不新鲜,构建原始Amazon Dynamo的初衷正是应对这些挑战。当时,Amazon Dynamo还不是一项服务,而是一个由亚马逊工程师构建的软件系统。在一次客户咨询会议上,时任Flickr 首席执行官Don MacAskill表示:“你们已经启用了 Amazon Dynamo,验证了可扩展非关系型数据库系统的可行性,为什么不能把它作为外部服务提供给我们使用?”
当时,所有亚马逊云科技的相关管理人员都在场,实际上,这也是我们问自己的一个问题。Flickr并不是唯一需要它的客户,越来越多的客户想要可扩展的数据库,无需处理分区和重新分区等复杂的运维工作,同时他们还需要极高的可用性。于是,我们开始认真思考构建一个不受SQL API限制的、可扩展的云数据库。
Amazon DynamoDB与原始Amazon Dynamo不尽相同,它实际上是通过几个原始Amazon Dynamo组件搭建的一项易于使用的云服务。客户不再需要配置集群,只需创建一个表存储数据,即可轻松实现无缝缩放。管理员不必执行任何操作,甚至无需安装单个库来操作数据库。
Amazon Dynamo到Amazon DynamoDB的演变非常重要,亚马逊真正以前所未有的方式拥抱云,获得它的弹性和可扩展性。
我们在2012年1月18日正式发布Amazon DynamoDB,该服务一经推出就大受欢迎,Flickr等公司率先使用该服务。Amazon DynamoDB强大的弹性、个位数毫秒的延迟性能等深受客户青睐。我们进行了大量创新,从协议层一直到SSD存储的底层存储层等各项功能。
这里不得不提的一个有趣的用例,也是最早将DynamoDB投入生产的客户之一,他们做的是超级碗(Super Bowl:全国橄榄球联盟决赛——全美直播的体育界春晚)广告投放。 因为Amazon DynamoDB具备强大的弹性,可以无缝地扩展到每秒100,000次写入,并在超级碗活动结束后缩减,这样客户就不会担心产生额外的成本。当年,这在技术领域是个大事。现在大家习以为常的横向扩展与弹性,对当时的数据库而言,那是无法想象的。
那是一个大胆的设想。Amazon DynamoDB专为云而构建的架构让所有横向扩展用例成为可能。现在,Amazon DynamoDB正为多个高流量Amazon站点和系统提供支持,包括 Alexa、亚马逊全球电商网站和所有亚马逊运营中心。2021年,在亚马逊长达66小时的Prime会员日大促期间,上述站点和系统进行了数万亿次API调用,Amazon DynamoDB以低至个位数毫秒延迟的高性能表现,无感支持峰值达每秒8,920万个请求,同时确保系统的高可用性。
Amazon DynamoDB自2012年问世以来,我们为其增加了大量创新功能,不仅涉及底层可用性、持久性、安全性和规模等特性,还包括易用性等。
Amazon DynamoDB不止步于键值存储,还支持基于哈希的分区和基于范围的分区,并且增加了对二级索引的支持,支持更复杂的查询功能,同时不影响规模或可用性。
现在,Amazon Kinesis Data Streams也适用于Amazon DynamoDB,捕获可扩展的流式数据。我认为任何数据库都不应该是孤岛,更不能是死胡同。它应该支持生成变化的数据流,然后将这些数据流连接到分析应用程序或其他数据存储。
同时,我们也针对备份和恢复等功能全面创新。对于像Amazon DynamoDB 这样具有数百万个分区的大型数据库系统而言,备份和恢复并非易事,我们致力于通过创新让客户获得更好的体验。
我们还为Amazon DynamoDB添加了创建全局表的功能,以便客户可在轻松实现数据库负载全球覆盖的同时,获得近乎本地运行的读写性能。此外,Amazon DynamoDB还扩展了事务处理能力。所有这些创新都致力于不断提升Amazon DynamoDB的可用性和可扩展性。
我们同时致力于为客户提供更高的成本效益。客户通常需要长期存储数据,虽然这些旧数据可能很少被访问,但它必须保持高度可用,以便不时之需。例如,社交媒体用户很少访问旧的内容和图片,但一旦有这类访问请求,需要确保可以立即为用户提供这些内容。这种不经常访问的数据可能会给客户带来高昂的存储费用,而且这类数据的数量还在不断增长。过去,为了优化成本,客户会通过编写代码的方式,将旧的、访问频率较低的数据从Amazon DynamoDB 移动到存储成本较低的如Amazon S3中。
在2021 re:Invent全球大会上,我们推出了Amazon DynamoDB Standard-Infrequent Access表类,一种新的经济高效的表类,用于存储不经常访问的数据,同时保持Amazon DynamoDB的高可用性和性能。
不忘初心,我们始终将DynamoDB的最初愿景作为指引,持续创新,为客户提供更易于查询的用例,支持进行复杂全局事务复制等,不断扩展能力范围,同时持续优化管理成本。
展望Amazon DynamoDB的未来十年
Swami:十年前,当我们推出Amazon DynamoDB 时,客户才刚刚开始对云本身有了更好的理解,它的好处是什么,可以做什么。
如今,就客户构建IT应用程序而言,云已经成为的新常态,规模也是新常态,每个应用程序都需要基于不确定性构建。我们将继续代表客户进行创新,Amazon DynamoDB本身也在这个持续变革的旅程中。我们将继续朝着端到端的现代化数据战略迈进。正如之前提到的,数据库不应该是孤岛。
客户将不再只想在数据库中存储和查询数据,他们需要分析这些数据来创造价值,无论是通过创建更好的个性化推荐引擎,还是使用机器学习运行预测分析的预测系统。将数据流点对点无缝连接,并继续让Amazon DynamoDB更安全、高可用,性能更强且易于使用,这些都将是我们永无止境的追求。