内容分发最佳做法

本页面介绍使用 Cloud CDN 优化和加速内容分发的最佳做法。 主题分为几个关键区域。

Cloud CDN 使用 HTTP(S) 负载平衡作为可缓存内容的源站。外部 HTTP(S) 负载平衡器可以通过一个全球 IP 地址,从以下类型的后端向用户传送混合静态和动态创建内容的数据。

由于 Cloud CDN 与 Google Cloud 无缝集成,因此您可以通过多种方式部署 Cloud CDN 并管理内容。请使用此处列出的最佳做法来计划和优化您的部署。 如需了解详情,请参阅使用 Cloud CDN

优化缓存命中率

推荐的一些做法有助于优化缓存命中率。

缓存静态内容

为提高性能,在启用 Cloud CDN 时,您需要为应用选择合适的缓存模式。

管理缓存规则的最灵活且通常首选的方法是使用缓存控制标头。如果您目前不熟悉如何使用源缓存控制标头,则最佳做法建议是允许 Cloud CDN 自动缓存静态内容。

如需从源站自动缓存静态响应,您可以使用 --cache-mode=CACHE_ALL_STATIC 设置(默认)。通过此设置,Cloud CDN 可以缓存常见的静态内容类型。 确保您的内容与概述的类别匹配:否则,内容不会缓存。

请勿对分片进行不必要的分片

使用 Cloud CDN 时,最佳做法是确保跨网域或应用重复使用的内容缓存在同一缓存键下。例如,如果有两个后端存储分区,其中具有相同的对象。为这两者启用 Cloud CDN 后,即使对象相同,系统也会在缓存中创建两个单独的条目。

使用自定义缓存键来提高缓存命中率

默认情况下,Cloud CDN 使用完整的请求网址来构建缓存键。为了提高性能和可伸缩性,您必须优化缓存命中率。为了优化缓存命中率,您可以使用自定义缓存键

Cloud CDN 键值对存储
Cloud CDN 键值对存储

您可以自定义缓存键以包含或省略协议、主机或查询字符串中的任意一项或多项。例如,假设您在不同的网域上有两个网站,这两个网站使用相同的徽标。要显示徽标,请使用自定义缓存键,如下所示:

  • 网站内容不同,但您在两个网域中使用相同的公司徽标。当您为拥有该徽标的后端服务开启 Cloud CDN 并自定义缓存键时,请取消选中主机复选框,这样一来,缓存会忽略该网域,但会缓存该徽标。

  • 无论是通过 HTTP 还是 HTTPS 显示徽标,都需要对该徽标进行缓存。当您为拥有该徽标的后端服务自定义缓存键时,请取消选中协议复选框,使得通过 HTTP 和 HTTPS 传送的请求被统计为徽标缓存条目的匹配项。

如需了解如何自定义缓存键,请参阅使用缓存键

优化性能

以下推荐做法有助于优化性能。

确保已启用 HTTP/3 和 QUIC 协议支持

HTTP/3 是新一代互联网协议。它基于原始 Google QUIC (gQUIC) 协议开发的 QUIC 协议构建。外部 HTTP(S) 负载平衡器、Cloud CDN 和客户端之间支持 HTTP/3。

如需使用 Cloud CDN 提高性能,请确保启用 HTTP/3

使用负缓存

借助负缓存,您可以对常见错误或重定向进行精细控制。当 Cloud CDN 遇到特定的响应代码时,它会在缓存中存储该响应的设定 TTL。这可减少来源的负载,并通过缩短响应延迟时间来提升最终用户体验。

优化安全性

您可以通过多种推荐做法来优化安全性。

使用 Google Cloud Armor

Google Cloud Armor 与 Cloud CDN 集成,用于缓存非缓存或缓存未命中内容。最佳做法建议尽可能将 Google Cloud Armor 与 Cloud CDN 结合使用,以提高 Web 应用的安全性。

使用签名网址。

如果您使用的是签名网址,请注意以下事项:

正在优化缓存

优化缓存 TTL

