我看到来自 Amazon CloudFront 的响应延迟增加了。如何确定原因并减少延迟?
简短描述
要解决 CloudFront 的延迟问题,请首先确定以下哪些事件导致了延迟:
- 请求在客户端和 CloudFront 边缘站点之间传输所花费的时间。这包括域名系统 (DNS) 查找过程以及 TCP 和 SSL/TLS 协商。
- 请求在 CloudFront 和源之间传输所花费的时间。这包括源 DNS 查找过程、与源的 TCP 和 SSL/TLS 协商,以及源处理和响应对象所花费的时间。
然后,按照故障排除步骤对造成最大延迟的事件执行故障排除。
解决方法
识别导致 CloudFront 延迟的事件:
要确定哪些事件导致 CloudFront 延迟,请执行以下操作之一:
curl -w "DNS_resolution: %{time_namelookup}| TCP_negotiation_time: %{time_connect}| SSL_negotiation_time: %{time_appconnect}| TTFB: %{time_starttransfer}| Total time: %{time_total} \n" -o /dev/null -vsL https://www.example.com
注意:将 example.com 替换为您的 CloudFront 域名或备用域名 (CNAME) 和 URL 路径。
- 检查网络请求的每个阶段在 Web 浏览器的开发人员工具中花费多长时间。例如,如果您使用的是 Mozilla Firefox,则“计时”选项卡会提供此信息。
根据每个事件或请求花费的时间,参阅本文中相关的解决方法部分。
如果您过去曾观察到延迟,请在 CloudFront 访问日志中勾选花费的时间和到达第一个字节的时间字段。CloudFront 访问日志不会记录客户端进行 DNS 查找过程以及 TCP 和 SSL/TLS 协商所花费的时间
减少 DNS 解析的延迟
- 增加客户端 DNS 中的 DNS 缓存时间。
- 增加本地 DNS 服务器中缓存的生存时间 (TTL)。
- 增加 DNS 注册商/提供商中 DNS 记录的 TTL。
- 如果来自互联网服务提供商的解析器 DNS 服务器导致延迟,则考虑使用公有 DNS 服务器。
减少 TCP 和 SSL/TLS 中的延迟 - 协商时间
- 检查您的本地网络带宽和互联网带宽。
- 检查您的互联网服务器提供商或路由器是否有任何网络中断。
- 通过您的互联网服务提供商或网络路由,优化您的本地网络性能。
- 确认使用正确的 DNS 解析器将允许您的 Web 浏览器查找最近的正确 POP 位置。
- 要提高 HTTPS 站点性能,请缩短您的认证链。
- 延迟可能由防火墙、代理或本地路由器引起。要确定其中哪一个导致延迟,请从您的系统运行以下 MTR 命令。有关详细信息,请参阅使用 MTR 诊断网络问题。
mtr -rw example.com --no-dns
注意:将
example.com 替换为您的域名。
缩短第一个字节所用时间 (TTFB) 和所需总时间 (TTL) 的延迟
如果 CloudFront 返回“X-Cache:Hit from cloudfront”
当请求来自最近的边缘站点时,CloudFront 会返回“X-Cache:Hit from cloudfront”。要减少延迟:
如果 CloudFront 返回“X-Cache:Miss from cloudfront”
当请求发送到源时,CloudFront 是否会返回“X-Cache:Miss from cloudfront”。要减少延迟:
相关信息
如何减少来自 CloudFront 的缓慢响应的延迟?
我如何排查在 Amazon S3 上托管并通过 CloudFront 提供的静态网站上的延迟?
我应该给 AWS Support 提供什么信息来用于诊断 CloudFront Web 分发延迟问题?
如何确定是什么原因导致 API Gateway 中的边缘优化 API 端点的请求延迟?