使用 DynamoDB Auto Scaling 自动管理吞吐能力 - Amazon DynamoDB
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 DynamoDB Auto Scaling 自动管理吞吐能力

许多数据库工作负载本质上是周期性的,而另一些则难以提前进行预测。例如,考虑一个大多数用户在白天处于活跃状态的社交网络应用程序。数据库必须能够处理白天活动,但夜间不需要相同级别的吞吐量。而在另一个例子中,请考虑正在经历用户快速增长的新移动游戏应用程序。如果此游戏变得太受欢迎,它可能会超出可用的数据库资源,从而导致性能降低并使客户感到不满。这些类型的工作负载通常需要手动干预来扩展或缩减数据库资源,以便响应不断变化的使用量级别。

Amazon DynamoDB 自动扩展 Amazon 使用 Application Auto Scaling 服务代表您动态调整预配置的吞吐容量,以响应实际流量模式。这将允许表或全局二级索引增大其预置的读取和写入容量以处理突发流量,而不进行限制。当工作负载减少时,Application Auto Scaling 可以减少吞吐量,这样您就无需为未使用的预置容量付费。

注意

如果您使用创建表或全局二级索引,则默认情况下会启用 DynamoDB 自动缩放。 Amazon Web Services Management Console 您可以随时修改 Auto Scaling 设置。有关更多信息,请参阅通过 Amazon Web Services Management Console使用 DynamoDB 自动扩缩

当您删除表或全局表副本时,任何关联的可扩展目标、扩展策略或 CloudWatch 警报都不会随之自动删除。

使用 Application Auto Scaling,您可以创建为表或全局二级索引扩展策略。扩展策略指定是要扩展读取容量还是写入容量 (或二者),并为表或索引指定最小的和最大的预置容量单位设置。

扩展策略还包含目标使用率,某个时间点已使用的预置吞吐量的百分比。Application Auto Scaling 使用目标跟踪算法来向上或向下调整表(或索引)的预置吞吐量以响应实际工作负载,从而使实际容量使用率达到或接近您的目标使用率。

当两个数据点在一分钟内突破配置的目标利用率值时,可以触发自动扩展。因此,之所以可以进行自动扩展,是因为消耗的容量在连续两分钟内高于目标利用率。但是,如果峰值间隔超过一分钟,则可能不会触发自动缩放。同样,当 15 个连续的数据点低于目标利用率时,可以触发缩减事件。无论哪种情况,触发 auto Scaling 后都会UpdateTable调用一个调用。然后,可能需要几分钟才能更新表或索引的预配置容量。在此期间,任何超出表先前预配置容量的请求都将受到限制。

重要

您无法调整要泄露的数据点数量来触发基础警报(尽管当前的数字将来可能会发生变化)。

您可以为读取和写入容量设置介于 20% 和 90% 之间的 Auto Scaling 目标利用率值。

注意

除了表之外,DynamoDB Auto Scaling 还支持全局二级索引。每个全局二级索引均有各自的预置的吞吐容量,这独立于其基表的吞吐容量。在为全局二级索引创建扩展策略时,Application Auto Scaling 将调整索引的预置吞吐量设置,确保其实际使用量达到或接近所需的使用率。

DynamoDB Auto Scaling 的工作原理

注意

要快速开始使用 DynamoDB Auto Scaling,请参阅 通过 Amazon Web Services Management Console使用 DynamoDB 自动扩缩

下图简要概述了 DynamoDB Auto Scaling 管理表的吞吐能力的方式。

以下步骤汇总了上图中所示的 Auto Scaling 流程:

  1. 为 DynamoDB 表创建 Application Auto Scaling 策略。

  2. DynamoDB 会向亚马逊发布已用容量指标。 CloudWatch

  3. 如果表的消耗容量在特定时间段内超过您的目标利用率(或低于目标),Amazon CloudWatch 会触发警报。您可以在控制台上查看警报并使用 Amazon Simple Notification Service (Amazon SNS) 接收通知。

  4. CloudWatch 警报会调用 Application Auto Scaling 来评估您的扩展策略。

  5. Application Auto Scaling 发出 UpdateTable 请求以调整表的预置吞吐量。

  6. DynamoDB 处理 UpdateTable 请求,并动态增加(或减少)表的预置的吞吐容量,使它接近目标使用率。