您可以设置或替换 TTL,以微调 Cloud CDN 缓存响应的时长以及 Cloud CDN 重新验证响应的时间。

您还可以定义面向客户端的 TTL,以便充分利用浏览器缓存。

如需了解详情,请参阅使用 TTL 设置和替换

为时间敏感内容设置过期时间

Cloud CDN 缓存中的每项内容都有一个关联的过期时间,请务必设置适合您的用例的过期时间。由于源服务器必须重新发送缓存服务器上过期的内容,因此您需要谨慎选择过期时间。

要选择过期时间,一种方法是根据您更新内容的频率对内容进行分类,例如:

  • 近乎实时更新,例如体育赛事或交通运输的实时反馈
  • 频繁更新,例如每周、每日或每小时的天气信息或头版新闻图片
  • 不常更新,例如网站徽标或者 CSS 或 JavaScript 文件

接下来,按内容类别选择过期时间。例如,五秒的过期时间可能适用于近乎实时的体育赛事比分,一小时的过期时间则可能适用于天气动态。对于存储在 Cloud Storage 中的内容,请使用 Cache-Control 元数据设置过期时间。内容由 Compute Engine 传送时,您可以通过配置 Web 服务器软件来控制过期时间。

过期时间由 Cache-Control 标头中的 max-ages-maxage 值指定。此标头由 HTTP 规范定义。例如,以下 Cache-Control 标头使相关内容可被公开读取并缓存,缓存过期时间为 72 小时(259200 秒):

  Cache-Control: public, max-age=259200

要最大程度增加缓存,请按照缓存概览中的准则进行操作。切记,Cache-Control 元数据字段中的 max-ages-maxage 值通过以下方式配合使用:

  • max-ages-maxage 值以秒为单位进行衡量。
  • s-maxage 值仅适用于共享缓存,不适用于浏览器缓存。
  • max-age 值适用于所有缓存,除非 s-maxage 将其替换。

对于频繁更改的内容或必须随相关内容一起更改的内容,建议您结合使用较长的过期时间以及具有版本控制的网址

使用具有版本控制的网址更新内容

通过对内容进行版本控制,您可以传送同一内容的不同版本,这样一来,您可以在缓存条目过期之前向用户显示新内容,并有效地移除旧内容。由于版本控制功能简单易用且不收取任何费用,因此我们建议您使用版本控制功能作为更新可缓存内容的默认方法。

要对内容进行版本控制,请在网址中添加一个参数,例如版本号。 您可以通过多种方法在网址中包含参数,例如:

  • 添加查询字符串:file.ext?v=100
  • 更改文件名:file.1.0.0.extfile_v100.ext
  • 更改文件路径:/v100/file.ext

当您添加参数时,您将更改文件的名称和网址。此更改会强制缓存忽略所有现有缓存条目。

谨慎使用失效操作来移除内容

在缓存条目过期之前,失效操作会从 Cloud CDN 分布式缓存服务器中移除内容。失效操作具有最终一致性。

我们建议您谨慎使用失效操作,您只能将此操作用作最后的补救手段。 例如,当您因法律原因或意外上传而必须移除内容时,失效操作十分有用。 其他情况下,我们建议您尽可能使用版本控制功能,或等待内容正常到期。 Cloud CDN 缓存服务器通常会逐出不常访问的内容,以便为新内容腾出空间。如果某项内容未被访问的时间达到 30 天,系统会无条件将其移除。

缓存失效操作的速率受限

如需详细了解失效操作,请参阅缓存失效操作概览

优化监控和日志记录

确保已为 Cloud CDN 启用日志记录

管理 Cloud CDN 的最佳做法是确保为所有已启用 Cloud CDN 的后端启用日志记录功能

使用适用于 Cloud CDN 的自定义监控信息中心

为了确保更高的可靠性和性能,最佳做法是定期查看与 Cloud CDN 相关的监控指标。您不妨从 Cloud CDN 自定义监控信息中心入手。

查看第三方性能测试

查看来自第三方提供商的报告,例如由 Citrix Radar 提供的可用性、延迟时间和吞吐量报告