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