CDN 是怎么把内容搬到你家门口的

你打开一个托管在弗吉尼亚的站点,图片却可能来自天津的某台机器。这篇讲 CDN 的三件事、为什么缓存命中率是唯一重要的指标、边缘节点除了缓存还能干什么,以及 CDN 为什么非要挤进互联网交换中心。

一个站点托管在弗吉尼亚,你在北京打开它,页面里的图片却可能是从天津某台机器发出来的。这不是镜像站,是 CDN —— 内容分发网络。

它做的事说起来很简单:把内容提前搬到离用户近的地方。但真正让它变复杂的,是「提前搬到哪」「怎么知道用户在哪」和「搬错了怎么办」。

机房里的运维人员:边缘节点往往就是这种几十台机器的机柜群

图片来源:Derrick Coetzee,CC0,来自 Wikimedia Commons。

三件事:缓存、就近、回源

CDN 的全部机制可以拆成三个动作:

动作 做什么 关键问题
缓存 把内容存在边缘节点上 存多久、什么时候作废
就近 把用户导向最近的节点 怎么判断「最近」
回源 边缘没有就去源站取 回源会不会把源站打垮

这三件事里,只有第一件是省钱省时间的,后两件是兜底。一个 CDN 好不好,看的就是它的缓存命中率有多高、以及命中不了的时候兜得稳不稳。

缓存命中率是唯一重要的指标

命中率 = 边缘直接响应的请求 / 总请求。这个数字的威力被严重低估:

  • 命中率 90% → 每 100 个请求有 10 个回源;
  • 命中率 99% → 每 100 个请求只有 1 个回源。

看起来只差 9 个百分点,回源流量差了整整 10 倍。而回源流量是要花钱的 —— 它走的是源站带宽,还带着延迟。

命中率上不去,通常是这几个原因:

  1. 缓存键太细。默认的缓存键包含完整 query string,而很多站点会往 URL 上挂一堆跟踪参数(?utm_source=...&gclid=...)。同一个图片在缓存里被存成几十份,每份只被命中一次。解法是配置忽略哪些参数。
  2. TTL 太短。设成 60 秒,等于每 60 秒就要回源一次。静态资源完全可以用内容哈希做文件名,然后设成一年不可变。
  3. Cookie 或 Vary 把它打散。请求带 Cookie 时很多 CDN 默认不回缓存,Vary: User-Agent 更是灾难 —— 每个浏览器版本一份缓存。
  4. 源站没给对响应头。Cache-Control: private 或 no-store 会让 CDN 直接放弃。

反过来,作废(purge)是必须准备的。发版时文件名带哈希就不用管;但一个被误标成长期缓存的 config.json,能让你在发布后半小时里看着旧配置干瞪眼。

配线架:边缘节点到骨干的连接密度,决定了这个节点能承载多少流量

图片来源:Preston Keres / USDA,公有领域,来自 Wikimedia Commons。

边缘不只是缓存

现代 CDN 的边缘节点早就不止做缓存了。它通常是这些角色:

  • TLS 终结:握手在边缘完成,源站只处理明文或一条长连接。证书由 CDN 统一管理,OCSP stapling 也在边缘做;
  • 协议升级:HTTP/3、Brotli 压缩这些都需要两端配合,边缘能比源站更快跟上;
  • WAF 与 Bot 管理:把攻击流量挡在源站之外,这是 CDN 最容易被低估的价值 —— 它同时是抗 DDoS 的第一层;
  • 图片转码:按 Accept 头或 URL 参数在边缘生成 WebP / AVIF 缩略图,源站只存原图;
  • 边缘函数:在节点上跑一小段代码做重写、A/B 测试、鉴权。

把这些都算上,「CDN」这个名字已经不太准确了 —— 它更像是一个离用户最近的代理层。

「就近」是怎么算出来的

两种主流机制,经常一起用:

DNS 调度。 权威 DNS 根据递归解析器的位置返回不同的 IP。简单有效,但有个先天缺陷:递归解析器(比如 8.8.8.8)和真实用户可能隔着半个地球,按解析器的位置调度会指错。于是有了 EDNS Client Subnet —— 解析器把用户网段的前缀带进查询,权威服务器据此返回更准的结果。

Anycast。 同一个 IP 在多个节点上同时宣告,由 BGP 决定流量走哪条路。对用户来说永远是「同一个地址」,实际落点由路由表决定。它天然抗 DDoS(流量被分散)和天然容灾(一个节点挂了,路由收敛到别的节点)。

AMS-IX 的光纤配线架:一个交换中心里挤着几百家网络,互联就在这里发生

图片来源:Fabienne Serriere,CC BY-SA 3.0,来自 Wikimedia Commons。

为什么要挤进交换中心

节点建好了,还得有路走。互联网不是一张均匀的网,网络之间的连接分两种:

  • transit(转接):付费买别人的网络帮你转发,按带宽计费;
  • peering(对等):两家网络免费互换彼此之间的流量。

CDN 的流量绝大部分是「下行给用户」,也就是它发出去的多、收回来的少。这种流量模式在商业上很有优势 —— 运营商愿意免费对等,因为用户想看的内容就在 CDN 里。

而对等谈判发生的物理地点就是互联网交换中心(IX),比如阿姆斯特丹的 AMS-IX、法兰克福的 DE-CIX。一家 CDN 在多少个 IX 里有端口,直接决定了它能免费覆盖多少用户。所以「挤进 IX」不是技术洁癖,是实打实的成本结构。

我的判断

个人站点用 CDN,最容易犯的错是只盯着「加速」。其实对一个小站来说,CDN 更值钱的是另外两件事:

  1. 把源站的 IP 藏起来。源站直接暴露,被扫到就是无止境的爬虫和攻击;
  2. 免费 HTTPS 与抗量。证书自动续期、几百 Gbps 的 DDoS 挡在前面,这些自建要花多少钱多少精力,不用算。

至于真正的「就近加速」—— 如果你的服务器本来就在目标用户所在的国家,收益远没有宣传的那么大。先搞清楚自己在买什么,再决定要不要买。

← 返回文章列表

评论

…