评估 DynamoDB 表的容量模式
本部分概述如何为 DynamoDB 表选择合适的容量模式。每种模式都经过优化,以满足不同工作负载对吞吐量变化的响应能力以及使用量计费方式的需求。在制定决策时,您必须平衡这些因素。
有哪些表容量模式可用
创建 DynamoDB 表时,您必须选择按需容量模式或预置容量模式。您可以每 24 小时在读/写容量模式之间切换一次。唯一的例外是,如果您将预置模式表切换为按需模式,则可以在相同的 24 小时时段内切换回预置模式。
按需容量模式
按需容量模式用于消除规划或预置 DynamoDB 表容量的需求。在此模式下,您的表会即时适应对表的请求数,无需扩展或缩减任何资源(最高为表之前峰值吞吐量的两倍)。
按需模式的表通过计算表的实际请求数进行计费,因此您只需按实际使用量付费,而不是按预置容量付费。
预置容量模式
预置容量模式是一种更为传统的模式,在这种模式下,您定义可供表使用的容量,此容量可以是直接可供使用的,也可以是借助自动扩缩功能实现的。由于在任何给定时间表都预置了具体容量,因此基于预置容量而不是请求数量进行计费。而且,如果请求数超出分配的容量,就会导致表拒绝请求,降低应用程序用户的体验。
预置容量模式要求在不过度预置表容量与避免预置容量不足之间取得平衡,以尽量避免节流和优化成本。
何时选择按需容量模式
在优化成本时,如果工作负载类似于下图,则按需模式是您的最佳选择。
以下因素会导致此类工作负载:
-
不可预测的请求时机(导致流量峰值)
-
请求数量变动(由批量工作负载导致)
-
某个时段内降至零或低于峰值的 18%(由开发或测试环境导致)
对于具有上述因素的工作负载,使用自动扩缩功能在表上维持足够的容量来应对流量峰值时,可能会导致过度预置表容量而超出必要的成本,或者表容量预置不足,请求受到不必要的限制。
由于按需表对读取和写入请求提供按请求支付方式计费,因此,您只需为使用的资源付费,这样就可以轻松平衡成本与性能。或者,您还可以为各个按需表和全局二级索引配置每秒最大读取和/或写入吞吐量,来协助限制成本和用量。有关更多信息,请参阅 DynamoDB 按需表的最大吞吐量。您应该定期评估按需表,以验证工作负载仍然具备上述因素。如果工作负载已经稳定,则可以考虑改为预置模式以进一步优化成本。
何时选择预置容量模式
如下图所示,预置容量模式所适用的工作负载应该是具有更可预测的使用模式的工作负载。
注意
建议在对您的预置容量采取行动之前,在精细的时段(例如 14 天或 24 小时)查看指标。
以下因素会导致此类工作负载:
-
给定时段或一天内的可预测/周期性流量
-
短期内流量爆发有限
由于给定时段或一天内的流量更加稳定,我们可以将表的预置容量设置为相对接近于表的实际使用量。预置容量表的成本优化过程归根到底是一个练习的过程,即在不增加表上 ThrottledRequests
的情况下,让预置容量(蓝线)尽可能靠近使用容量(橙线)。两条线之间的空间既是容量浪费,又是避免节流导致用户体验欠佳的保障。
DynamoDB 为预置容量表提供自动扩缩功能,此功能会代表您自动进行平衡。这样,您便可以跟踪全天使用的容量,并根据一些变量来设置表的容量。
最小容量单位
您可以设置表的最小容量来限制节流的情况,但这不会降低表的成本。如果您的表具有低使用量时段,然后突然出现高使用量,则设置最小值可以防止自动扩缩操作将表容量设置得过低。
最大容量单位
您可以设置表的最大容量,以限制将表扩大到超出预期值。对于无需大规模负载测试的开发或测试表,请考虑应用最大值。您可以为任意表设置最大值,但是在生产中使用该表时,请务必定期根据表的使用基准评估此设置,以防止意外节流。
目标利用率
对于预置容量表,设置表的目标利用率是优化其成本的主要方法。将此值设置为较低的百分比会增加过度预置的表容量,进而增加成本,但可以降低出现节流的风险。将此值设置为较高的百分比会减少过度预置的表容量,但会增加出现节流的风险。
选择表容量模式时需要考虑的其他因素
在两种模式之间做出选择时,还需要考虑另外一些因素。
预留容量
对于预置容量表,DynamoDB 允许您为读取和写入容量购买预留容量(复制写入容量单位 (rWCU, Replicated Write Capacity Unit) 和标准-IA 表目前不符合条件)。如果您选择为此容量购买预留容量,则可以大幅降低表的成本。
在两种表模式之间做出选择时,请考虑这种额外折扣对表的成本有多大的影响。对于许多情况,在过度预置的预置容量表上,即使是相对不可预测的工作负载,采用预留容量也可以实现更低的成本。
提高工作负载的可预测性
在某些情况下,工作负载可能会同时具有可预测和不可预测的模式。虽然按需表可以轻松支持这种模式,但如果能够改善工作负载中不可预测的模式,则可能会获得更好的成本。
造成这些模式的最常见原因之一是批量导入。这种类型的流量通常会超过表的基准容量,以至于在运行此操作时表会出现节流。要在预置容量表上确保此类工作负载的运行,请考虑以下选项:
-
如果批处理按照预定时间进行,则可以在运行之前,计划增加自动扩缩容量。
-
如果批处理随机进行,请考虑尝试延长运行时间,而不是尽快执行
-
为导入操作添加一个加速期,在此期间,开始时导入的速度较小,但会在几分钟内缓慢增加,直到自动扩缩功能有机会开始调整表容量。