§ 7.1 · Section

CDN 内容分发

Content Delivery Network · 边缘节点 · 缓存命中 · 就近调度

第 6 章讲完了"最后几百米的空气"——数据从路由器飞到你的手机。这一章换一个方向:数据从网站的机房到你的城市,走了多远?你在深圳点开一个视频秒开,而那家公司的服务器可能远在三千公里外的张家口。你感觉不到距离,不是因为距离消失了,而是因为有人提前把内容搬到了你家门口。干这件事的系统叫 CDN——它支撑着你每天刷的短视频、抢的秒杀、看的直播。这一节就把它讲透:CDN 做的事,一句话概括就是:与其让全国人民都跑总仓提货,不如把货提前铺到每个小区门口的连锁便利店。

生活场景
🛒 双十一零点的秒开,是谁在托底

双十一零点,你掐着表点开一件外套的商品页——图片"唰"地全出来了,详情页往下滑一点不卡。同一秒,全国有几亿人在做同样的事。你有没有想过:这几十张图片,是从哪儿发到你手机上的?

那家电商的主机房大概率在杭州或者张家口。如果每一张商品图都从那里原样发出,那零点的瞬间,机房出口会被挤到瘫痪,新疆用户的图片要在网线里跑三千公里。可现实是:你的图片大概率来自你所在这座城市郊区的某个机房——一个你从没听说过、却离你只有几十公里的地方。这就是这一节的主角每天在做的事。

先把这一节的术语翻译成人话

照例,先把本节的核心名词全部翻译成"人话",每个都能在生活里找到对应物。读完全文回来重看这张表,会有第二次收获。

术语换成大白话生活里对应的东西
CDN(内容分发网络)说白了就是"开在全国每个小区门口的连锁便利店网络"蜜雪冰城 / 全国连锁超市
源站(Origin)说白了就是"真正压货的中央大仓,全系统唯一的总店"品牌工厂总仓
边缘节点(POP)说白了就是"你家门口那家便利店,离你最近的存货点"小区门口的超市门店
缓存(Cache)说白了就是"货架上摆着的现货"便利店的货架
命中(Hit)说白了就是"到店就有货,付钱直接拿走"货架上有你常喝的那瓶水
回源(Miss → Origin Pull)说白了就是"店里断货了,让总仓临时发一件过来"门店帮你从总仓调货
延迟(Latency)说白了就是"一问一答之间花掉的路程时间"快递在路上的时间
TTL(缓存有效期)说白了就是"货架这批货的保质期,到期才换新"面包的出厂保质期
DNS 就近调度说白了就是"导航自动把你带往离你最近的那家门店"地图 App 选最近门店
预热(Prefetch)说白了就是"新品上市前提前把货铺到所有门店"大促前的铺货
动态加速说白了就是"不存货,只给你抄近道的直达专车"不挂靠门店的冷链专线
边缘安全(DDoS 清洗 / WAF)说白了就是"守在小区大门口的保安亭,先检查再放行"小区门岗与安检

一句话串起整节:源站是总仓,节点是门店,缓存是货架,命中是现货直取,回源是临时调货,TTL 是保质期,调度是导航,安全是门岗。下面一个一个说。

为什么"远"是个大问题:光速不讲情面

先看物理。很多人以为网速慢的唯一原因是"带宽不够",其实还有第二个同样硬的约束:延迟——数据在路上花的时间,而这段时间的下限由光速决定,谁也压缩不了。光在真空里每秒跑 30 万公里,但商用光纤里走的信号实际速度大约是每秒 20 万公里(光在玻璃中会变慢,只剩真空的三分之二)。

算一笔账:北京到深圳直线约两千公里,光纤走的是铺设路径,打个折算两千二。单程 11 毫秒,一来一回(你发请求、服务器回数据)约 22 毫秒。听着不多?问题在于:打开一个普通网页要几十次一来一回——先问"你在哪"(DNS 解析),再握手,再逐个拉图片、样式、脚本。每次往返都老老实实花 22 毫秒,叠起来就是一秒开外;如果用户在乌鲁木齐,机房在上海,单程距离逼近四千公里,数字还要再翻一倍。好比你住的小区附近没有超市,买瓶酱油都要开车去市中心总仓——单趟不算慢,架不住一天要跑几十趟。

【延迟的叠加:一次"普通"的页面打开】

  你的浏览器                上海机房
      │── DNS 在哪? ──────────→│      往返 1
      │── 建立连接(三次握手) ──→│      往返 2
      │── 我要 index.html ────→│      往返 3
      │←── 页面骨架 + 又要 40 张图 ──┤
      │── 图1? 图2? 图3? … ───→│      往返 4~44

  每一次往返 = 距离 × 光速的硬开销
  结论:想快,只有两条路——把路修近,或者把货搬过来

