如何在 API Gateway 中解决边缘优化的 API 端点中的延迟问题?

2 分钟阅读
0

当客户端向 Amazon API Gateway 中的边缘优化 API 发送请求时,我体验到较高的延迟。如何查找延迟来源以便进行故障排查?

简短描述

要查找边缘优化 API 端点的延迟来源,请确定连接路径的以下每个部分需要多长时间:

**重要提示:**这些连接路径步骤仅适用于边缘优化的 API 端点,不适用于区域 API 端点。边缘优化的 API 可通过 Amazon CloudFront 分配进行访问。区域 API 端点无法通过 CloudFront 访问。

  1. 在连接路径中前进到 DNS 名称解析
  2. 在连接路径中前进到进行传输控制协议 (TCP) 握手以连接到 CloudFront
  3. 在连接路径中前进到进行安全套接字层 (SSL) 握手以连接到 CloudFront
  4. 在连接路径中前进到将客户端 HTTP 请求发送到 CloudFront
  5. 在连接路径中前进到从 CloudFront 传输第一个字节
  6. 请求和响应 API 的总时间
  7. API Gateway 处理请求并响应 CloudFront 边缘站点的时间
  8. 集成端点响应来自 API Gateway 的 HTTP 请求的时间
  9. API Gateway 响应 CloudFront 边缘站点以及 CloudFront 响应客户端的时间

连接路径中花费时间最长的部分是延迟的来源。

**注意:**当用户请求通过 Amazon API Gateway REST API 传输到底层服务时,您可以使用 AWS X-Ray 跟踪和分析这些请求。API Gateway 支持对提供 X-Ray 的 AWS 区域中的所有 API Gateway REST API 端点类型 进行 X-Ray 跟踪。如需查看提供 X-Ray 的所有区域,请参阅 AWS 区域列表

解决方法

运行 curl_for_latency Bash 脚本

要确定 API 连接路径进程中步骤 1-6 的持续时间,请在 GitHub 上运行 curl_for_latency Bash 脚本。

重要提示:请确保替换 URLHTTP 方法参数值以匹配您的 API 的信息。

该脚本返回 API 完成以下连接路径步骤所需的时间期限:

  1. 在连接路径中前进到 DNS 名称解析 ("time_namelookup")
  2. 在连接路径中前进到进行 TCP 握手以连接到 CloudFront ("time_connect")
  3. 在连接路径中前进到进行 SSL 握手以连接到 CloudFront ("time_appconnect")
  4. 在连接路径中前进到将客户端 HTTP 请求发送到 CloudFront ("time_pretransfer")
  5. 在连接路径中前进到从 CloudFront 传输第一个字节 ("time_starttransfer")
  6. 请求和响应 API 的总时间 ("time_total")

确定导致延迟的事件后,请参阅如何排查 CloudFront 中的延迟增加问题以及如何降低该延迟?

验证 API Gateway 处理请求和响应 CloudFront 边缘站点所需的时间

CloudWatch 控制台中查看您的 API 的延迟指标。然后,为延迟指标图表设置配置 1 分钟间隔最大值,以查看一分钟时间范围内最长的处理时间。

有关说明,请参阅在 CloudWatch 控制台中查看 API Gateway 指标

验证集成端点响应来自 API Gateway 的 HTTP 请求要花费多长时间

CloudWatch 控制台中查看 IntegrationLatency 指标。然后,为 IntegrationLatency 图表设置配置 1 分钟间隔最大值,以查看一分钟时间范围内最长的处理时间。

-或者-

如果您为 API 激活了 CloudWatch 日志记录,请查看类似于以下内容的某个行项目的日志

Received response. Integration latency: 325 ms

此外,您还可以添加带有访问日志记录的 $context 变量,以进行额外的延迟故障排除。

有关说明,请参阅如何打开 CloudWatch Logs 以对 API Gateway REST API 或 WebSocket API 进行问题排查?

与 Lambda 集成的 API Gateway 请求

如果您将 AWS Lambda 与 API Gateway 结合使用,并且看到较高的 IntegrationLatency 指标,请查看 Lambda 函数的 CloudWatch Logss。当与 Lambda 函数集成的 API 端点向客户端发送响应所需的时间过长时,必须解决高延迟问题。由于 Lambda 函数中的冷启动未记录在函数的持续时间指标中,因此您的 API 的集成延迟可能比函数的持续时间长。要使用冷启动查看您的函数的持续时间,请使用 AWS X-Ray

有关更多信息,请参阅如何解决与 Lambda 集成的 API Gateway 请求中的高延迟问题?

验证 API Gateway 响应 CloudFront 边缘站点以及 CloudFront 响应客户端需要花费多长时间

取请求和响应 API 的总时间 ("time_total"),然后减去以下时间:

  • 在连接路径中前进到将客户端 HTTP 请求发送到 CloudFront ("time_pretransfer")
  • API Gateway 处理请求并响应 CloudFront 边缘站点的时间(API 的延迟指标

结果是 API Gateway 响应 CloudFront 边缘站点以及 CloudFront 响应客户端所花费的时间。


相关信息

使用 HTTP API 指标

Amazon API Gateway 维度和指标

使用 CloudWatch 指标监控 WebSocket API 的执行

如何使用 Amazon API Gateway 日志进行故障排查?

AWS 官方
AWS 官方已更新 1 年前