DynamoDB什么时候节流请求?

时间:2013-06-07 09:26:54

标签: amazon-web-services metrics amazon-dynamodb

在“How is Amazon DynamoDB throughput calculated and limited?”的回答中,有人建议,每当您超过每秒的预配置吞吐量时,DynamoDB就会限制请求。然而,这与我的经历相矛盾。

我在表中发布了多行,通常行数超过了预配置的写入容量。这种情况发生在短暂的爆发中。有一次,我甚至比平均配置容量高出5分钟。 OTOH,平均15分钟低于容量。在那段时间里,我没有受到任何限制请求。

5分钟平均峰值为8.053,预配容量为6: 5 minutes average

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

enter image description here

那么DynamoDB何时会限制请求?考虑到什么样的平均值?在突发之前突发的容量有多高?

3 个答案:

答案 0 :(得分:66)

DynamoDB旨在确保您的预配置容量每秒可用。如果您为每秒10个1kB读取配置一个表,那么DynamoDB将为您提供足够的容量来处理该吞吐率。此外,DynamoDB有时允许您在短时间内实现超出预配置吞吐量的有限突发。这旨在吸收客户工作量的自然变化。这种爆裂不能得到保证,并且并不总是可用(并且可用爆破的性质可能随时间而变化)。正如最佳实践文档中所述,为了获得最佳性能,您应该拥有一个均匀分布的工作负载,该工作负载不会超出您的预配置容量,并在密钥空间内均匀分配负载。但是,如果应用程序的生产行为的现实偏离均匀分布的工作负载,那么DynamoDB可能会吸收一些突发。

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

This answer was posted in AWS forums

免责声明:我在亚马逊,DynamoDB团队工作。

答案 1 :(得分:17)

有一个hint in the DynamoDB documentation解释了爆破的工作原理:

  

如果您没有充分利用分区的吞吐量,DynamoDB会保留一部分未使用的容量,以便以后突发吞吐量使用。 DynamoDB目前保留了五分钟(300秒)未使用的读写容量。

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

  

但是,请不要设计您的应用程序,以便它始终依赖于可用的突发容量:DynamoDB可以并确实使用突发容量进行后台维护和其他任务,恕不另行通知。

至少这可以解释为什么平均5分钟的平均值高于预配容量。通过上面的解释,如果你在间隔的最开始时有一个尖峰,并且在开始之前的300秒内使用较少,那么甚至可以使15分钟的平均值(或更长的时间跨度)高于预设容量。间隔。

答案 2 :(得分:0)

DynamoDB通过提供突发容量,在按分区吞吐量配置中提供了一些灵活性。每当您没有充分利用分区的吞吐量时,DynamoDB就会保留一部分未使用的容量供以后的吞吐量突增,以应对使用高峰。

DynamoDB当前最多保留5分钟(300秒)的未使用读写容量。在偶发的读写活动中,这些额外的容量单位可以很快被消耗掉,甚至比您为表定义的每秒预配置吞吐量还快。

DynamoDB还可消耗突发容量用于后台维护和其他任务,而无需事先通知。