修路基本没戏(物理距离摆在那),所以整个行业选择了第二条路:把内容搬到离用户近的地方。这就是 CDN 存在的全部理由。

CDN 的核心思想:把总仓的货,铺到每个小区门口

这个生意模式其实老掉牙了。想象一家连锁超市:总仓负责压货和供货,但顾客从来不直接去总仓买东西——大家去的是家门口的门店,门店卖的是从总仓提前运来的现货。CDN 干的就是同一件事,只不过"货"换成了图片、视频、网页文件,"门店"换成了部署在各个城市的机房。

补一段真实的历史。1998 年,麻省理工学院的两个年轻人被一个数学问题困扰:为什么几百人同时访问一个网站,网站就崩了?他们意识到症结在于所有人都挤在同一个源头提货,于是提出反过来——把内容复制到离用户更近的多台服务器上,让大家分流取货。他们创办的公司叫 Akamai,今天已是全球最大的 CDN 厂商之一,全球部署了数千个边缘节点。这个"全世界的访问都挤总仓"的痛点,催生了价值千亿美元的行业——而它的原理,和你家楼下的连锁便利店一模一样。

这里有个关键角色转换值得单独强调:CDN 出现之前,机房是"生产车间",亲手服务每一个访客;CDN 出现之后,机房退居二线变成"总仓",真正每天见顾客的,是散布在全国各地的边缘节点。网站的形象没变、网址没变,变的是背后那张看不见的仓储网络。

一次"命中"是怎么发生的:导航带你找到最近的门店

那么具体流程是什么?你在浏览器里输入一个图片地址(比如 img.shop.com/shoes.jpg),接下来发生的事按时间顺序拆开看:

注意这套设计的精妙之处:回源不是故障,而是补货机制。每一次回源都会让货架更满一点。热门内容会在几十分钟内铺满全国门店,之后大家全部命中——源站安安稳稳地待在千里之外,几乎感觉不到访问压力。

【没有 CDN vs 有 CDN】

  没有 CDN:                          有 CDN:
                                      (调度:挑离你最近的门店)
  全国用户 ──┐                            你 ──→ 深圳节点 ✔有货 → 秒回
             │                            广州用户 ──→ 广州节点 ✔有货 → 秒回
  全国用户 ──┼──→ 源站(上海)💥挤爆        乌鲁木齐用户 ──→ 乌市节点 ✘没货
             │                                └→ 回源(上海) → 补货 → 返回
  全国用户 ──┘                                (下一个乌市用户开始命中)

命中率:便利店老板的生死线

衡量一个 CDN 干得好不好,最重要的指标叫命中率——一百个顾客上门,多少人是直接拿现货走的。命中率 95% 的门店,只有五个顾客需要等调货;命中率掉到 70%,三成顾客都在门口干等,而且总仓的发货压力一点没省。命中率既是速度问题,也是钱的问题:每一次回源都要消耗源站带宽,而源站带宽是整个系统里最贵的资源之一。

什么东西命中率高?热点内容天然命中率高——首页大图、热播剧集的当红片段、系统更新包,全国人民都在要同一份货,早就在每个门店铺满了。什么东西命中率高不起来?长尾内容——就像图书馆里几十万册藏书,绝大多数一年没几个人借。一万个人各看一部不同的冷门老电影,对 CDN 来说几乎等于一万次回源。所以你会看到视频网站把热门剧优先推上各个节点,而冷门资源常常"第一次打开慢、第二次就快了"——第一次是替全城回的源。

这个指标在站长手里的读法也值得说一句:CDN 后台的报表几乎都会给你一条命中率曲线和一张回源流量榜。命中率连续走低,先别急着加节点——多半是最近新上的内容没配好缓存规则,或者一批"本该静态的内容"被程序加上了随机参数(比如图片地址末尾挂了个时间戳),导致每个请求在节点眼里都成了"不同的货"。后一种情况在自建站里极其常见:参数一变,缓存全废,门店里全是"只卖一次"的孤品。查报表时顺着回源流量榜从高到低看 URL,十有八九能当场逮住元凶。

缓存的规矩:保质期、下架与提前铺货

既然是货架,就得有规矩。CDN 缓存有三条核心规矩,每条都能对应到门店经营:

理解了 TTL,你就理解了互联网上一个经典"灵异事件":站长明明改了首页大图,用户却说看到的还是旧图。多数时候既不是服务器坏了也不是用户眼花,而是节点货架上的旧图还没过保质期。排查思路在后面"自检"一节会给出——先看响应头确认命中状态,再决定刷新,顺序别乱。

