DynamoDB 按需缩放和节流

DynamoDB on-demand scaling and throttling

我目前正在研究 DynamoDB 的按需设置。我们偶尔会在高流量峰值期间看到一些节流,它跨越所有索引,因此不特定于分区。所有与按需容量模式相关的 DynamoDB 文档似乎都表明,一旦设置了新的峰值使用量,它基本上就是无限期的峰值。我的假设是否正确,还是 reset/scale 在一段时间后下降?是否记录了按需容量模式的 dynamo 缩放的内部结构?

我想通过配置任意高的容量并切换回按需容量模式来预热我的低容量表,只是想最终发现这种策略会随着时间的推移而持续吗?

docs 证实了您对 DynamoDB 如何在按需容量模式下横向扩展的理解(重点是我的):

Peak Traffic and Scaling Properties

[...] On-demand capacity mode instantly accommodates up to double the previous peak traffic on a table. For example, if your application’s traffic pattern varies between 25,000 and 50,000 strongly consistent reads per second where 50,000 reads per second is the previous traffic peak, on-demand capacity mode instantly accommodates sustained traffic of up to 100,000 reads per second. If your application sustains traffic of 100,000 reads per second, that peak becomes your new previous peak, enabling subsequent traffic to reach up to 200,000 reads per second.

If you need more than double your previous peak on table, DynamoDB automatically allocates more capacity as your traffic volume increases to help ensure that your workload does not experience throttling. However, throttling can occur if you exceed double your previous peak within 30 minutes. For example, if your application’s traffic pattern varies between 25,000 and 50,000 strongly consistent reads per second where 50,000 reads per second is the previously reached traffic peak, DynamoDB recommends spacing your traffic growth over at least 30 minutes before driving more than 100,000 reads per second.

关于为新 table 设置初始峰值的策略,方法是首先将它们部署在预置容量模式和大 RCU/WCU 值,然后将其切换到按需模式 - 即也有效。它通过将前一个峰值的起始值设置为 RCUs/WCUs 的一半来自动允许相同的吞吐量,并且由于始终支持该数字的两倍,因此您可以保留容量。

文档没有明确说明它会无限期地保持这种状态,但他们也没有谈论缩小规模。在实践中,我也没有看到这种情况发生。根据我的 经验 AWS 不会在文档中遗漏这样的内容。

它也不太可能基于 DynamoDB 的架构,AWS 在这个非常酷的 tech talk at re:invent 2018 中对此进行了解释。 DynamoDB 的分区规模和 table 的分区数量只能增加 。每个存储分区能够:

  • 服务多达 3000 个 RCU
  • 服务多达 1000 个 WCU
  • 存储 10GB 的数据

一旦达到这些限制中的任何一个,就会发生分区拆分 - 创建两个新分区并在它们之间分配数据。这种情况会根据需要多次发生,直到可以容纳新配置的参数(RCU、WCU、存储)。

虽然没有明确说明,但由于您几乎可以立即从按需容量更改为预配容量,反之亦然,因此可以公平地假设底层架构与不同的计费模型相同或至少非常相似在上面。

由于分区数永远只能增加,峰值容量不太可能下降。

话虽这么说:它不是已发布 API 的一部分,并被视为实施细节,因此无法保证或承诺它将始终保持这种状态。