概览

Cloud CDN 内容分发网络利用 HTTP(S) 负载平衡功能为您的用户分发内容。HTTP(S) 负载平衡器提供了用于接收请求的前端 IP 地址和端口以及用于响应这些请求的后端。

可从各种类型的后端传送 Cloud CDN 内容:

在 Cloud CDN 中,这些后端也被称为“源服务器”。下图说明了在由 Cloud CDN 分发之前,虚拟机实例上运行的源服务器发出的响应流经 HTTP(S) 负载平衡器的过程。

响应从源服务器流经 Cloud CDN,然后流向客户端
Cloud CDN 响应流

Cloud CDN 的工作原理

在用户从 HTTP(S) 负载平衡器请求内容时,请求会到达位于 Google 的网络边缘尽可能接近用户的 Google 前端 (GFE)。如果该负载平衡器的网址映射将流量路由到已配置 Cloud CDN 的后端,则 GFE 可通过以下方式使用 Cloud CDN:

  • GFE 首先在 Cloud CDN 缓存中查找对用户请求的响应。如果 GFE 找到缓存的响应,则 GFE 会向用户发送这一缓存的响应。这称为缓存命中

  • 否则,如果 GFE 无法找到针对该请求缓存的响应,则 GFE 会向相应的后端(源服务器)发出请求。如果对此请求的响应可缓存,则 GFE 会在 Cloud CDN 缓存中存储响应,以便该缓存可用于后续请求。

要使用 Cloud CDN,HTTP(S) 负载平衡器必须使用优质网络服务层级。如果 Cloud CDN 提供缓存的响应,则该响应会由负载平衡器的 IP 地址进行传送。Cloud CDN 不会执行任何网址重定向;Cloud CDN 缓存位于 GFE。这意味着无论是否启用了 Cloud CDN,客户端请求的网址都是相同的,并且无论是否存在缓存命中,该网址也都是相同的。

要从缓存中移除项,您可以使缓存的内容失效

要绕过 Cloud CDN,您可以直接从 Cloud Storage 存储分区或 Compute Engine 虚拟机请求对象。例如,用于 Cloud Storage 存储分区对象的网址如下所示:

https://storage.googleapis.com/your-storage-bucket/filename

缓存命中、未命中、填充和出站

首次请求某项内容时,GFE 确定它无法处理来自缓存的请求。此情形称为缓存未命中。缓存可能会尝试从附近的缓存获取该内容。如果附近的缓存中有该内容,则 GFE 将通过缓存间的填充过程将该内容发送到第一个缓存。否则,GFE 会将请求转发到 HTTP(S) 负载平衡器。然后,负载平衡器将请求转发到您的其中一个后端。此后端即是内容的源服务器。

当缓存收到内容时,GFE 会将其转发给用户。如果内容可缓存,则缓存可以存储此内容,以用于将来的请求。如果插入新内容的过程需要逐出其他更加热门的内容,或者缓存不具备足够的信息来判断新内容的热门程度,则缓存可能会拒绝存储新内容。例如,当较大的内容第一次获得访问时,缓存将拒绝插入这些内容。

当用户请求缓存中已存储的内容时,GFE 会通过内容的缓存键来查询内容,并直接响应用户,从而缩短往返时间,并使源服务器无需处理请求。

初始响应由源服务器传送,而后续响应由 GFE 从缓存传送。
缓存未命中和缓存命中

从缓存到客户端的数据传输过程称为缓存出站。面向缓存的数据传输过程则称为缓存填充。如下图所示,缓存填充可以源自另一个 Cloud CDN 缓存或源服务器。

缓存填充是指从源服务器到缓存或从一个缓存到另一个缓存的数据传输过程。缓存出站指的是从缓存到客户端的数据传输过程。
缓存填充和缓存出站

