无服务器数据库 - 用 DynamoDB 实现可扩展的数据管理
通过 Aurora Serverless v2 和 DynamoDB 按需模式构建根据流量自动扩展的数据库。解析根据工作负载特性选择无服务器数据库的标准。
无服务器数据库的概念与 DynamoDB 的定位
无服务器数据库消除了容量规划和服务器管理的需要,让开发者专注于应用开发。Amazon DynamoDB 自 2012 年发布以来一直是 AWS 无服务器数据库的核心,是能以个位数毫秒延迟处理每秒数百万请求的全托管 NoSQL 数据库。在本地运行同等的 NoSQL 数据库 (MongoDB、Cassandra 等) 时,需要集群构建、分片设计、复制管理、补丁应用等大量运维任务。DynamoDB 由 AWS 管理所有这些,开发者可专注于表设计和查询优化。选择按需容量模式后,甚至无需预先设置容量,根据流量自动扩展。
DynamoDB 的主要功能
DynamoDB 提供按需模式和预置模式两种容量模式。按需模式按请求单位计费,最适合流量难以预测的工作负载。预置模式结合 Auto Scaling 可实现高性价比运维。DynamoDB Streams 可将表变更实时触发 Lambda 函数,用几行代码实现变更数据捕获 (CDC) 模式。全局表提供最多 6 个区域的多区域复制,实现 99.999% 可用性 SLA。以下是用按需模式创建 DynamoDB 表的 CLI 命令示例。 aws dynamodb create-table \ --table-name Orders \ --attribute-definitions AttributeName=CustomerId,AttributeType=S AttributeName=OrderId,AttributeType=S \ --key-schema AttributeName=CustomerId,KeyType=HASH AttributeName=OrderId,KeyType=RANGE \ --billing-mode PAY_PER_REQUEST
Lambda 集成的无服务器架构
DynamoDB 与 Lambda 的组合是 AWS 无服务器架构的黄金模式。从 API Gateway 接收请求用 Lambda 处理、将数据持久化到 DynamoDB 的架构,无需服务器配置即可构建支持数百万用户规模的应用。DynamoDB Streams 与 Lambda 集成可实现以数据变更为触发器的异步处理。如以订单数据插入为触发器自动执行库存更新或通知发送,构建事件驱动的数据管道。使用 PartiQL 可用类 SQL 语法操作 DynamoDB,降低习惯 RDB 的开发者的学习成本。DAX (DynamoDB Accelerator) 作为内存缓存,将读取延迟缩短到微秒级。在本地构建同等缓存层需要另外运维 Redis 或 Memcached,而 DAX 是与 DynamoDB 完全集成的托管服务。 要学习无服务器数据库设计的性能优化,可参考相关书籍 (Amazon)。
成本效率与可扩展性优势
DynamoDB 按需模式读取每 100 万请求 0.285 USD,写入每 100 万请求 1.4265 USD,流量为零的时段仅产生存储费用。免费额度包含每月 25 GB 存储和 2.5 亿次读写请求,小规模应用可实质免费运行。预置模式购买预留容量可实现最高 77% 的成本削减。可扩展性方面,DynamoDB 单表支持事实上无限的吞吐量和存储,即使表大小达到数百 TB 也维持一致的性能。
总结 - 无服务器数据库的选择标准
DynamoDB 是无服务器架构中数据持久化的最优解。按需模式的从零扩展和按需计费,从初创企业到大型企业广泛适用。DynamoDB Streams 的事件驱动处理、全局表的最多 6 区域多区域部署 (99.999% 可用性 SLA)、DAX 的微秒级缓存等,全面提供数据管理所需功能。