Cloud CDN(内容分发网络)借助 Google 分布在全球各地的边缘网络,在更靠近用户的位置提供内容,从而为您的网站和应用提速。
Cloud CDN 与外部 HTTP(S) 负载平衡搭配使用,为您的用户分发内容。外部 HTTP(S) 负载平衡器提供用于接收请求的前端 IP 地址和端口,以及用于响应这些请求的后端。
Cloud CDN 内容可以来自各种类型的后端:
- 实例组
- 可用区网络端点组 (NEG)
- 无服务器 NEG:一个或多个 App Engine、Cloud Run 或 Cloud Functions 服务
- 互联网 NEG,适用于 Google Cloud 之外的端点(也称为自定义源站)
- Cloud Storage 中的存储分区
在 Cloud CDN 中,这些后端也被称为“源站服务器”。下图说明了从虚拟机实例上运行的源服务器发出响应,到流经 HTTP(S) 负载平衡器,然后再由 Cloud CDN 分发这一整个过程。
Cloud CDN 的工作原理
在用户从 HTTP(S) 负载平衡器请求内容时,系统会将请求发送到 Google 网络边缘处、尽可能距离用户最近的 Google Front End (GFE)。
如果该负载平衡器的网址映射将流量路由到已配置 Cloud CDN 的后端服务或后端存储分区,则 GFE 会使用 Cloud CDN。
缓存命中和缓存未命中
缓存是一组存储和管理内容服务器,可以更快地处理未来对相同内容的请求。缓存的内容是存储在源服务器上的可缓存内容的副本。
如果 GFE 在 Cloud CDN 缓存中查询并找到对应于用户请求的缓存的响应,则 GFE 会将缓存的响应发送给用户。这称为缓存命中。当发生缓存命中时,GFE 会通过内容的缓存键来查询内容,并直接响应用户,从而缩短往返时间,且无需源站服务器处理请求。
如果首次请求某项内容时,GFE 确定其无法从缓存中找到请求所需内容。这种情况就称为缓存未命中。当发生缓存未命中时,GFE 可能会尝试从附近的缓存中获取该内容。 如果附近的缓存中有该内容,则 GFE 将通过缓存间的填充过程将该内容发送到第一个缓存。否则,GFE 会将请求转发给外部 HTTP(S) 负载平衡器。
然后,负载平衡器会将请求转发到您的某个源站服务器。当缓存收到内容时,GFE 会将其转发给用户。
下图展示了缓存命中和缓存未命中的情况:
- 在虚拟机实例上运行的源站服务器发送 HTTP(S) 响应。
- 外部 HTTP(S) 负载平衡器将响应分发到 Cloud CDN。
- Cloud CDN 将响应传送给最终用户。
缓存出站和缓存填充
如果源服务器对此请求的响应是可缓存的,Cloud CDN 会将此响应存储在 Cloud CDN 缓存中,以用于将来的请求。
从缓存到客户端的数据传输过程称为缓存出站。以缓存为传输目标的数据传输过程则称为缓存填充。如下图所示,缓存填充可以源自另一个 Cloud CDN 缓存或源站服务器。
缓存命中时,您需要支付缓存出站带宽的费用。缓存未命中时(包括引发缓存间填充的未命中情形),您需要额外支付缓存填充带宽的费用。也就是说,缓存命中的费用低于缓存未命中的费用。如需详细了解价格信息,请参阅价格。
无网址重定向
Cloud CDN 不会执行任何网址重定向。Cloud CDN 缓存位于 GFE。这有以下含义:
- 无论是否启用 Cloud CDN,客户端请求的网址都保持不变。
- 无论是否存在缓存命中,网址都保持不变。
缓存命中率
缓存命中率是指从缓存提供所请求对象的次数百分比。如果缓存命中率为 60%,则意味着从缓存提供所请求对象的次数占 60%,其余的 40% 则必须从源站进行检索。
Google Cloud Console 中的缓存命中率列报告了各源站的缓存命中率。
该页面上显示的百分比表示在很短的时间段内(过去几分钟)计算的比率。要查看从 1 小时到 30 天内的缓存命中率,请点击源站名称,然后点击监控标签页。
如需了解缓存键如何影响缓存命中率,请参阅使用缓存键。 如需了解问题排查信息,请参阅缓存命中率低。
将内容插入到缓存中
缓存是一种被动式操作;也就是说,只有请求流经某个缓存,并且响应可被缓存时,对象才会被存储在该缓存中。存储在一个缓存中的对象不会自动复制到其他缓存中;缓存间的填充过程仅在响应客户端发起的请求时才会发生。除非能让各个缓存响应相关请求,否则您无法预加载缓存。
当源服务器支持字节范围请求时,Cloud CDN 可以发起多个缓存填充请求,以响应单个客户端请求。
从缓存中提供内容
启用 Cloud CDN 之后,系统将自动缓存所有可缓存的内容。您的源站服务器使用 HTTP 标头来指示缓存哪些响应。您还可以使用缓存模式来控制可缓存性。
当您使用后端存储分区时,源站服务器是 Cloud Storage。使用虚拟机实例时,源站服务器是您在这些实例上运行的 Web 服务器软件。
Cloud CDN 在世界各地的许多位置设立了缓存。缓存的性质决定了我们无法预测某个请求的响应是否会从缓存中提供。但可以预计的是,在大部分时间里,缓存中将提供热门请求的可缓存内容,从而显著缩短延迟时间、减少费用并降低源服务器的负载。
如需详细了解 Cloud CDN 的缓存内容以及缓存时长,请参阅缓存概览。
如需了解 Cloud CDN 从缓存提供了哪些内容,您可以查看日志。
从缓存中移除内容
要从缓存中移除内容,您可以使缓存的内容失效。如需了解详情,请参阅:
缓存绕过
要绕过 Cloud CDN,您可以直接从 Cloud Storage 存储分区或 Compute Engine 虚拟机请求对象。例如,Cloud Storage 存储分区对象的网址如下所示:
https://storage.googleapis.com/STORAGE_BUCKET/FILENAME
逐出和到期
要从缓存提供的内容必须已插入缓存中,该内容不得被逐出,也不得过期。
逐出和到期是两个不同的概念。它们都会影响所提供的内容,但并不直接相互影响。
逐出
每个缓存对于可以保存的内容数量都设有限制。但是,即使缓存已满,Cloud CDN 也会向缓存添加内容。要将内容插入已被填满的缓存,缓存会首先移除其他内容以腾出空间。此过程称为逐出。缓存通常都处于已填满的状态,因此会不断地逐出内容。缓存通常会逐出最近未被访问过的内容,而无论内容的到期时间如何。被逐出的内容可能已到期,也可能没有。设置到期时间不会影响逐出。
非热门内容是指一段时间内未被访问过的内容。“一段时间”和“非热门”都是与缓存中大部分其他内容相对而言。当缓存获得更多流量时,也会逐出更多缓存的内容。
与所有大规模缓存一样,内容可能会以无法预测的方式被逐出,因此不能保证特定请求能获得缓存中提供的内容。
到期
HTTP(S) 缓存中的内容可以配置到期时间。即使内容尚未被逐出,到期时间也会通知缓存不提供到期内容。
例如,假设某个提供每小时照片的网址。其响应可能应设置为在一小时内到期。否则,所提供的内容可能是缓存中的旧照片。
如需了解如何微调过期时间,请参阅使用 TTL 设置和替换。
Cloud CDN 发起的请求
当您的源服务器支持字节范围请求时,Cloud CDN 可以将多个请求发送到您的源服务器,以响应单个客户端请求。如字节范围请求支持所述,Cloud CDN 可以发起两种类型的请求:验证请求和字节范围请求。
其他 Cloud Platform 服务的数据位置设置
使用 Cloud CDN 即表示,数据可能存储在您的源服务器所在区域或可用区之外的内容提供地点。这是正常现象,HTTP 缓存正是以这种方式在互联网上运行。根据 Google Cloud Platform 服务条款中的服务专属条款,某些 Cloud Platform 服务在与其他 Google 产品和服务(本例中为 Cloud CDN 服务)一起使用时,这些 Cloud Platform 服务可用的数据位置设置将不适用于各自 Cloud Platform 服务的核心客户数据。如果您不希望出现这种结果,请勿使用 Cloud CDN 服务。
对 Google 代管的 SSL 证书的支持
您可以在启用 Cloud CDN 时使用 Google 代管的证书。
Google Cloud Armor 与 Cloud CDN
如果您将 Google Cloud Armor 与 Cloud CDN 配合使用,则仅对动态内容请求、缓存未命中或其他发往您的源站服务器的请求强制执行安全政策。即使下游 Google Cloud Armor 安全政策会阻止该请求到达源站服务器,系统也会提供缓存命中。
后续步骤
- 如需为 HTTP(S) 负载平衡实例和存储分区启用 Cloud CDN,请参阅使用 Cloud CDN。
- 如何将 Cloud CDN 与 Google Kubernetes Engine 配合使用,请参阅通过 Ingress 配置 Cloud CDN。
- 如需查找 GFE 入网点,请参阅缓存位置。