为了解 DynamoDB Auto Scaling 的工作方式,假定您有一个名为 ProductCatalog 的表。由于很少将数据批量加载到表中,因此不会出现大量写入活动。不过,表会遇到大量的读取活动,此活动随时间的推移而变化。通过监控 Amazon 的 CloudWatch 指标ProductCatalog,您可以确定该表需要 1,200 个读取容量单位(以避免 DynamoDB 在活动达到峰值时限制读取请求)。您还确定,在读取流量达到其最低值时,ProductCatalog 至少需要 150 个读取容量单位。有关防止限制的更多信息,请参阅解决 Amazon DynamoDB 中的限制问题

在 150 到 1200 个读取容量单位的范围内,您确定 70% 的目标使用率将适合 ProductCatalog 表。目标利用率是使用的容量单位与预置容量单位的比率(以百分比表示)。应用 Application Auto Scaling 使用其目标跟踪算法来确保 ProductCatalog 会根据需要进行调整,使利用率保持在 70% 或接近 70%。

注意

仅当实际工作负载在几分钟的持续时段内保持提高或降低时,DynamoDB Auto Scaling 才会修改预置吞吐量设置。Application Auto Scaling 目标跟踪算法寻求使目标使用率长期达到或接近选定值。

表的内置容量暴增将容纳活动的短时间突增峰值。有关更多信息,请参阅有效使用容量暴增

要为 ProductCatalog 表启用 DynamoDB Auto Scaling,请创建扩展策略。此策略指定以下内容:

  • 要管理的表或全局二级索引

  • 要管理的容量类型(读取容量或写入容量)

  • 预配置吞吐量设置的上限和下限

  • 您的目标利用率

当您创建扩展策略时,Application Auto Scaling 会代表您创建一对亚马逊 CloudWatch 警报。每对警报均指明预置吞吐量设置的上限和下限。当表的实际利用率持续偏离目标利用率时,就会触发这些 CloudWatch 警报。

当其中一个 CloudWatch 警报被触发时,Amazon SNS 会向您发送通知(如果您已启用)。然后, CloudWatch 警报会调用 Application Auto Scaling,Application Auto Scaling 反过来通知 DynamoDB 酌情向ProductCatalog上或向下调整表的预配置容量。

在扩展活动期间 Amazon Config ,按记录的配置项目收费。发生扩展事件时,会为每个读取和写入自动缩放事件创建四个 CloudWatch 警 ProvisionedCapacity 报:警报: ProvisionedCapacityHigh 和 ConsumedCapacity 警报: ProvisionedCapacityLow AlarmHigh,。 AlarmLow这会导致总共八个警报。因此,为每个伸缩事件 Amazon Config 记录八个配置项目。

注意

您还可以安排 DynamoDB 扩展,使其在特定时间进行。在此了解基本步骤。

使用说明

在开始使用 DynamoDB Auto Scaling 之前,您应了解以下内容:

  • DynamoDB Auto Scaling 会根据您的 Auto Scaling 策略增加读取容量或写入容量任意次数。所有 DynamoDB 配额都将保持有效,如 Amazon DynamoDB 中的服务、账户和表限额 中所述。

  • DynamoDB 自动扩展不会阻止您手动修改预置的吞吐量设置。这些手动调整不会影响任何与 DynamoDB 自动缩放相关的现有 CloudWatch警报。

  • 如果您为包含一个或多个全局二级索引的表启用 DynamoDB Auto Scaling,强烈建议您也对这些索引统一应用 Auto Scaling。这将有助于确保更好的表写入和读取性能,并帮助避免节流。您可以在 Amazon Web Services Management Console 中选择 Apply same settings to global secondary indexes(将相同设置应用到全局二级索引)来启用自动扩缩。有关更多信息,请参阅在现有表上启用 DynamoDB 自动扩缩

  • 删除表或全局表副本时,任何关联的可扩展目标、扩展策略或 CloudWatch 警报都不会随之自动删除。

  • 为现有表创建 GSI 时,系统不会为 GSI 启用自动扩缩。在构建 GSI 时,您必须手动管理容量。GSI 上的回填完成并到达活动状态后,自动扩缩操作将正常运行。