当前位置: 首页 > 面试题库 >

当超出预配置的吞吐量时,该怎么办?

魏高邈
2023-03-14
问题内容

我正在使用适用于Java的AWS开发工具包(Node.js)从DynamoDB表读取数据。自动缩放功能在大部分时间里都表现出色,并且一天中大部分时间消耗的读取容量单位(RCU)确实很低。但是,有一个编程的作业在午夜左右执行,消耗的内存约为预配置RCU的10倍,并且由于自动缩放需要花费一些时间来调整容量,因此有许多限制的读取请求。此外,我怀疑我的请求没有完成(尽管我在错误日志中找不到任何异常)。

为了处理这种情况,我曾考虑过使用AWS
API(updateTable)增加预配置的RCU,但计算应用程序所需的RCU数量可能并不简单。

因此,我的第二个猜测是重试失败的请求,然后只是等待自动扩展增加已配置的RCU。正如AWS文档和一些堆栈溢出答案所指出的(尤其是关于
ProvisionedThroughputExceededException ):

适用于Amazon DynamoDB的AWS开发工具包会自动重试收到此异常的请求。因此,您的请求最终将成功,除非请求太大或重试队列太大而无法完成。

但是我还是很困惑:如果请求太大或重试队列太大而无法完成(因此在自动重试之后),会引发此异常吗?实际在重试之前?

最重要的是: 这是我在上下文中应该期待的例外吗?(所以我可以捕获它并重试,直到自动缩放增加RCU为止?)


问题答案:

是。

每次您的应用程序发送的请求超出您的能力时,您都会从Dynamo中获得ProvisionedThroughputExceededException消息。但是,您的SDK会为您处理此问题,然后重试。Dynamo的默认重试时间开始于50ms,默认重试次数为10,默认情况下,补偿是指数级的。

这意味着您可以在以下位置重试:

  • 50毫秒
  • 100毫秒
  • 200毫秒
  • 400毫秒
  • 800毫秒
  • 1.6秒
  • 3.2秒
  • 6.4秒
  • 12.8秒
  • 25.6秒

如果在第10次重试后您的请求仍然没有成功,则SDK会将ProvisionedThroughputExceededException传递回您的应用程序,您可以按照自己的意愿进行处理。

您可以通过增加吞吐量来处理它,但是另一种选择是在创建Dynamo连接时更改默认重试时间。例如

new AWS.DynamoDB({maxRetries: 13, retryDelayOptions: {base: 200}});

这意味着您重试13次,初始延迟为200ms。这将使您的请求总共完成819.2s,而不是25.6s。



 类似资料:
  • 我为帖子的篇幅感到抱歉,但有很多事情可能会导致我的情况,我已经尝试将我根据其他帖子所做的所有设置更改包括在内。简言之,我的WCF服务似乎一次只能处理3到4个并发客户端请求。如果我将应用程序池最大工作进程数设置得更高(大约10个),或者将服务行为ConcurrencyMode设置为多个,那么吞吐量就会大大提高(快几倍)。然而,这些似乎是真正问题的解决办法,带来了他们自己的问题。是我错了,还是IIS应

  • 来自AWS Lambda常见问题解答: Q: 我一次可以执行的AWS Lambda函数的数量是否有限制? 不需要。AWS Lambda旨在并行运行多个函数实例。然而,AWS Lambda的默认安全限制为每个区域每个帐户100次并发执行。如果您希望提交请求以增加100次并发执行的限制,您可以访问我们的支持中心,单击“打开新案例”,然后提交服务限制增加请求。 Q: 如果我的帐户超过并发执行的默认限制,

  • 在大数据存储中,IOPS和吞吐量之间的关键区别是什么

  • 我对193个示例运行了一个JMeter测试,平均响应时间为5915ms,Throghput为1.19832。 我只想知道它们到底有什么关系

  • 吞吐量值ex。400RU/s适用于每个分区,而不是集合?

  • 我正在对ElasticSearch进行基准测试,以实现非常高的索引吞吐量。 我目前的目标是能够在几个小时内索引30亿(3,000,000,000)文档。为此,我目前有3台windows服务器机器,每台16GB内存和8个处理器。插入的文档有一个非常简单的映射,只包含少数数字非分析字段(被禁用)。 使用这个相对适中的钻机,我能够达到每秒大约120,000个索引请求(使用大桌子监控),我相信吞吐量可以进