64

在“如何计算和限制 Amazon DynamoDB 吞吐量? ”的答案中,有人建议,只要您超过每秒预置的吞吐量,DynamoDB 就会限制请求。然而,这与我的经验相矛盾。

我有一张表,我在其中发布了多行,通常行数超过了预置的写入容量。这会在短时间内发生。在某一时刻,我什至比预置容量平均高出 5 分钟。OTOH,15 分钟的平均值低于容量。在此期间,我没有收到任何限制请求。

5 分钟平均峰值为 8.053,预置容量为 6: 平均 5 分钟

15 分钟平均峰值远低于预置容量:

在此处输入图像描述

那么 DynamoDB 什么时候限制请求呢?它考虑了什么样的平均值?在受到限制之前,突发容量可以高于预置容量多高?

4

3 回答 3

86

DynamoDB 旨在确保您的预置容量每秒可用。如果您为每秒 10 次 1kB 读取配置一个表,那么 DynamoDB 将为您提供足够的容量来处理该吞吐率。此外,DynamoDB 有时会允许您在短时间内实现超出预置吞吐量的有限突增。这是为了吸收客户工作负载的自然变化。这种突发无法保证并且并不总是可用(并且可用突发的性质可能会随着时间而改变)。正如最佳实践文档中当前描述的那样,为了获得最佳性能,您应该有一个不超过您的预置容量的均匀分布的工作负载,并将负载均匀分布在关键空间上。然而,

至于要配置多少表,很大程度上取决于您的工作量。您可以先预置 80% 的峰值,然后根据收到的限制数量(您可以在 CloudWatch 图表中看到)和应用程序对重试引起的延迟的容忍度来调整表容量。请记住,DynamoDB 不允许超出您的预置容量的无限突发。您可能能够吸收短时间的突发,但您无法在较长时间内维持高于预置容量水平的吞吐率。我们可以提供的一般指导是提供接近您的峰值的东西,然后在观察油门的同时向下拨。

此答案发布在 AWS 论坛中

免责声明:我为 Amazon DynamoDB 团队工作。

于 2013-06-19T10:27:27.543 回答
20

DynamoDB 文档中有一条提示解释了突发的工作原理:

当您没有充分利用分区的吞吐量时,DynamoDB 会保留一部分未使用的容量,以供以后突增使用吞吐量。DynamoDB 目前最多保留五分钟(300 秒)未使用的读写容量。

但它也说你不能依赖这种行为:

但是,不要将您的应用程序设计为依赖于随时可用的突发容量:DynamoDB 可以并且确实将突发容量用于后台维护和其他任务,恕不另行通知。

至少这可以解释为什么有可能高于预置容量 5 分钟的平均值。根据上面的解释,如果您在间隔的一开始就出现峰值并且在开始前的 300 秒内使用量减少,那么 15 分钟的平均值(或更长的时间跨度)甚至可能超过预置容量间隔。

于 2017-01-04T10:49:33.360 回答
0

DynamoDB 通过提供突增容量为您的每个分区的吞吐量配置提供了一些灵活性。每当您没有完全使用分区的吞吐量时,DynamoDB 都会保留一部分未使用的容量以供以后的吞吐量突增以处理使用高峰。

DynamoDB 目前最多保留 5 分钟(300 秒)未使用的读写容量。在偶尔突发的读取或写入活动期间,这些额外的容量单位可能会被快速消耗——甚至比您为表定义的每秒预置吞吐量容量还要快。

DynamoDB 还可以在不事先通知的情况下消耗突发容量用于后台维护和其他任务。

于 2020-01-16T11:32:23.920 回答