当缓存命中时,您需要支付缓存出站流量带宽的费用。当缓存未命中时(包括引发缓存间填充的未命中情形),您需要额外支付缓存填充带宽的费用。这意味着,在其他条件相同的情况下,缓存命中时的费用低于缓存未命中时的费用。如需详细了解价格信息,请参阅价格页面

缓存命中率

缓存命中率是指从缓存传送所请求对象的次数百分比。如果缓存命中率为 60%,则意味着从缓存传送所请求对象的次数占 60%,并且从来源检索所请求对象的次数必须占 40%。

在 Google Cloud Platform Console 中,系统在缓存命中率列中针对每个来源报告缓存命中率。
转到 Cloud CDN 页面
该页面上显示的百分比表示短时间内(过去几分钟)计算的比率。要查看一个时间段(1 小时到 30 天)内的缓存命中率,请点击来源名称,然后点击监控标签页。

如需了解缓存键如何影响缓存命中率,请参阅使用缓存键。如需了解问题排查信息,请参阅缓存命中率低

将内容插入缓存

缓存是一种被动式操作;也就是说,如果请求流经某个缓存,并且响应可被缓存,对象才会被存储在该缓存中。存储在一个缓存中的对象不会自动复制到其他缓存中;缓存间的填充过程仅在响应客户端发起的请求时才会发生。除非您让各个缓存响应相关请求,否则您无法预加载缓存。

当源服务器支持字节范围请求时,Cloud CDN 可以发起多个缓存填充请求以响应单个客户端请求。Cloud CDN 发起的请求部分详细介绍了这些请求。

从缓存传送的内容

启用 Cloud CDN 之后,系统将自动缓存所有可缓存的内容。您的源服务器使用 HTTP 标头来指示应该缓存哪些响应,以及不应该缓存哪些响应。当您使用后端存储分区时,源服务器是 Cloud Storage。当您使用虚拟机实例时,源服务器是您在这些实例上运行的网络服务器软件。 如需详细了解 Cloud CDN 缓存的内容和缓存时长,请参阅缓存详情

Cloud CDN 在世界各地的许多位置设立了缓存。缓存的性质决定了我们无法预测某个请求的响应是否会从缓存中传送。但可以预计的是,在大部分时间里,系统将从缓存中传送针对可缓存的内容的热门请求,从而显著缩短延迟、减少费用并降低源服务器的负载。

您可以查看日志以了解哪些内容是 Cloud CDN 从缓存中传送的。如果需要从缓存中移除内容,您可以发起缓存失效操作

逐出和到期

要从缓存传送的内容必须已插入缓存中,该内容不得被逐出,也不得过期。

逐出和到期是两个不同的概念。它们都会影响所传送的内容,但并不直接相互影响。

  • 逐出:每个缓存对于可以保存的内容数量都设有限制。但是,即使缓存已满,Cloud CDN 也会向缓存添加内容。要将内容插入已被填满的缓存,缓存会首先移除其他内容以腾出空间。此过程称为逐出。缓存通常已被填满,因此会不断地逐出内容。缓存通常会逐出最近未被访问过的内容,而无论内容的到期时间如何。被逐出的内容可能已到期,也可能没有。设置到期时间不会影响逐出。

    非热门内容是指一段时间内未被访问过的内容。“一段时间”和“非热门”都与缓存中大部分其他内容相关。当缓存获得更多流量时,也会逐出更多缓存的内容。

    与所有大规模缓存一样,内容可能会以无法预测的方式被逐出,因此不能保证从缓存中传送特定的请求。

  • 到期:HTTP(S) 缓存中的内容可以配置到期时间。即使内容尚未被逐出,到期时间也会通知缓存不传送原先的内容。

    例如,考虑使用时间快照网址。其响应可能应设置为在一小时内到期。否则,所传送的内容可能是缓存中原先的图片。

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 托管的证书。

后续步骤

此页内容是否有用?请给出您的反馈和评价:

发送以下问题的反馈:

此网页
Cloud CDN 文档