DynamoDB 何时会限制请求?

69
在回答 "Amazon DynamoDB的吞吐量是如何计算和限制的?" 中,建议每秒超出预配吞吐量时DynamoDB会限制请求。然而,这与我的经验相矛盾。
我有一张表格,我在其中发布多行数据,通常行数远远超过预配写入容量。这种情况会在短时间内发生多次。有一次,我甚至在预配容量之上获得了5分钟的平均值。另一方面,15分钟的平均值低于容量。在那段时间里,我没有收到任何被限制的请求。
5分钟的平均峰值为8.053,预配容量为6: 5 minutes average 15分钟的平均峰值远低于预配容量:

enter image description here

那么,DynamoDB什么时候会限制请求?它考虑了哪种平均值?在超出预配容量多高的情况下才会被限制?

3个回答

91
DynamoDB旨在确保按秒计的预配容量可用。如果您为每秒十个1kB读取请求预配一个表,则DynamoDB将提供足够的容量来处理该吞吐量。此外,DynamoDB有时会允许您在短时间内实现有限的超过预配吞吐量的突发流量。这旨在吸收客户工作负载的自然变化。这种突发流量不能保证,并且并不总是可用(可用突发流量的性质可能随时间而变化)。如最佳实践文档中所述,为了获得最佳性能,您应该拥有均匀分布的工作负载,不超过预配容量,并将负载均匀分布在键空间中。但是,如果您的应用程序的生产行为与均匀分布的工作负载偏离,则DynamoDB可能会吸收一些突发流量。
关于如何调整您的表格配额,这取决于您的工作负载。您可以从将表格配额设置为峰值的80%开始,然后根据您收到的吞吐量限制(可以在CloudWatch图表中查看)和应用程序对重试引起的延迟容忍度来调整表格容量。请记住,DynamoDB不允许超出您的配额容量的无限突发。您可能能够吸收短暂的突发,但您不能在较长时间内维持高于您配置的容量水平的吞吐量速率。我们可以提供的一般指导是接近峰值进行配额,然后通过观察限制来降低。

此回答发布在AWS论坛上

免责声明:我为亚马逊公司DynamoDB团队工作。


2
你所说的80%峰值是指5分钟平均图表上的峰值吗?换句话说,假设我有一个每10秒钟批处理60个项目的情况。按每秒计算,它将是60个,按每分钟或更长时间计算,它将是6个。那么峰值有多高? - vartec
那么这个峰值有多高呢?抱歉,我不认为我能告诉你,我们所有的计算/记账都是按每秒完成的。对于爆发式流量,我们考虑了更长的时间段来分析流量模式。最后,正如帖子所示,最好的做法是进行一些试验和错误尝试,因为您了解自己的使用模式以及对重试/限流的容忍度。 - Dan Andreatta
1
在我的开发测试中,我为一个表配置了1个写入单位,并且可以每秒钟连续推送10个写入操作而不被限制,因此@vartec所说的与我的经验是一致的,无论这是否奇怪。 - Andrew U
3
当涉及到分配资源时,使用 Dynamic DynamoDB 这样的工具将根据您当前的需求自动调整资源分配。因此,您不必担心确切的资源需求。更多信息请访问项目页面http://dynamic-dynamodb.readthedocs.org/en/latest/。 - Sebastian Dahlgren
我正在对我的API进行负载测试,该API的后端使用了DynamoDB来执行事务。我总是传递相同的主键来更新表格。这意味着,我总是在更新该表格的同一行。我遇到了限流错误。你能看一下这个问题吗?https://stackoverflow.com/questions/59929823/not-able-to-solve-throttlingexception-in-dynamodb - NIKHIL C M

25

在DynamoDB文档中有一个提示,解释了突发吞吐量如何工作:

当您没有充分利用分区的吞吐量时,DynamoDB会保留未使用容量的一部分,以备将来突发的吞吐量使用。DynamoDB目前保留了最多五分钟(300秒)的未使用读取和写入容量。

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

然而,不要设计应用程序使其始终依赖于可用的突发容量:DynamoDB可以并且确实会在没有事先通知的情况下将突发容量用于后台维护和其他任务。

至少这可以解释为什么可能有5分钟的平均值超过了预配容量。通过上面的解释,即使在时间间隔开始之前的300秒内出现峰值并且使用较少,也可以将15分钟平均值(或更长时间跨度)超过预配容量。


1
还在 AWS DynamoDB 文档的 此页面 中提到。 - bluu

0

DynamoDB提供了一些灵活性,通过提供突发容量来规划每个分区的吞吐量。每当您没有完全使用分区的吞吐量时,DynamoDB会保留一部分未使用的容量,以处理使用峰值的吞吐量。

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接