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

上次更新日期:2021 年 11 月 19 日

我的 Amazon DynamoDB 请求的响应时间增加。

解决方案

分析 Amazon CloudWatch 指标 SuccessfulRequestLatency 时,最佳实践是检查平均延迟。偶尔发生的延迟激增不需要担心。但是,如果平均延迟较高,则可能存在必须解决的底层问题。

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

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

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

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

这篇文章对您有帮助吗?


您是否需要账单或技术支持?