哪些货能搬,哪些不能:静态与动态的分界线

CDN 再神,也有搬不动的东西。分界线只有一条:所有人看到的都一样吗?

那动态请求就只能裸奔千里吗?也不是。CDN 对动态请求提供一种"不存货、只抄近道"的服务,业内叫动态加速:内容还是源站现场生成,但请求走 CDN 内部的高速通道——好比你的快递不进任何门店分拣,但从网点直接上了只跑干线的冷链专车,中途不堵不绕。再加上连接复用(专车不空跑返程,回程顺便把响应捎回来),动态页面也能省下不少往返时间。所以一个真实网站往往是"两条腿走路":静态走节点货架,动态走高速直连,浏览器里一次加载其实同时用了两套机制。

视频为什么不卡:切片与自适应码率

CDN 最惊艳的应用是视频。一部两小时的电影动辄几个 GB,如果当成一个大文件从远端完整下载,你要么等半小时,要么边下边看、稍微卡一下就断流。今天的流媒体行业用了两招组合拳解决了它,而且两招都和 CDN 天生一对:

两招合起来,"视频不卡"才真正成立:切片让"就近取货"成为可能,自适应让"路况波动"不再致命,CDN 让"就近"落到几十公里以内。缺任何一环,体验都塌回十年前。顺带解释一个日常困惑:网络直播总有几秒到几十秒延迟,元凶正是切片。主播的画面要先攒出一段几秒的切片、再推上 CDN,观众才能看到——延迟是这套流畅体验的自然代价,和"卡"不是一回事。

削峰:热搜爆点那一小时的缓冲垫

CDN 还有一项容易被低估的本事:替源站挡住瞬间洪峰。想象某明星官宣上热搜,一个平时每秒几千访问的页面,一小时内涌进百倍流量。如果没有缓冲,源站当场过载宕机,热搜变成"404 事故"。而有 CDN 时的画风完全不同:

洪峰先砸在分布全国的几百个边缘节点上——每个节点只承受本地那一小片用户的压力,而且大家要的是同一份静态页,直接命中现货。真正流向源站的回源流量被压到一个很小的数目,甚至可以由 CDN 主动限流:排队放行、合并同类请求(同一秒一百个人要同一张图,就只回源一次)。相当于景区黄金周的限流闸机:门口排队放人进去,核心景点永远只接待承受得住的人数。双十一、春晚红包、突发新闻,每一次都靠这层缓冲垫扛过来的。

值得琢磨的是这套机制和"扩容"的对比。扛洪峰有两条路:一条是把源站机器加一百倍,洪峰过了全闲置——好比为了一年一次的黄金周,把景区停车场修到能停全城的车;另一条就是 CDN 这套"节点分散吸收 + 回源合并限流",平日不花冤枉钱,洪峰来时自动成型。两条路的账根本不用细算:把洪水在几百个路口分掉,永远比把堤坝修到一百米高便宜。

CDN 的另一面:门口的保安亭

既然全国流量都要先经过 CDN,那顺手在门口加一道安检就顺理成章了。现代 CDN 的安全能力有三样值得认识:

这也解释了为什么海外 Cloudflare 的免费套餐能养活无数个人网站:对小型站长而言,CDN 的安全属性往往比加速属性更刚需。

国内格局:CDN 是一门"持牌"生意

一件很多人不知道的事:在中国大陆经营 CDN 业务需要工信部颁发的经营许可证。从 2016 年起,CDN 与云服务一起被纳入持牌管理——想给别人的网站提供分发加速,先拿牌照。今天的国内市场格局大致是三股力量:云厂商系(阿里云、腾讯云、华为云,CDN 打包在云服务里卖)、专业厂商系(网宿这类经营了二十多年的老牌 CDN 公司)、以及面向出海企业的国际厂商(Akamai、Cloudflare、Fastly)。企业选型时牌照合规是硬前提,其次才轮到节点质量、调度精度和价格。

个人站长还应该知道一个现实差异:海外免费 CDN 的节点大多在境外,中国大陆用户访问它,反而可能先绕出海再回来,慢上加慢。所以"白嫖海外免费 CDN 给国内用户加速"这条流传甚广的省钱经,多数时候是个美丽的误会——给谁加速,就用谁家门口的节点。

Analogy · 一张全国连锁便利店地图:把本节所有概念装进一个画面

如果你只记住这一节的一个画面,请记住这个:CDN 就是一张覆盖全国的连锁便利店网络,你每天刷的一切静态内容,都是从离你最近的那家门店取的。

① 源站是中央大仓。网站的机房不再直接面对顾客,它退到幕后专心压货——总仓越清静,整个体系越健康。

