Google Cloud CDN 配置指南:后端与缓存模式

Cloud CDN 是什么

Google Cloud CDN 借助 Google 遍布全球的边缘网络(GFE)在离用户更近的位置提供内容,为网站和应用提速。它不是一个独立网关,而是与**全球外部应用负载均衡器(External Application Load Balancer)**配合使用:负载均衡器提供前端 IP 与端口,Cloud CDN 负责缓存与分发。因此使用前提是先有一个负载均衡配置,再在启用 CDN 的后端服务上打开缓存。

第一步:配置后端服务

Cloud CDN 的内容可来自多种后端

  • 虚拟机实例组(VM Instance Groups):运行 Web 服务器软件,适合动态与静态混合业务。
  • Cloud Storage 存储桶(后端存储桶):适合纯静态资源、图片、安装包等。
  • 托管实例组、NEG(网络端点组)等。

在负载均衡器的后端服务中勾选 启用 Cloud CDN,即可开始缓存所有可缓存的内容。建议配合 Cloud Armor 安全策略:边缘安全策略作用于 CDN 之前的所有流量,后端安全策略只作用于动态回源请求。

习惯用命令行或做基础设施即代码(IaC)的团队,可以直接用 gcloud 为已有后端服务开启 CDN:

gcloud compute backend-services update BACKEND_SERVICE_NAME \
  --global \
  --enable-cdn \
  --cache-mode=CACHE_ALL_STATIC \
  --default-ttl=3600

这里的 --cache-mode--default-ttl 正是控制台里缓存模式与默认 TTL 的命令行对应物,写 Terraform 或部署脚本时几乎天天用到。

第二步:选择缓存模式

源站通过 HTTP 响应头(如 Cache-Control)指示哪些内容可缓存,你也可以在控制台设置**缓存模式(Cache Mode)**覆盖默认行为:

  • USE_ORIGIN_HEADERS:完全遵循源站响应头,灵活但需要源站配置正确。
  • CACHE_ALL_STATIC:缓存所有静态内容,忽略源站头。
  • FORCE_CACHE_ALL:强制缓存所有内容(包括动态响应),适合已知可安全缓存的接口。

三种模式各有取舍,放到一张表里更直观:

缓存模式 遵循源站头 典型场景 需要注意
USE_ORIGIN_HEADERS 源站 Cache-Control 配置已完善 源站头写错会导致缓存策略失效
CACHE_ALL_STATIC 静态资源 图片、CSS、JS、安装包 动态接口不会被缓存
FORCE_CACHE_ALL 已知可安全缓存的页面与 API 敏感动态内容可能被意外缓存

静态站想快速见效,一般先选 CACHE_ALL_STATIC;接口类内容确认无副作用后再升级为 FORCE_CACHE_ALL。

此外可设置自定义缓存键(是否忽略查询参数、是否按请求头分组)、TTL 覆盖负缓存(对 404 等错误短缓存)等。缓存键的粒度直接决定命中率与数据新鲜度的平衡,例如忽略查询串、同时按 Accept-Language 分组:

gcloud compute backend-services update BACKEND_SERVICE_NAME \
  --global --enable-cdn \
  --cache-key-policy-include-query-string=false \
  --cache-key-policy-include-http-header=Accept-Language

这样同一 URL 的请求可以共享缓存,语言不同的用户又能各自拿到对应版本。缓存命中率相关优化可参考CDN 缓存命中率优化,更系统的策略见CDN 缓存策略

第三步:管理缓存与失效

  • 缓存命中/未命中:命中时 GFE 直接返回缓存;未命中时回源并填充缓存。
  • 失效(Invalidation):内容更新后可在控制台发起失效,也可以按前缀失效单个 URL。
  • 过期与逐出:到期时间决定"过期",缓存空间压力决定"逐出",两者独立影响,热门内容通常更容易留在缓存里。

第四步:配置签名 URL 与签名 Cookie

需要保护私有内容时,可用签名 URL签名 Cookie 限制访问:

  • 签名 URL:给 URL 附加有效期与签名的查询参数,适合临时分享、下载站。
  • 签名 Cookie:适合需要保护整站但用户要登录浏览的场景。
  • 两种方式都支持自定义 URL 前缀、IP 范围、起始/过期时间等约束,可与 Cloud Storage 的私密访问权限配合。

第五步:了解配额与费用

Cloud CDN 按缓存出站流量、缓存填充流量、缓存查找请求等计费,缓存命中率越高成本越低。账户对后端服务数量、失效请求等有配额限制,可到 IAM 与配额页面申请提升。费用与优化思路可参考CDN 成本优化指南

一个真实场景:静态产品站提速

假设你的产品站托管在 Cloud Storage 桶里,资源约 40 MB,访客约六成来自欧美。开启 Cloud CDN 之前,东京、法兰克福的用户每次都要回源到单一区域,首屏图片常常要两三秒才加载完。开启之后,边缘节点命中缓存的区间不再回源,TTFB 通常能压到 100-200 ms,出站流量也由"全量回源"变成"边缘出站",在高命中率配合下,流量账单往往能降一半以上。

这套收益的前提是命中率够高。如果首屏资源被高频变化的参数 URL 拆碎,命中率上不去,思路可以参考前面的缓存命中率优化文章。还有一个常被忽略的点:若回源请求在源站排队,CDN 只是把压力集中到缓存穿透的那一刻,缓存预热与源站扩容同样重要。

适用场景

Cloud CDN 适合已经使用 Google Cloud、希望与负载均衡/Cloud Armor/GKE 一体化的团队;GKE 集群可通过 Ingress 的 BackendConfig 直接开启 Cloud CDN,几乎零额外运维。它的短板是需要先建立负载均衡架构,纯静态小站用起来偏重。选型可参考CDN 服务商选型指南

16IDC 观察

Cloud CDN 的定位是"负载均衡的缓存能力":它把入口、路由、缓存、安全(Cloud Armor)整合在同一个 Google 网络里,适合已经"云原生"的团队。若你的网站跑在普通 VPS 上、只想给静态资源加速,选独立 CDN 接入更轻量。更多内容请查看CDN 加速分类。

参考:Cloud CDN 概览 https://cloud.google.com/cdn/docs/overview · 缓存键 https://cloud.google.com/cdn/docs/caching · 签名 URL https://cloud.google.com/cdn/docs/using-signed-urls
原文来源:https://cloud.google.com/cdn/docs/overview