DynamoDB什么时候节流请求?

var*_*tec 51 metrics amazon-web-services amazon-dynamodb

在" 如何计算和限制Amazon DynamoDB吞吐量? " 的答案中,有人建议,每当您超过每秒的预配置吞吐量时,DynamoDB会限制请求.然而,这与我的经历相矛盾.

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

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

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

在此输入图像描述

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

Dan*_*tta 67

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

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

此答案发布在AWS论坛中

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

  • 在配置方面,使用Dynamic DynamoDB之类的工具将根据您当前的需求自动扩展配置.因此,您不必担心确切的供应需求.阅读更多项目页面http://dynamic-dynamodb.readthedocs.org/en/latest/ (3认同)
  • 到80%的峰值,你指的是*5分钟平均*图表上的峰值?换句话说,让我说我的情况是我每10秒就有一批60件物品.每秒钟它将是60,每分钟或更长时间它是6.那么峰值有多高? (2认同)

Ben*_*erg 17

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

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

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

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

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