② 边缘节点是每个小区门口的门店。导航(就近调度)看你从哪来,把你引向最快到的那家店;三千公里的距离,被缩短成了家门口的五百米。

③ 货架规矩三条。命中是现货直取;回源是断货时替你跑一趟总仓,顺手补货;TTL 是保质期——没到期不换新,所以"改图不生效"先查保质期,再强制下架(刷新),大促前还要连夜铺货(预热)。

④ 两类货两条路。标准商品(静态内容)铺满货架人人可取;千人千面的代办业务(动态内容)没法备货,但可以走不进店的冷链专线(动态加速)抄近道。

⑤ 门店还兼着门岗。洪水在几百个路口被分掉(DDoS 清洗),包裹开箱检查(WAF),总仓门牌永不外泄(隐藏源站)。

这张便利店地图记住了,本节的所有名词就都挂在上面了:总仓供货、门店备货、货架有保质期、热点先铺、长尾现调、动态走专线、门岗拦洪水。

站长视角:接入 CDN 前要过一遍的 Checklist

如果你自己有网站想接入 CDN,别只点"开通"按钮就完事,四件事按顺序过一遍:

动手自检:亲眼看一次"就近调度"

空口无凭,用一条命令验证今天讲的东西。打开命令提示符(Windows 按 Win 键输入 cmd),运行下面这条,看看一个大站会解析到哪些 IP:

看输出的"地址"一栏——它显示的并不是某台"唯一服务器",而是 CDN 就近调度给你的节点入口。最有说服力的玩法:把这条命令发给一个外地的朋友(或用手机流量换网络)跑一遍,对比两边的地址:同一个域名、不同城市,解析出的节点 IP 大概率不一样——这就是"导航带你去最近门店"的现场证据。再进一步,用 curl -I 某网址 看响应头,不少网站会带上类似 X-Cache 的字段,值里写着 HIT(命中)或 MISS(回源)——你亲眼就能看到自己是"现货直取"还是"临时调货"的那一个。响应头里常还有一个 Age 字段,含义特别直白:这份货在门店货架上已经摆了多少秒。连续刷新几次看它增长,你能真真切切地"看着保质期倒数"——第一次访问时 Age 是 0(刚回源补的货),多刷几次它就慢慢涨上去。零成本,一分钟,本节讲的所有机制当场变成你屏幕上跳动的数字。

常见误区:四条流传最广的 CDN 迷信

一句话送给你:三个判断"该不该上 CDN"的抓手

这一节名词不少,但落到决策上,真正值得带走的就三条:第一,看内容构成——图片视频脚本占大头、内容对所有人一样的,CDN 是质变;页面全是千人千面动态内容的,先优化源站再说。第二,看用户分布——用户散布全国的,就近调度价值巨大;用户全在同一座城、源站也在同一座城的,CDN 意义有限。第三,看扛不扛得住突发——有上热搜、上大促可能的,那层削峰缓冲垫和门岗安检,比"快"更救命。好比装修房子先想清楚自己要什么再买建材,而不是看见什么促销囤什么。把这三个抓手记住了,CDN 对你来说就不再是一个神秘缩写,而是一张随时能调用的地图。

Recap · 收束

一句话总结:CDN 是把内容从千里之外的源站,提前铺到离你几十公里的边缘节点的全国连锁系统——用"就近取货"消灭光速距离带来的延迟,用"货架缓存"扛住热点洪峰,顺手还在门口当保安。

机制上记住五件事
· 延迟是硬约束:光速决定了距离没法谈判,一次页面打开几十个来回,远就是慢——所以要把货搬过来。
· 命中与回源:货架有货直接发(命中),没货替你跑总仓顺手补货(回源);热点天然高命中,长尾注定多回源。
· TTL 是双刃剑:保质期带来了速度,也带来"改图不生效"的经典误会——先看响应头,再刷新。
· 静态铺货、动态抄近道:内容对谁都一样的才缓存;千人千面的走动态加速专线。
· 安全是送的:DDoS 清洗、WAF、隐藏源站,流量必经之地天然适合设卡。
· 视频不卡的组合拳:切片让就近取货成为可能,自适应码率让路况波动不再致命,直播延迟正是切片的代价。

下一步:这一节讲的是"内容怎么搬到离用户最近的边缘"。下一节把视角拉回云上:当你的服务器本身也搬进机房集群时,它在云里的"私人领地"怎么规划——虚拟私有云 VPC(子网、安全组、路由表)正是 § 7.2 的故事。

☰ 主页
Xue Hai Wu Ya · Network · § 7.1 · CDN 内容分发