浅谈 CDN
CDN 的全称是 Content Delivery Network,中文通常翻译为 “内容分发网络”。
引言:为什么离不开 CDN ?
前端项目中,JS/CSS/ 图片 / 视频等静态资源占比超 80%,这些资源的加载速度直接决定用户体验。
传统 “用户→源站(如下图)” 的访问模式存在两大问题:
- 跨地域延迟高:若源站部署在上海,北京用户访问需经过 3-5 个网络节点,延迟约 50ms;而新疆用户延迟可能达 200ms,导致页面首屏加载慢;
- 源站压力大:秒杀、促销等流量峰值时,大量用户同时请求静态资源,易导致源站带宽耗尽、服务不可用。
CDN (如下图)的核心价值就是 “就近分发 + 缓存加速”,解决上述问题 —— 通过在全球 / 全国部署 “边缘节点”,让用户从最近的节点获取静态资源,同时将资源缓存到边缘节点,减少对源站的请求。
CDN 的工作原理
用户发起请求:浏览器输入 CDN 域名,先查询本地 DNS 缓存;
1. DNS 智能解析(核心):
- 本地 DNS 将请求转发到 CDN 厂商的 DNS 服务器(如 Cloudflare 的 1.1.1.1);
- CDN DNS 根据用户 IP 判断地域(如北京用户),同时查询 “边缘节点负载情况”,返回离用户最近且负载低的节点 IP(如北京大兴节点);
- 👉 这一步决定用户从哪个节点获取资源,直接关联加载延迟(北京节点比上海节点延迟低 40ms)。
2. 边缘节点处理请求:
- 若边缘节点已缓存且未过期,直接将资源返回给用户;
- 若未缓存 / 缓存过期,边缘节点会向 “源站”(如 S3/OSS)发起 “回源请求”,获取资源后缓存到本地,再返回给用户;
- 👉 缓存命中时,资源加载时间从 200ms(直连源站)降至 30ms(边缘节点);首次回源后,后续用户均享受缓存加速。
CDN服务器 VS 源服务器
用一个具体例子来还原两者的配合流程,就能更清晰理解:
1. 源服务器 “生产内容”:运营人员在源服务器上传一张新图片,源服务器存储图片文件,并设置缓存规则(如
Cache-Control: max-age=604800
,缓存 7 天);2. CDN “首次拉取缓存”:北京用户第一次请求这张图片时,因为北京 CDN 节点没有缓存,会 “回源” 向源服务器请求图片;
3. CDN “边缘分发”:源服务器将图片和缓存规则返回给北京 CDN 节点,节点将图片缓存下来;同时,北京用户从就近的 CDN 节点获取图片,加载速度极快;
4. 后续用户 “就近获取”:上海用户再请求这张图片时,直接从上海 CDN 节点获取(节点已缓存),无需再访问源服务器;
5. 内容更新 “源服务器主导”:若运营人员在源服务器删除这张图片,并通过 CDN 控制台 “刷新缓存”,所有 CDN 节点会删除该图片的缓存;下次用户请求时,CDN 会回源发现图片已删除,返回 404。
1. 核心功能:CDN 只 “缓存内容”,不 “复刻业务逻辑”
源服务器的核心功能:是 “生产与存储内容的源头”,不仅负责提供静态资源(图片、JS、CSS),更承担动态业务逻辑(如用户登录、订单处理、数据库交互等)、内容更新(如发布新图片、修改页面数据)等 “创造和管理内容” 的核心职责,是整个服务的 “根”。
而 CDN 服务器完全不具备这些业务逻辑:
- CDN 不会接收用户上传的新图片(上传操作必须回源到源服务器);
- CDN 不会验证图片权限(若图片是私有资源,权限判断仍需源服务器处理,CDN 仅负责传递结果);
- CDN 更不会操作数据库、处理订单 —— 它本质是 “静态内容的临时仓库”,只存 “源服务器已经生成好的内容”,不参与 “内容的创造和管理”。
2. 角色定位:CDN 是 “分发代理”,源服务器是 “内容源头”
源服务器是 “唯一的内容权威来源”—— 所有内容的创建、更新、删除,最终都由源服务器决定;而 CDN 是 “服从源服务器指令的分发网络”,它的所有缓存内容都依赖源服务器的 “供给”,且需遵守源服务器的规则(如缓存过期时间、哪些内容可缓存):
- 当源服务器删除一张图片后,CDN 会在缓存过期后,自动从边缘节点删除这张图片(或通过 “缓存刷新” 指令主动删除);
- 当源服务器修改了缓存策略(如将图片的
max-age
从 7 天改为 1 天),CDN 会在下次回源时遵循新策略,不会 “按自己的规则运行”。
简单说:
源服务器是 “老板”,负责定规则、产内容;
CDN 是 “快递员”,负责把老板的货更快地送到用户家门口,快递员不会复刻老板 “开工厂、管订单” 的功能。