AWS DynamoDB 预置容量定价模型如何运作?

Whi*_*ach 1 amazon-web-services amazon-dynamodb dynamodb-queries

在阅读了 AWS 文档并回答了其他类似问题后,DynamoDB 预配置容量模型的定价对我来说仍然有些不清楚。

正如 AWS 文档中所述: “即使您没有充分利用所配置的容量,您也需要为在 Amazon DynamoDB 表中配置的吞吐量(读取和写入)付费。您的 DynamoDB 表的实际读取和写入性能可能会有所不同。有所不同,并且可能小于您提供的吞吐量。”

根据这个答案的最后一部分,类似的问题之一:“最后,使用 Dynamo,您为您保留的容量付费,而不是为您消耗的容量付费。因此,只要您的表没有受到限制,即使您稍微走动超过预配置容量(Dynamo 在某些情况下允许),您将不会被收取额外费用。”

然而,我没有找到一个简单的解释,说明如何根据可能超过为表设置的当前读/写容量单位值的数据读/写速率定价,或者如果根据请求限制表读/写操作会发生什么。如果我创建一个表,并将读取容量单位和写入容量单位都设置为 5,并禁用自动伸缩功能,那么所有情况下 DynamoDB 服务的费用是否都按以下公式计算?

charges = (provisioned RCU * Hours used + provisioned WCU * Hours used) + Storage costs

这意味着,无论 RCU/s 和 WCU/s 的使用情况和限制如何。

举个例子:根据我的理解,Scan请求将返回上述表中的所有项目,其中包含 80 个项目,这将超过预配置的吞吐量(每个项目的大小小于 4 KB,表中所有项目的总大小约为 160) KB),因此在请求受到限制的情况下获取数据(160 KB /(5 个读取容量单位 * 4 KB))将需要大约 8 秒的时间,或者 DynamoDB 将允许突发容量消耗并更快地处理扫描。

但在这两种情况下,该请求都将因预配置读取容量过度使用而额外收费,因为预配置容量基本上是限制读/写操作速率的一种方法。这个假设正确吗?或者表限制是否需要额外付费?那么有什么方法可以强制限制数据读写速率呢?

Nad*_*'El 7

您可以在AWS re:invent 2018 演讲中找到关于如何实施 DynamoDB 预置定价的非常好的演示(以及许多其他有趣的内容)。

简而言之,如果您使用预配置定价(并禁用自动缩放),您将准确支付预配置的费用(加上磁盘和网络等其他费用) - 不多也不少。亚马逊会限制你,这样你就无法获得(平均)超过你所支付的请求率。亚马逊还将努力(在上面的演讲中描述)确保您得到的东西不会少于您所支付的费用(演讲解释了为什么这不容易实现,并且在过去,用户确实抱怨过这一点)。即使您确实设法每秒收到的请求数超出了您的配置,也不会向您收取额外费用。亚马逊只会记住它为您提供了更多服务,并且您可能会在接下来的几秒钟内收到更少的请求。

亚马逊有多种方式可以限制您:它可以延迟请求,可以使请求失败ProvisionedThroughputExceededException,可以从 a 返回较少的项目Scan,或者可以从批处理操作(例如 )返回部分BatchGetItem成功。在所有这些情况下,您的客户端库将帮助您并稍后以指数退避自动完成请求。

您提到自动缩放是您没有使用的选项。但您可能仍然有兴趣了解它的作用。由于预置容量可以随时更改,因此自动扩展可帮助您选择适合当前需求的预置容量,方法是在接近限制时增加预置容量,或在远离限制时降低预置容量。 这篇博文有趣地探讨了如何将自动扩展与预留容量(您承诺全年提供一些预配置容量)和按需容量(您根本不需要预配置)结合起来,以获得他们声称的更好的价格。