如何排查 Amazon DynamoDB 表中的高延迟问题?

1 分钟阅读
0

我发现 Amazon DynamoDB 请求的响应时间有所增加。

解决方法

若要排查 DynamoDB 表的高延迟问题,请分析 Amazon CloudWatch 指标 SuccessfulRequestLatency,并检查平均延迟。不必担心偶尔出现的延迟激增。但是,如果平均延迟较高,则可能存在必须解决的底层问题。

要获取所有 DynamoDB 调用的延迟值,请开启 AWS 开发工具包的延迟指标日志记录。这些指标可帮助您确定延迟增加的根源。请记住,DynamoDB 延迟指标只能衡量 DynamoDB 或 Amazon DynamoDB Streams 内的活动。该延迟指标没有考虑网络延迟或客户端活动。

**注意:**对于大多数原子操作,例如 GetItemPutItem,平均延迟预计为个位毫秒数。非原子操作(例如 QueryScan)的延迟取决于很多因素,其中包括结果集的大小及查询条件和筛选条件的复杂性。

考虑通过以下一个或多个策略来减少延迟:

  • **减少请求超时设置:**将客户端开发工具包参数 requestTimeOutclientExecutionTimeout 调优为超时,将更快出现失败(例如,50 毫秒之后)。这会导致客户端在指定的时间段后放弃高延迟请求,然后发送另一个请求,该请求通常比第一个请求更快完成。有关超时设置的更多信息,请参阅为延迟感知 Amazon DynamoDB 应用程序优化 AWS Java SDK HTTP 请求设置
  • **减少客户端与 DynamoDB 端点之间的距离:**如果您的用户分散在全局,请考虑使用全局表。使用全局表,您可以指定希望表可用的 AWS 区域。这样可以显著减少用户的延迟。另外,请考虑使用 DynamoDB 网关端点来避免互联网的流量。
  • **使用缓存:**如果您的流量读取量很大,请考虑使用缓存服务,例如 Amazon DynamoDB Accelerator (DAX)。DAX 是适用于 DynamoDB 的完全托管且高度可用的内存中的缓存,可实现高达 10 倍的性能提升(响应时间从数毫秒缩短到数微秒),甚至在每秒处理的请求数量达到数百万个的情况下也是如此。
  • **发送持续流量或重复使用连接:**当您没有进行请求时,考虑让客户端将虚假流量发送到 DynamoDB 表中。或者,您可以重复使用客户端连接或使用连接池。所有这些技术都能保持内部缓存处于预热状态,这样有助于保持低延迟。
  • **使用最终一致性读取:**如果您的应用程序不需要强一致性读取,请考虑使用最终一致性读取。最终一致性读取更便宜,发生高延迟的可能性更低。有关更多信息,请参阅读取一致性

相关信息

启用适用于 Java 的 AWS SDK 指标

AWS 官方
AWS 官方已更新 2 年前
没有评论