如何减少由于 CloudFront 缓慢响应造成的延迟?

1 分钟阅读
0

我从 Amazon CloudFront 下载对象或图片时遇到延迟时间较长的问题。收到“X-Cache:Miss from cloudfront”响应的请求加载速度比收到“X-Cache:Hit from cloudfront”响应的请求要慢。为什么会发生这种情况? 如何解决此问题?

解决方法

当请求发送到源时,CloudFront 会返回“X-Cache:Miss from cloudfront”。当请求来自最近的边缘站点时,CloudFront 会返回“X-Cache:Hit from cloudfront”。“Miss”请求可能加载得比较慢,因为存在转发到源的额外步骤。

为了避免将请求转发到源产生的延迟,请检查以下各项以确保请求可来自 CloudFront 边缘站点:

  • 请勿转发所有标题、所有 Cookie 或所有查询字符串,因为这会指示 CloudFront 传递请求,而不是对请求进行缓存。
  • 验证是否为很少更改的静态内容(如 CSS 文件)和经常更改的动态内容(如 JavaScript 文件)分别设置了单独的缓存行为。对于静态内容,请避免根据 Cookie、查询字符串或标头进行缓存,因为这些内容对于源提供内容是不必要的。
    **注意:**对于 Web 分配,默认情况下 CloudFront 在缓存边缘站点中的对象时不考虑 cookie。如果您的源返回了两个对象,并且它们只是 Set-Cookie 标头中的值不同,则 CloudFront 仅缓存该对象的一个版本。
  • 在 CloudFront 查询源服务器之前,针对需要更多缓存时间的路径模式扩展最小 TTL、最大 TTL 或默认 TTL。
  • 如果您的源使用 Cache-Control 标头,请验证指令符合分配中的最小 TTL、最大 TTL 或默认 TTL 集
  • 如果源服务器使用 Expires 标题,请验证标题是否允许 CloudFront 根据需要缓存响应。
  • 验证您的源服务器设置了有效、准确的 Date 和 Last-Modified 标头字段值。
  • 限制对象无效化的使用。仅在必要时运行失效。
  • 检查请求对象的频率。如果系统不经常请求某个对象,CloudFront 可能会将该对象从边缘站点中删除。

如果您提供的是动态内容,并且期望您的请求获得“X-Cache:Miss from cloudfront”响应,请考虑在不使用缓存的情况下采用以下方法来减少这些请求的延迟:

  • 设置更多在地理位置上与请求者更接近的源服务器。然后,设置一个基于延迟的路由 DNS 记录(例如,origin-latencybased-dnsrecord.example.com)来解析为这些服务器。在 CloudFront 中,将 DNS 名称(例如,origin-latencybased-dnsrecord.example.com)配置为分配的源。此配置允许 CloudFront 根据请求所在的边缘站点以最低延迟从源服务器获取内容。如果您使用 Amazon Route 53 作为 DNS 提供商,请参阅在 Amazon Route 53 中向基于延迟的路由添加其他区域
  • 增加 CloudFront 源的保持活动空闲超时时间。此值指定了在关闭连接前 CloudFront 与源服务器保持空闲连接的时长。默认的保持活动空闲超时时间为 5 秒,但如果源服务器支持,则可以设置更高的值(最长 60 秒)。如果您的分配将动态内容的请求转发到源,则增加超时值有助于减少延迟。这是因为 CloudFront 不必为每个请求都建立新连接。
    **注意:**可以为一个源分配多个 IP 地址。要跨多个源 IP 地址使用持久连接,CloudFront 依赖于更高的请求速率和更高的请求频率。这是因为请求通过源 IP 地址进行循环路由,并且每个 IP 地址都是持久连接。

相关信息

提高来自 CloudFront 边缘缓存的请求的比例(缓存命中率)

我应向 AWS Support 提供哪些信息来诊断 CloudFront Web 分配延迟问题?

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

使用 Amazon S3 控制台将标头添加到您的对象

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