源站概览

无论内容是托管在 Google Cloud、其他云还是本地,您都可以从源站基础架构提取内容。

每项配置都可以有一个或多个与之关联的源。源配置会告知媒体 CDN 如何连接到您的基础架构、何时以及如何进行故障切换、重试和超时,以及连接时使用的协议。

源站具有以下特征:

  • 您可以按主机和路由定义来源,这样,单个 EdgeCacheService 资源就可以映射到包含清单、视频片段和其他静态内容的多个来源。
  • 可通过 HTTP/2、HTTPS 和未加密的 HTTP/1.1 访问源站。
  • 重试和故障切换行为按源站进行配置,这可让服务在出现硬错误(如连接失败)时进行故障切换,或根据 HTTP 404 Not Found 或 HTTP 429 Too Many Requests 响应进行重试。
  • 您可以通过将外部应用负载平衡器配置为媒体 CDN 之后的源站来访问 Google Cloud 内部或本地的专用资源。
  • 重定向跟踪行为是按源站配置的。您可以启用媒体 CDN 以跟踪指向其他源服务器的重定向。

源要求

若要允许媒体 CDN 缓存大于 1 MiB 的源站响应,除非另有指定,否则源站必须在 HEADGET 请求的响应标头中包含以下内容:

  • Last-ModifiedETag HTTP 响应标头(验证器)。
  • 有效的 HTTP Date 标头。
  • 有效的 Content-Length 标头。
  • Content-Range 响应标头,用于响应 Range GET 请求。Content-Range 标头必须具有采用 bytes x-y/z 形式的有效值(其中 z 是对象大小)。

默认源协议为 HTTP/2。如果您的源仅支持 HTTP/1.1,则可以为每个源明确设置协议字段。

来源防护

媒体 CDN 提供深度分层的边缘基础架构,旨在尽可能主动减少缓存填充流量。

缓存基础架构有三个主要层:

  1. 深边缘缓存,可在服务提供商网络内处理大部分流量并分流。
  2. Google 的对等互连边缘,它连接到数千个 ISP,并充当边缘缓存的中间层缓存;当边缘缓存不在给定 ISP 内时,则充当面向用户的缓存。
  3. Google 网络中的长尾缓存,其他下游缓存在来源之前填充这些长尾缓存。这些缓存支持大量扇入,具有巨大的缓存存储容量,并充当源站护盾。

此拓扑的概览如下所示:

拓扑概览。
拓扑概览(点击可放大)。

所有缓存层都支持请求折叠(或合并)以进一步降低源站负载。基于观察到的大规模真实工作负载:

  • 超过 95% 的缓存填充会使用该区域内的专用长尾缓存节点,以降低缓存填充费用和延迟。
  • 源站与 Google 自己的边缘基础架构之间的缓存填充流量完全通过 Google 的全球专用骨干网,这可以缩短缓存填充延迟时间并提高可靠性,这都是直播工作负载的积极优势。
  • 缓存可以互相交叉填充(如果有优势的话),从而进一步降低缓存填充率。
  • 媒体 CDN 在所有缓存中都有巨大的存储容量,即使对于长尾不太热门的内容,也可以最大限度地降低逐出率。

客户可能会看到不同的分流速率,具体取决于其缓存配置、用户负载、工作负载(例如实时与按需)、用户分布以及他们向不同区域用户提供了多少长尾内容(语料库总大小)。

请求收起

请求收起会主动将针对同一缓存键的多个用户驱动的缓存填充请求收起为每个边缘节点的单个源请求。

源站防护结合使用,可进一步降低源站负载和出站流量带宽需求,这也是媒体 CDN 的默认行为。

对于收起的请求,系统会记录面向客户端的请求和(收起的)缓存填充请求。收起会话的 leader 用于发出来源填充请求,这意味着来源只会看到相应客户端的标头(包括用户代理)。

无法收起没有共享相同缓存键的请求。

来源连接

以下部分介绍了媒体 CDN 如何连接到源站、如何发出 HTTP 请求以及如何对请求进行身份验证。

支持的源站和协议

媒体 CDN 直接支持将任何可公开访问的 HTTP 端点作为来源,包括:

  • Cloud Storage 存储分区,包括通过 Identity and Access Management 服务帐号使用的专用存储分区
  • 外部应用负载平衡器
  • 与 Amazon S3 兼容的存储分区,包括使用 AWS 签名版本 4 的专用存储分区
  • 其他公开可用的对象存储,例如 Azure Blob Storage
  • 公共 Web 服务器,例如公共虚拟机或本地主机

您可以通过安全隧道和 Google 的全球骨干网与源站连接。

下表详细说明了受支持的源协议。

协议 受支持 需要 SSL (TLS)
HTTP/2 是(默认)
HTTPS(基于 TLS 的 HTTP/1.1)
HTTP/1.1

