CDN 的工作原理是什么?和 DNS 有什么关系?
简化版
CDN(内容分发网络)把网站的静态资源缓存到全国/全球各地的边缘节点上,让用户从离自己最近的节点获取内容,从而降低延迟、加快访问、给源站减负。它和 DNS 的关系是:CDN 靠 DNS 来「就近调度」——你把域名 CNAME 到 CDN,CDN 的智能 DNS 会根据你的位置,返回最近边缘节点的 IP。
详细版
CDN 解决的问题:用户离源站远 → 延迟高、慢。CDN 在各地部署边缘节点,把内容(图片、CSS、JS、视频等)缓存到这些节点,用户就近访问。
接入与调度流程:
- 接入:把你的域名(如
img.example.com)用 CNAME 指向 CDN 提供的域名(如img.example.com.cdn.com); - 调度:用户访问时,DNS 解析走到 CDN 的智能 DNS(GSLB,全局负载均衡),它根据用户的地理位置、网络、节点负载,返回一个最优边缘节点的 IP;
- 命中:用户请求就近的边缘节点:
- 节点有缓存 → 直接返回(快);
- 节点没缓存 → 回源站拉取,缓存到本地后返回,下次就近命中。
所以 CDN = 就近的边缘缓存 + 基于 DNS 的智能调度。
完整版教学
一、CDN 的核心思想:把内容搬到离用户近的地方
访问慢的一个主要原因是物理距离远——用户在广州,源站在北京,数据要跨越大半个中国,延迟高、还容易受中间网络拥塞影响。
CDN 的思路很朴素:与其让用户长途访问源站,不如把内容提前复制一份放到离用户近的地方。它在全国/全球各地部署大量边缘节点,把静态资源缓存上去,用户就近取,延迟自然低。这和「就近开分店,别让顾客都跑总部」是一个道理。
二、CDN 怎么知道该把用户引到哪个节点——靠 DNS
CDN 的「就近调度」不是魔法,正是借助 DNS 实现的,这是它和 DNS 关系的核心:
- 你把域名 CNAME 到 CDN 的域名——于是解析这个域名时,控制权就交到了 CDN 的智能 DNS 手里;
- CDN 的智能 DNS(GSLB)在收到解析请求时,能看到发起解析的本地 DNS 的位置,据此判断用户大概在哪;
- 它综合地理位置、运营商、各节点负载和健康状况,动态返回一个最优边缘节点的 IP;
- 用户于是连到了离自己最近、最通畅的节点。
所以普通 DNS 是「域名→固定 IP」,而 CDN 的智能 DNS 是「域名→因人而异、动态选择的最优节点 IP」。DNS 在这里从「查地址」升级成了「智能调度」。
三、回源与缓存命中
边缘节点是缓存,不是内容的原始来源。请求到边缘节点时:
- 缓存命中:节点本地有这份资源且未过期 → 直接返回,最快;
- 缓存未命中:节点回源(去源站拉取)→ 拿到后缓存在本地 + 返回给用户 → 后续同样的请求就近命中。
所以第一个访问某资源的用户会稍慢(要回源),之后大家都享受就近缓存。CDN 通过缓存把绝大部分请求挡在边缘、不打到源站,既加速又给源站大幅减负——这也是 CDN 能扛住流量洪峰(如大促、热点事件)的原因。
四、CDN 适合缓存什么
- 最适合:静态资源——图片、视频、CSS、JS、字体、下载文件。这些内容不常变,缓存收益最大。
- 动态内容:个性化、实时变化的内容(如用户订单页)不适合直接缓存,但可用动态加速(优化回源链路、就近接入)等技术改善。
实践中常把静态资源放独立域名走 CDN,动态请求走源站,动静分离。
五、常见误区
- ❌ 以为 CDN 和 DNS 无关——CDN 的就近调度正是靠 DNS(CNAME + 智能 DNS/GSLB)实现的。
- ❌ 以为 CDN 存的是「原始内容」——边缘节点是缓存,未命中要回源。
- ❌ 以为 CDN 能缓存一切——最适合静态资源,动态个性化内容需另做处理。
- ❌ 以为接了 CDN 源站就没压力——首次回源、缓存过期回源仍会打到源站,要合理设缓存策略。
六、常见误区与追问
| 考点 | 正确口径 |
|---|---|
| 调度入口 | DNS、HTTPDNS 或 Anycast 把用户引到合适节点 |
| 缓存节点 | 命中则边缘直接返回,未命中再回源 |
| 优化目标 | 降低 RTT、减少源站压力、提高可用性 |
user -> DNS/CDN scheduler
-> edge node near user
cache hit -> return object
cache miss -> origin fetch -> cache -> return
CDN 的核心不是“多放几台机器”,而是调度到近处并把热点内容缓存在边缘。
- 误区:CDN 只对图片有用。 静态文件、下载、视频分片、API 加速和动态加速都可能使用 CDN,只是缓存策略不同。
- 误区:CDN 命中后还会打到源站。 缓存命中通常由边缘节点直接返回,源站不会承受这次请求。
- 误区:TTL 越长越好。 TTL 长能提高命中率,但内容更新变慢;需要结合文件 hash、刷新和预热策略。
- 追问:回源是什么意思? 边缘节点没有缓存或缓存过期时,到源站取资源并按策略保存。
- 追问:CDN 如何选择节点? 常综合用户 IP、运营商、地理位置、节点负载、健康状态和链路质量。
- 追问:动态接口能不能 CDN 加速? 能做传输层和链路优化,但不可随便缓存个性化响应,必须按业务控制缓存键和权限。
七、加强记忆
CDN 把静态资源缓存到各地边缘节点,让用户就近访问、降延迟、给源站减负。它和 DNS 的关系是核心:域名 CNAME 到 CDN 后,由 CDN 的智能 DNS(GSLB)根据用户位置/负载动态返回最近边缘节点的 IP——DNS 从「查固定地址」变成「智能就近调度」。边缘节点是缓存,未命中回源,最适合缓存静态资源。