我如何排查在 Amazon S3 上托管并通过 CloudFront 提供的静态网站上的延迟?

2 分钟阅读
0

我的网站上的静态内容托管在 Amazon Simple Storage Service(Amazon S3)存储桶上并通过 Amazon CloudFront 分配向用户提供。我的网站内容加载得很慢,或者我发现到第一个字节的时间(TTFB)指标过高。我想排查加载我网站的静态内容的延迟问题。

简短描述

要排查您的网站上的静态内容加载延迟的问题,请确定下面哪些事件可导致延迟:

  1. 客户端发送域名 DNS 查询时(DNS 查找进程)。
  2. 客户端将请求发送到 Web 服务器(CloudFront 内容交付网络)时,包括 SSL/TLS 协商。
  3. CloudFront 处理该请求并从缓存中提供内容,或由 CloudFront 将请求转发到源(Amazon S3)。

这些事件的性能取决于:

  • 本地系统上的 Web 浏览器和资源。
  • 本地网络。
  • 本地 DNS 服务器。
  • 本地路由器、防火墙或代理。
  • 上游 DNS 服务器。
  • 互联网服务提供商。
  • Amazon S3 和 CloudFront。

解决方法

确定导致延迟的事件。利用 Web 浏览器的开发人员工具检查对您的网站内容的请求中的每个组成部分的性能。例如,如果您使用的是 Mozilla Firefox,请参阅 MDN Web 文档网站上的 Firefox 开发人员工具网络请求详细信息

在您确定了哪些事件导致延迟之后,请审核下列注意事项以减少这些事件所用的时间。

客户端发送域名 DNS 查询时(DNS 查找进程)

请考虑这些优化 DNS 查找进程的方法:

  • 打开或增加客户端 DNS 缓存。
  • 设置或增加本地 DNS 服务器上的 DNS 缓存。
  • 如果来自互联网服务提供商的解析程序 DNS 服务器导致延迟,则考虑使用公有 DNS 服务器。

客户端将请求发送到 Web 服务器(CloudFront 内容交付网络),包括 SSL/TLS 协商

请考虑以下方法来缩短客户端到服务器的连接时间:

  • 通过改变您 Web 缓存、互联网服务提供商或网络路由,优化您的本地网络性能。您的网络浏览器与 CloudFront 之间的连接取决于以下变量:
  • 本地网络。
  • 来自互联网服务提供商的带宽。
    POP 到达离客户端最近的 CloudFront 入网点(POP)位置所需的网络路由或跳数。
  • 最佳实践是为 Web 资源配置最优化的路径。此外,使用正确的 DNS 解析程序将允许您的 Web 浏览器查找最近的正确 POP 位置。
  • 使用本地缓存减少从服务器 (CloudFront) 获取资源的请求。本地缓存对于不经常更改的静态对象特别有用,例如 CSS、JavaScript 或镜像。对于托管在 Amazon S3 上的静态内容,请向对象添加缓存控制标头。缓存控制标头指示 Web 浏览器将网站内容在浏览器的内存中或本地磁盘中保留一段时间。在此期间,Web 浏览器从本地内存加载这些内容,而不必通过 Internet 请求内容。使用 Amazon S3 控制台设置缓存控制标头
  • 如果您已有本地缓存 HTTP 转发代理,请指定足够保存您的网站内容的本地缓存大小。这将减少通过 Internet 发送的请求数量,因为经常访问的页存储在本地代理缓存中。

CloudFront 处理该请求并从缓存中提供内容,或由 CloudFront 将请求转发到源(Amazon S3)

通过从缓存提供更多内容并减少向源发出的内容请求,来减少加载您的网站时产生的延迟。请通过以下方法优化您的 CloudFront 配置,以使您的 Web 内容主要从缓存中提供:

  • 使用 AWS 托管式 CachingOptimized 缓存策略处理为来自 Amazon S3 的静态内容提供服务的缓存行为。
  • 在 CloudFront 提高静态内容的最小缓存时间。或者,在您的 CloudFront 分配的默认行为中提高最小缓存时间。提高最小 TTL 值是增加分配默认行为的最小缓存时间的一种方法。当您提高最小 TTL 值时,CloudFront 将对象缓存的时间更长,而不是从您的 Amazon S3 源请求对象。
  • 审核标头或查询字符串的转发或缓存设置。当缓存基于所选请求标头查询字符串转发和缓存的值设置为**无(增加缓存)**时,CloudFront 缓存得到优化。如果需要根据这些值进行转发或缓存,请务必指定哪些标头和查询字符串受到影响。
    **注意:**切勿将 CloudFront 配置为将 Cookie 转发到 Amazon S3 源。Amazon S3 不处理 Cookie
  • 在您的 CloudFront 分配上打开压缩。当您打开压缩时,CloudFront 自动压缩位于边缘或 POP 位置的对象,然后提供压缩的对象。这将减少下载时间并提高页面加载性能。
  • 为静态内容使用单独的缓存行为。最佳实践是为静态内容和动态内容使用不同的缓存行为。

按照以下步骤为您的静态内容配置最佳缓存设置:

  1. 打开 CloudFront 控制台
  2. 在分配列表中,选择为您的网站提供静态内容的分配。
  3. 选择 Behaviors(行为)选项卡。
  4. 为静态内容创建新行为,或编辑静态内容路径模式的现有行为。要编辑现有行为,请选择该行为,然后选择 Edit(编辑)。
  5. 缓存密钥和源请求下,选择缓存策略和源请求策略
  6. 对于缓存策略,选择 CachingOptimized
  7. 对于 Origin request policy(源请求策略),选择 None(无)或留空。源请求策略是可选的,不是用于 S3 源的最佳实践。
  8. 选择 Save changes(保存更改)。

相关信息

使用 Amazon CloudFront 完成动态完整网站分发

优化缓存和可用性

管理内容保留在边缘缓存中的时间长度(过期)

提供压缩文件

如何收集 AWS Support 要求提供的 Amazon S3 请求 ID 值?

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