媒体 CDN 默认使用 HTTP/2 (h2) 连接到源站。 HTTP/2 和 HTTPS 都需要有效且受大众信任的 TLS (SSL) 证书。有效证书是指未过期且由公共证书授权机构签署的证书,其主题备用名称与发送到源的主机名相匹配。

备注:

  • 如果您的源站不支持 HTTP/2,您可以明确地将协议(针对每个源站)设置为 HTTP (HTTP/1.1) 或 HTTPS(通过 TLS 的 HTTP/1.1)。
  • 将 HTTPS 或 HTTP/1.1 配置为源站协议时,媒体 CDN 不会协商替代协议(如 HTTP/2)。同样,配置 HTTP/2 时,连接不会回退到 HTTP/1.1,以便明确来源连接行为。
  • 媒体 CDN 会根据协议自动使用正确的端口:端口 80(对于 HTTP)或端口 443(对于 HTTPS 和 HTTP/2)。

源请求标头

在连接到源站时,媒体 CDN 默认使用客户端请求中的 Host 标头。

下表记录了源站在不同配置场景中的传入请求所见的内容:

客户端请求 EdgeCacheService.hostRewrite EdgeCacheOrigin.hostRewrite originAddress 源端的主机标头 /
传输层安全协议 (TLS) SNI
media.example.com backend.example.com media.example.com
media.example.com service.example.com backend.example.com service.example.com
media.example.com origin.example.com backend.example.com origin.example.com
media.example.com service.example.com origin.example.com backend.example.com origin.example.com
media.example.com service.example.com origin.example.com gs://vod-content-bucket 根据存储桶名称自动设置

如果主要来源和任何故障切换来源共享相同的 routeRulehostRewrite 配置,则它们会看到相同的主机标头。

使用 Cloud Storage 存储桶作为来源时,任何 hostRewrite 设置都会被忽略,因为 Cloud Storage 存储桶不支持备用主机标头值。系统会根据存储桶名称自动设置主机标头。

请求(适用于 HTTP/3、HTTP/2 和 HTTPS 请求)中的 TLS SNI(服务器名称指示)值将设置为与发送到源站的主机标头相同的值。

如需了解如何为每条路由的配置重写主机标头,请参阅配置服务路由。如需了解如何设置按源站的替换操作,请参阅无重定向的源站故障切换

故障切换和超时

以下部分介绍了这些配置选项:

  • 超时:确定媒体 CDN 等待多长时间才能连接到您的源站或等待它响应请求。
  • 重试:确定媒体 CDN 是否会在什么条件下向您的源站重试源 HTTP 请求。
  • 故障切换:确定媒体 CDN 是否在第一个故障切换来源不可用时尝试连接到故障切换来源,或返回特定状态代码。

源超时

通过超时,您可以配置何时触发源站重试和故障切换行为,以及何时可以触发后续客户端故障切换。

下面介绍了媒体 CDN 支持的可配置超时:

  • connectTimeoutmaxAttemptsTimeout 限制媒体 CDN 需要多长时间才能找到可用响应。

    这两个超时都包含源站返回标头以及确定是使用故障切换还是重定向所需的时间。connectTimeout 会单独应用于每次源站尝试,而 maxAttemptsTimeout 包括在所有源站尝试(包括故障切换和重定向)中建立连接所需的时间。跟踪重定向会计为额外尝试连接到源站,并计入为所配置源站设置的 maxAttempts

    当媒体 CDN 遇到非重定向响应(例如来自重定向或故障切换源站)时,系统将应用 readTimeoutresponseTimeout 值。重定向的来源使用为遇到重定向的 EdgeCacheOrigin 配置的 connectTimeoutreadTimeoutresponseTimeout 值。

  • responseTimeoutreadTimeout 用于控制流式传输响应所需的时间。在媒体 CDN 确定将使用上游响应后,connectTimeoutmaxAttemptsTimeout 都无关紧要。此时,readTimeoutresponseTimeout 生效。

无论每个 EdgeCacheOrigin 设置的 maxAttempts 如何,媒体 CDN 最多会在所有源站尝试四次。媒体 CDN 使用主 EdgeCacheOrigin 中的 maxAttemptsTimeout 值。每次尝试超时值(connectTimeoutreadTimeoutresponseTimeout)针对每次尝试的 EdgeCacheOrigin 进行配置。

下表介绍了超时字段:

字段 默认 说明
connectTimeout 5 秒

媒体 CDN 从启动请求到源站,直到媒体 CDN 确定响应是否可用为止的最长时间。实际上,connectTimeout 涵盖了从创建请求开始,然后执行 DNS 查找,最后执行 TLS 握手和 TCP/QUIC 连接建立的时间,包括获取包含 HTTP 状态代码的响应标头。

