通过为 Amazon DynamoDB 安排预置容量来优化成本

作者: Jiten Dedhia | 202 3

Amazon DynamoDB 是一个完全托管的无服务器键值 NoSQL 数据库,旨在运行任何规模的高性能应用程序。DynamoDB 会收取读取、写入和存储您的 DynamoDB 表以及您选择启用的任何可选功能的费用。创建 DynamoDB 表时,您可以从两种容量模式中进行选择,这两种模式具有不同的读取和写入计费选项:按需和预配置。

要管理 DynamoDB 预置容量表的成本,您可以调整预置的读取/写入容量。您可以通过自动扩展或根据考虑流量高峰和非高峰时段的时间表来实现此目的。

Amazon DynamoDB 具有自动扩展功能,可使用 亚马逊云科技 应用程序自动 扩展服务动态调整预配置吞吐容量以响应实际流量模式。Auto Scaling 使表或全局二级索引能够增加其预配置的读写容量,以应对突然增加的流量。当工作负载减少时,Auto Scaling 会降低吞吐量,因此您无需为未使用的预置容量付费。

在这篇文章中,我将向您展示如何通过结合自动扩展和按设定的时间表更改预置容量表的最小吞吐量来优化预置容量表的成本,从而允许在所需时间毫无延迟地增加写入容量。

问题陈述

有些工作负载会定期发生可预测的变化。例如,金融行业的交易平台。在金融行业,交易从周一上午开始,在周五晚上结束。周一市场开盘时,活动突然激增,没有时间加剧。另一个例子是与重大营销促销同时进行的零售销售。当销售开始时,在线商店的订单可能会激增。

按需容量非常适合不可预测的工作负载,但在上述用例中,它可能会限制容量,并且只能通过每 30 分钟将容量增加一倍来扩展,如 为什么我的按需 DynamoDB 表受到限制?

如果您正在使用预置容量,并且有可预测的周期性高需求,必须立即进行调整,例如金融行业的示例,则需要在 DynamoDB 表上设置较高的最低读/写预配置容量。这意味着在流量较低的时期,例如周末,您可能需要为大量未使用的容量付费。您可以使用 Application Auto Scaling 来计划扩展策略,调整您的预配置吞吐量,以支持可预测的流量变化。您可以手动调整容量,但首选自动解决方案。

解决方案概述

使用应用程序自动扩展时,可以使用 cron 表达式来调度策略。您可以创建多个计划来根据需要更改表的容量。

下载 并运行完整的 亚马逊云科技 CloudFormation 模板来设置示例解决方案。等待您的非高峰期或高峰时段计划开始,然后您就可以在表格的 Amazon CloudWatch 指标中看到结果。CloudFormation 模板需要一个角色 ARN 作为输入来执行扩展。有关此角色所需的权限,请参阅 开发者指南

以下资源由模板在 CloudFormation 中创建,如以下代码段所示:

  • 具有初始读/写预置容量的 DynamoDB 表。
  • 一款 AWS:: ApplicationAutoScaling:: ScalableTarget 使用 ScheduleAction 在世界标准时间周一上午 8:00 开始峰值扩展, 将最低写入容量更改为 90 个写入容量单位 (WCU)。它会在星期五下午 6:00 UTC 将最低写入容量更改为 30 个 WCU(您可以根据自己的用例更改时间表)。
ScalingTarget:
    Type: AWS::ApplicationAutoScaling::ScalableTarget
    Properties:
      MinCapacity: 30
      MaxCapacity: 90
      ResourceId: !Sub "table/${ CyclicalTable }"
      RoleARN: !Ref DynamoDBAutoscalingRoleArn
      ScalableDimension: dynamodb:table:WriteCapacityUnits
      ServiceNamespace: dynamodb
      ScheduledActions:
        - ScheduledActionName: startWeekday
          #Monday 8AM: UTC
          Schedule: "cron(0 8 ? * 2 *)"
          ScalableTargetAction:
            MinCapacity: 90
        - ScheduledActionName: startWeekEnd
          #Friday 6pm: UTC
          Schedule: "cron(0 18 ? * 6 *)"
          ScalableTargetAction:
            MinCapacity: 30

作为预置写入容量预设更改的影响的示例,下面的图 1 显示了预置写入容量每小时更改的结果。预置写入容量的更改会立即反映在表的写入使用量中。

Figure 1: Provisioned write capacity changing hourly

图 1:预置的写入容量每小时都在变化

正在清理

为避免将来产生费用,请删除模板创建的资源。您可以通过使用 亚马逊云科技 管理控制台 或 亚马逊云科技 命令行接口 (亚马逊云科技 CLI ) 删除 CloudFormation 堆栈来删除所有资源。 有关更多信息,请参阅在 亚马逊云科技 CloudFormation 控制台上 删除堆栈

储蓄

金融行业客户通过使用调度来调整其预配置容量以反映预期流量,从而将成本降低了25%。

结论

在这篇文章中,我向您展示了如何使用基于cron的应用程序自动扩展计划来扩展Amazon DynamoDB的预配置容量。您可以使用此方法来优化具有已知和可预测流量模式的工作负载的成本。

有关 DynamoDB 表容量模式的更多信息,请参阅 读取/写入 容量模式。 有关 DynamoDB 应用程序自动扩展的更多信息,请参阅 亚马逊云科技 DynamoDB 和 应用程序自动扩展。


作者简介

Jiten Dedhia 是一位高级解决方案架构师,在软件行业拥有 20 多年的经验。他曾与全球金融服务客户合作,为他们提供使用 亚马逊云科技 提供的服务进行现代化的建议。


*前述特定亚马逊云科技生成式人工智能相关的服务仅在亚马逊云科技海外区域可用,亚马逊云科技中国仅为帮助您发展海外业务和/或了解行业前沿技术选择推荐该服务。