提问者:小点点

DynamoDB什么时候需要油门?


在回答“亚马逊DynamoDB吞吐量是如何计算和限制的?”有人建议,只要超出每秒预配的吞吐量,DynamoDB就会限制请求。然而,这与我的经验相矛盾。

我在一个表中发布了多行,通常行数远远超过了配置的写容量。这种情况会在短时间内发生。在某一点上,我甚至有5分钟的平均时间超过了规定的容量。OTOH,平均15分钟低于容量。在那段时间里,我没有收到任何限制性的请求。

15分钟的平均峰值远低于规定的容量:

那么DynamoDB什么时候会限制请求?它考虑了什么样的平均值?在限制突发之前,它可以达到多高的超出配置的容量?


共3个答案

匿名用户

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

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

这个答案发布在AWS论坛上

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

匿名用户

DynamoDB文档中有一个提示,解释了Burst是如何工作的:

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

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

但是,不要设计应用程序,使其依赖于随时可用的突发容量:DynamoDB可以并且确实使用突发容量进行后台维护和其他任务,而无需事先通知。

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

匿名用户

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

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

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