超时值必须介于 1 秒到 15 秒之间。

maxAttemptsTimeout 15 秒

尝试连接到来源(包括故障切换来源)的最大总次数,达到此上限后,系统会向客户端返回错误。如果达到超时限制,系统会先返回 HTTP 504,然后再返回响应。

超时值必须介于 1 秒到 30 秒之间。

此设置定义了所有来源连接尝试(包括故障切换来源)的总时长,以限制客户端必须等待内容开始流式传输的总时长。仅使用第一个 maxAttemptsTimeout 值,其中第一个值由为指定路线配置的出发地定义。

readTimeout 15 秒

单个 HTTP 响应的读取之间等待的最大时长。readTimeoutresponseTimeout 的限制。所有 HTTP 响应读取都必须在 responseTimeout 设置的截止期限之前完成。超时值必须介于 1 秒到 30 秒之间。如果在响应完成之前达到此超时时间,响应将会被截断并记录。

responseTimeout 30 秒

完成回答所允许的最大时长。

超时值必须介于 1 秒到 120 秒之间。

该时长从收到第一个正文字节开始计算。如果在响应完成之前达到此超时时间,响应将会被截断并记录。

请参考以下示例:

  • Origin A 将请求与“/segments/”匹配,并且 maxAttemptsTimeout 值为 5smaxAttempts 值为 1failover_origin 值为 Origin BconnectTimeout 值默认为 5s。如果您尝试连接到 Origin A,但由于 TLS 证书无效,连接在 1 秒内失败,那么您在大约 4 秒内可以成功连接到 Origin B

  • Origin C 用于将请求与“/manifests/*”进行匹配,其 maxAttemptsTimeout 值为 10smaxAttempts 值为 3,并且未配置 failover_originconnectTimeout 值默认为 5s。媒体 CDN 会尝试连接到 Origin C 最多三次,最长需要 10 秒(maxAttemptsTimeout 限制)才能成功连接。

重试源站请求

媒体 CDN 支持源站重试,允许对不成功的源站重试请求。您可以指定在系统尝试运行故障切换来源(如果已配置)之前,可针对当前来源重试多少次。

  • 媒体 CDN 会尝试访问主源,直到配置的 maxAttempts 值(默认值为 1)为止。
  • 媒体 CDN 最多重试三次源站连接,最多尝试三次,之后连接将失败并返回 HTTP 502 Bad Gateway 错误。这包括所有故障切换源站连接,这些连接会计入三个限制。
  • 在配置源站资源时,您可以依次使用 originAddress 字段和可选的 failoverOrigin 来配置主要源站。failoverOrigin 指向另一个源资源。

每个源站的 retryConditions 指定了触发重试的失败类型:

条件 默认 说明
CONNECT_FAILURE ✔️ 失败时重试包括路由、DNS 和 TLS 握手错误和 TCP/UDP 超时。
HTTP_5XX 遇到任何 HTTP 5xx 状态代码时重试。
GATEWAY_ERROR 5xx 类似,但仅适用于状态代码 502503504
RETRIABLE_4XX 针对可重试的 4xx 状态代码(包括 409429)重试。
NOT_FOUND 遇到 HTTP 404 状态代码时重试。
FORBIDDEN 遇到 HTTP 403 状态代码时重试。

如果您需要跨源站进行主动健康检查、轮循或负载感知型导向,可以配置外部应用负载平衡器作为主要源站。

故障切换行为

下表介绍了故障切换的工作原理以及客户端将观察到的响应:

场景 已配置故障切换 面向用户的状态
媒体 CDN 尝试连接到您的源站,但在尝试两次后仍然没有收到 HTTP 响应(默认)。 HTTP 502 Bad Gateway
媒体 CDN 尝试连接到您的主要源站,但未能连接(TLS 握手错误)。系统会尝试访问您配置的故障切换来源,并返回 HTTP 404 错误。 HTTP 404 Not Found
媒体 CDN 尝试同时连接到主要来源和故障切换来源,但未收到 HTTP 状态代码。 HTTP 502 Bad Gateway

如果媒体 CDN 收到与任何已配置的 retryConditions 匹配的状态代码,例如 HTTP 404 Not Found 或 HTTP 429 Too Many Requests 错误,而后续的重试和故障切换源请求仍然失败,则在来源尝试用尽后,系统会向客户端返回 HTTP 502 Bad Gateway 错误。

源站故障切换最佳做法

为故障切换或负载均衡配置多个源站时,请确保源站之间的媒体内容与 VaryETagLast-Modified 标头行为一致。

最佳做法是仅为您信任和控制的来源配置来源重定向。请确保您信任重定向链中的每个源站,因为每个源站都会生成由您的 EdgeCacheService 传送的内容。

后续步骤