在平均延迟正常的情况下,为什么我的 Amazon DynamoDB 最大延迟指标过高?

1 分钟阅读
0

在我查看我的 Amazon DynamoDB 工作负载的 Amazon CloudWatch 指标时,最大延迟指标过高。但是,平均延迟是正常的。

解决方法

分析 Amazon CloudWatch 指标 SuccessfulRequestLatency 时,最佳实践是检查平均延迟。最大延迟并不能反映 DynamoDB 表的总体延迟情况。相反,它显示的是该时间段内单个请求所用的最长时间。例如,如果您的 DynamoDB 表一次拥有 100 个请求,则即使 99 个请求需要 10 毫秒,单个请求需要 100 毫秒,那么最大延迟指标也是 100 毫秒。

DynamoDB 是一个大规模分发系统,后端实例集中包含数千个节点。因此,一个 DynamoDB 表的表空间中可能有多个分区,并且每个分区在后端实例集中可能包含多个副本。当您对 DynamoDB 进行 API 调用时,DynamoDB 服务端点会收到您的调用,然后将其路由到其中一个后端节点进行处理。成功处理调用后,DynamoDB 会将结果路由回您的客户端。

在大多数情况下,一次尝试即可成功处理 API 调用,此时您会观察到客户端出现的延迟很小。但是,如果后端节点遇到以下情况,在第一次尝试就会失败:

  • 处于忙碌状态
  • 失效转移
  • 分区拆分
  • 网络连接出现问题

在这些情况下,第一次尝试会在服务器端超时(5000 毫秒)内失败。然后,服务器会自动在另一个节点上重试 API 调用,通常是多次。成功处理 API 调用后,服务器会将结果返回到客户端。发生这种情况时,您会观察到特定请求的延迟增加。 因此,最大延迟指标过高通常不需要担心。如果 DynamoDB 服务观察到某个节点的延迟持续过高,则该服务会自动从后端实例集中删除此部分。当服务端发生前面提到的本地化故障时,您可能会观察到一定百分比的 API 调用的延迟级别有所提高。这反映在相关 DynamoDB 表的 CloudWatch 指标的最大 SuccessfulRequestLatency 水平过高上。因此,本地化故障可能会增加最大延迟,但您无需采取任何措施来控制此故障。

但是,您可以将应用程序配置为通过指数回退重试实现快速失效,以此快速做出反应。这意味着新请求会到达新节点,并且您将会更快地获得结果。有关更多信息,请参阅为延迟感知 Amazon DynamoDB 应用程序调整 AWS Java SDK HTTP 请求设置


相关信息

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

延迟指标日志记录

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