gpt4 book ai didi

node.js - 超过预配吞吐量怎么办?

转载 作者:搜寻专家 更新时间:2023-11-01 00:16:32 32 4
gpt4 key购买 nike

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

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

所以我的第二个猜测是重试失败的请求,然后等待自动缩放增加预配的 RCU。正如 AWS 文档和一些 Stack Overflow 答案所指出的(特别是关于 ProvisionedThroughputExceededException):

The AWS SDKs for Amazon DynamoDB automatically retry requests that receive this exception. So, your request is eventually successful, unless the request is too large or your retry queue is too large to finish.

我读过类似的问题(this onethis onethis one),但我仍然感到困惑:如果请求太大或重试队列太大而无法完成,是否会引发此异常(因此在自动重试之后)还是实际上在重试之前?

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

最佳答案

是的。

每次您的应用程序发送超出容量的请求时,您都会从 Dynamo 收到 ProvisionedThroughputExceededException 消息。但是,您的 SDK 会为您处理并重试。默认 Dynamo 重试时间从 50 毫秒开始,默认重试次数为 10 次,退避默认为指数。

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

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

如果在第 10 次重试后您的请求仍未成功,SDK 会将 ProvisionedThroughputExceededException 传递回您的应用程序,您可以随意处理它。

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

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

这意味着您重试 13 次,初始延迟为 200 毫秒。这将使您的请求总共需要 819.2 秒才能完成,而不是 25.6 秒。

关于node.js - 超过预配吞吐量怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48022398/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com