静态资源如何加速?
一个大型网站中,真正占用带宽最多的往往不是动态数据,而是:
图片
CSS
JS
视频
下载文件这些资源有一个共同特点:
更新频率低,但访问量极高。
如果所有用户都访问源站服务器,会产生两个问题:
- 用户距离服务器太远,访问慢
- 所有流量集中到源站,压力巨大
因此互联网行业提出了一个专门解决静态资源访问问题的方案:
CDN(Content Delivery Network,内容分发网络)
一、为什么静态资源访问会慢
假设服务器部署在北京:
北京机房用户来自:
上海
广州
成都
美国
欧洲访问流程:
用户
↓
跨运营商网络
↓
北京机房
↓
返回资源问题在于:
网络距离长
网络传输延迟增加。
网络链路复杂
经过多个路由节点。
跨运营商访问
例如:
电信用户
访问
联通机房速度可能下降。
源站压力大
如果:
100万用户同时访问首页图片:
所有流量都会进入:
源站服务器很容易成为瓶颈。
二、CDN 是什么
CDN 的核心思想非常简单:
不让所有用户都访问源站。
而是:
在全国甚至全球部署大量缓存节点。
例如:
北京节点
上海节点
广州节点
成都节点
香港节点用户访问时:
北京用户
↓
北京CDN节点
上海用户
↓
上海CDN节点而不是:
全部访问北京源站本质上:
CDN 就是:
分布式缓存系统。
只是缓存的对象变成了:
静态资源三、CDN 的工作流程
假设用户访问:
https://img.xxx.com/logo.png流程:
第一步:DNS解析
DNS判断:
用户来自上海返回:
上海CDN节点IP第二步:访问CDN
用户:
直接访问上海节点第三步:检查缓存
如果:
logo.png已经缓存:
直接返回如果没有:
CDN
↓
源站
↓
获取资源
↓
缓存
↓
返回用户这称为:
回源(Back-to-Origin)
四、CDN 为什么能提升性能
核心原因有两个。
1. 缩短访问距离
例如:
原来:
上海用户
↓
北京服务器可能:
50ms现在:
上海用户
↓
上海CDN可能:
5ms延迟大幅降低。
2. 减轻源站压力
例如:
100万用户访问:
logo.png没有 CDN:
100万请求
↓
源站有 CDN:
100万请求
↓
CDN
只有少量回源
↓
源站源站压力大幅下降。
五、CDN 缓存什么内容
文章强调:
CDN 最适合缓存:
静态资源。
例如:
图片
jpg
png
gif
webp前端资源
js
css视频
mp4下载文件
apk
zip这些资源特点:
读多写少甚至:
一次上传
长期不变非常适合缓存。
六、为什么 CDN 不适合缓存动态数据
例如:
用户订单:
order_id=1001用户余额:
balance=500这些数据:
实时变化如果放到 CDN:
可能出现:
用户看到旧数据因此:
CDN 通常用于:
静态资源而:
动态数据仍然交给:
Redis
MySQL处理。
七、CDN 与 Redis 的区别
很多人容易混淆。
其实:
两者都是缓存。
但缓存对象不同。
Redis
缓存:
业务数据例如:
用户信息
商品详情
订单数据位于:
服务端内部CDN
缓存:
图片
CSS
JS
视频位于:
用户附近因此:
可以理解为:
CDN
负责静态资源
Redis
负责动态数据八、CDN 命中率
和 Redis 一样:
CDN 最重要指标也是:
缓存命中率。
例如:
100万请求其中:
99万直接从 CDN 返回:
命中率99%源站只处理:
1万请求命中率越高:
源站压力越小。
九、CDN 的更新问题
缓存带来的经典问题:
资源更新怎么办?
例如:
logo.png更新了。
但:
CDN节点仍然缓存旧版本。
用户看到:
旧图片解决方案:
文件名加版本号
例如:
原来:
logo.png改成:
logo_v2.png或者:
logo.png?v=20240601这样:
CDN认为是新资源。
重新拉取。
这是互联网行业最常见方案。
十、CDN 的本质
文章最核心的一句话:
CDN 本质上是部署在用户附近的大规模分布式缓存系统。
其目标不是提高服务器计算能力。
而是:
减少网络传输时间
+
减少源站压力十一、本章核心脉络
静态资源访问量巨大
↓
全部访问源站
↓
网络延迟高
源站压力大
↓
引入CDN
↓
用户访问最近节点
↓
节点缓存静态资源
↓
减少回源
↓
实现加速十二、一句话总结
CDN 本质上是面向静态资源的分布式缓存网络,通过将图片、CSS、JS、视频等内容缓存到离用户最近的节点,实现“就近访问”,从而降低网络延迟、减少源站压力并提升用户访问体验。它与 Redis 类似都是缓存系统,但 CDN 负责静态资源加速,而 Redis 负责动态业务数据加速。