来源概览

借助媒体 CDN,您可以从源站基础架构中提取内容,无论内容是托管在 Google Cloud中、其他云平台中还是本地。

每个配置都可以关联一个或多个来源。源站配置会告知媒体 CDN 如何连接到您的基础架构,何时以及如何进行故障转移、重试和超时,以及在连接时使用什么协议。

来源具有以下特征:

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

来源要求

如需允许媒体 CDN 缓存大于 1 MiB 的源站响应,源站必须在 HEADGET 请求的响应标头中包含以下内容(除非另有规定):

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

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

源站防护

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

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

  1. 深层边缘缓存,用于在服务提供商的网络内传送大部分流量并分流。
  2. Google 的对等互连边缘,可连接到数千个 ISP,充当边缘缓存的中层缓存;如果特定 ISP 中没有边缘缓存,则充当面向用户的缓存。
  3. Google 网络中位于来源之前的长尾缓存,其他下游缓存会从这些缓存中填充内容。这些缓存支持大量扇入,具有充足的缓存存储容量,并充当源防护

此拓扑的概览如下所示:

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

Media CDN 默认使用一组有限的关键全球位置提供源站防护。默认源屏蔽功能根据最终用户的位置(而非源的位置)运行。当最终用户和源服务器位于同一区域时,以及当全球源服务器位于多个区域时,这种方式效果很好,可带来显著的分流优势。

灵活防护

如果您的来源集中在一个区域,但用户分布在全球各地,那么基于用户位置信息的默认来源屏蔽行为可能会在以下方面表现欠佳:

  • 当默认 Shield 位置在地理位置上距离集中式源较远时,增加缓存未命中的延迟时间
  • 通过将缓存填充请求分散到多个全球默认屏蔽位置,而不是集中到单个位置,减少了源站分流

灵活的源屏蔽功能可帮助您克服这些限制,方法是为源屏蔽配置单个特定地理区域,通常选择靠近集中式源的区域。然后,灵活的屏蔽功能会将所有缓存填充请求通过位于配置区域内或附近的屏蔽缓存进行路由。这会通过这些侧重于区域的缓存将负载整合到源服务器。

通过在与集中式源站相同的地理区域中配置灵活防护区域,您可以优化以下方面:

  • Shield 层的缓存命中率
  • 来源分流
  • 缓存未命中和不可缓存内容的延迟时间
  • 性能稳定性

灵活的源站防护功能与媒体 CDN 中配置的任何源站类型兼容。

请求折叠

请求折叠将针对同一缓存键的多个用户发起的缓存填充请求主动折叠为每个边缘节点的一个源站请求。

所有缓存层都支持请求折叠(或合并),以进一步减少源站负载。基于大规模的实际工作负载:

  • 超过 95% 的缓存填充使用区域内的专用长尾缓存节点,以降低缓存填充费用和延迟时间。
  • 来源与 Google 自己的边缘基础设施之间的缓存填充完全通过 Google 的全球专用骨干网进行,这可缩短缓存填充延迟时间并提高可靠性,这两项优势都可有效提升直播工作负载的性能。
  • 缓存会在有利的情况下相互交叉填充,从而进一步降低缓存填充率。
  • 媒体 CDN 在各个缓存中都具有充足的存储容量,即使对于长尾的冷门内容,也能最大限度地降低逐出率。

客户看到的分流率可能因其缓存配置、用户负载、工作负载(例如直播与点播)、用户分布以及他们向不同区域用户提供多少长尾内容(总语料库大小)而异。

源站屏蔽相结合,请求折叠可进一步减少源站负载和出站带宽需求,并且是媒体 CDN 的默认行为。

折叠的请求会记录面向客户端的请求和(折叠的)缓存填充请求。折叠会话的标头用于发出源站填充请求,这意味着源站仅会看到该客户端的标头(包括 User-Agent)。

无法折叠缓存键不同的请求。

来源连接

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

支持的来源和协议

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

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

与源的连接通过安全隧道和 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 配置为源协议时,Media CDN 不会协商替代协议(例如 HTTP/2)。同样,在配置 HTTP/2 时,连接不会回退到 HTTP/1.1,以便明确源连接行为。
  • Media CDN 会根据协议自动使用正确的端口:端口 80(用于 HTTP)或端口 443(用于 HTTPS 和 HTTP/2)。

源站请求标头

连接到源站时,Media 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 请求,以及在什么条件下重试。
  • 故障切换:确定 Media CDN 在第一个源不可用或返回特定状态代码时是否尝试连接到故障切换源。

来源超时

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

以下内容介绍了 Media CDN 支持的可配置超时:

  • connectTimeoutmaxAttemptsTimeout 限制了 Media CDN 查找可用响应的时间。

    这两个超时时间都包括源返回标头以及确定是使用故障切换还是重定向所用的时间。connectTimeout 适用于每次来源尝试,而 maxAttemptsTimeout 包括连接所有来源尝试(包括故障切换和重定向)所需的时间。重定向后,系统会将其视为尝试连接到来源的额外尝试,并计入为配置的来源设置的 maxAttempts

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

  • responseTimeoutreadTimeout 用于控制流式回答的耗时。在媒体 CDN 确定要使用上游响应后,connectTimeoutmaxAttemptsTimeout 都不再重要。此时,readTimeoutresponseTimeout 会生效。

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

下表介绍了超时字段:

字段 默认值 说明
connectTimeout 5 秒

Media 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/*”相匹配,具有 maxAttemptsTimeout10smaxAttempts3,且未配置 failover_originconnectTimeout 值处于默认值 5s。Media CDN 会尝试连接到 Origin C 最多三次,允许最多 10 秒(maxAttemptsTimeout 限制)来成功建立连接。

重试来源请求

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

  • 媒体 CDN 会尝试访问主源站,直到达到配置的 maxAttempts 值(默认值为 1)。
  • 在失败并向用户返回 HTTP 502 Bad Gateway 错误之前,媒体 CDN 最多会重试来源连接三次。这包括任何故障切换源连接,这些连接计入 3 个连接的限制。
  • 配置源资源时,您可以使用 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

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

源故障切换最佳实践

为实现故障切换或负载均衡而配置多个来源时,请验证媒体内容以及 VaryETagLast-Modified 标头行为在各个来源之间是否一致。

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

后续步骤