我有一个表在指定的时间限制写请求。我想更多地了解AWS-SDK如何处理它们。
根据我目前的理解,DynamoDB会向我的Lambda返回一个错误。这就是我在DynamoDB表指标中会出现用户错误的原因。但是,AWS-SDK具有错误处理和重试策略,这有助于我重试并将受限制的请求写回表中。这是对的吗?
每次您的应用程序发送超过您容量的请求时,您都会收到Dynamo的ProvisionedThroughputExceededException
消息。但是,您的SDK会为您处理此问题并重试。默认的Dynamo重试时间从50ms开始,默认的重试次数为10,默认情况下,退避是指数式的。
这意味着您将在以下位置重试:
如果在第10次重试后您的请求仍然没有成功,SDK会将ProvisionedThroughputExceededException
传递回您的应用程序,您可以按照自己喜欢的方式处理它。
请注意,您可以更改SDK的默认重试行为。例如
new AWS.DynamoDB({maxRetries: 13, retryDelayOptions: {base: 200}});
这意味着你重试13次,初始延迟为200ms。这将使您的请求总共需要819.2秒而不是25.6秒。
如果许多写入请求进入您的dynamoDB表并且配置的写入容量较小,则写入请求它们DynamoDB会限制您的请求。
如果您实现重试策略并将其用于写入失败,则此写入也可能会受到限制,因为您已经收到大量写入请求。此重试策略将为您的dynamoDB增加额外负载。
解决方案是使用DynamoDB On-demand mode。