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



在阅读了 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(,因此获取数据大约需要 8 秒(160 KB/(5 个读取容量单位 * 4 KB((,请求受到限制或DynamoDB 将允许突增容量消耗,并更快地处理扫描。

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

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

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

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

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

最新更新