Skip to content

静态资源如何加速?

一个大型网站中,真正占用带宽最多的往往不是动态数据,而是:

text
图片
CSS
JS
视频
下载文件

这些资源有一个共同特点:

更新频率低,但访问量极高。

如果所有用户都访问源站服务器,会产生两个问题:

  1. 用户距离服务器太远,访问慢
  2. 所有流量集中到源站,压力巨大

因此互联网行业提出了一个专门解决静态资源访问问题的方案:

CDN(Content Delivery Network,内容分发网络)

一、为什么静态资源访问会慢

假设服务器部署在北京:

text
北京机房

用户来自:

text
上海
广州
成都
美国
欧洲

访问流程:

text
用户

跨运营商网络

北京机房

返回资源

问题在于:

网络距离长

网络传输延迟增加。

网络链路复杂

经过多个路由节点。

跨运营商访问

例如:

text
电信用户
访问
联通机房

速度可能下降。

源站压力大

如果:

text
100万用户

同时访问首页图片:

所有流量都会进入:

text
源站服务器

很容易成为瓶颈。

二、CDN 是什么

CDN 的核心思想非常简单:

不让所有用户都访问源站。

而是:

在全国甚至全球部署大量缓存节点。

例如:

text
北京节点
上海节点
广州节点
成都节点
香港节点

用户访问时:

text
北京用户

北京CDN节点

上海用户

上海CDN节点

而不是:

text
全部访问北京源站

本质上:

CDN 就是:

分布式缓存系统。

只是缓存的对象变成了:

text
静态资源

三、CDN 的工作流程

假设用户访问:

text
https://img.xxx.com/logo.png

流程:

第一步:DNS解析

DNS判断:

text
用户来自上海

返回:

text
上海CDN节点IP

第二步:访问CDN

用户:

text
直接访问上海节点

第三步:检查缓存

如果:

text
logo.png

已经缓存:

text
直接返回

如果没有:

text
CDN

源站

获取资源

缓存

返回用户

这称为:

回源(Back-to-Origin)

四、CDN 为什么能提升性能

核心原因有两个。

1. 缩短访问距离

例如:

原来:

text
上海用户

北京服务器

可能:

text
50ms

现在:

text
上海用户

上海CDN

可能:

text
5ms

延迟大幅降低。

2. 减轻源站压力

例如:

text
100万用户

访问:

text
logo.png

没有 CDN:

text
100万请求

源站

有 CDN:

text
100万请求

CDN

只有少量回源

源站

源站压力大幅下降。

五、CDN 缓存什么内容

文章强调:

CDN 最适合缓存:

静态资源。

例如:

图片

text
jpg
png
gif
webp

前端资源

text
js
css

视频

text
mp4

下载文件

text
apk
zip

这些资源特点:

text
读多写少

甚至:

text
一次上传
长期不变

非常适合缓存。

六、为什么 CDN 不适合缓存动态数据

例如:

用户订单:

text
order_id=1001

用户余额:

text
balance=500

这些数据:

text
实时变化

如果放到 CDN:

可能出现:

text
用户看到旧数据

因此:

CDN 通常用于:

text
静态资源

而:

text
动态数据

仍然交给:

text
Redis
MySQL

处理。

七、CDN 与 Redis 的区别

很多人容易混淆。

其实:

两者都是缓存。

但缓存对象不同。

Redis

缓存:

text
业务数据

例如:

text
用户信息
商品详情
订单数据

位于:

text
服务端内部

CDN

缓存:

text
图片
CSS
JS
视频

位于:

text
用户附近

因此:

可以理解为:

text
CDN
负责静态资源

Redis
负责动态数据

八、CDN 命中率

和 Redis 一样:

CDN 最重要指标也是:

缓存命中率。

例如:

text
100万请求

其中:

text
99万

直接从 CDN 返回:

text
命中率99%

源站只处理:

text
1万请求

命中率越高:

源站压力越小。

九、CDN 的更新问题

缓存带来的经典问题:

资源更新怎么办?

例如:

text
logo.png

更新了。

但:

CDN节点仍然缓存旧版本。

用户看到:

text
旧图片

解决方案:

文件名加版本号

例如:

原来:

text
logo.png

改成:

text
logo_v2.png

或者:

text
logo.png?v=20240601

这样:

CDN认为是新资源。

重新拉取。

这是互联网行业最常见方案。

十、CDN 的本质

文章最核心的一句话:

CDN 本质上是部署在用户附近的大规模分布式缓存系统。

其目标不是提高服务器计算能力。

而是:

text
减少网络传输时间
+
减少源站压力

十一、本章核心脉络

text
静态资源访问量巨大

全部访问源站

网络延迟高
源站压力大

引入CDN

用户访问最近节点

节点缓存静态资源

减少回源

实现加速

十二、一句话总结

CDN 本质上是面向静态资源的分布式缓存网络,通过将图片、CSS、JS、视频等内容缓存到离用户最近的节点,实现“就近访问”,从而降低网络延迟、减少源站压力并提升用户访问体验。它与 Redis 类似都是缓存系统,但 CDN 负责静态资源加速,而 Redis 负责动态业务数据加速。

Released under the MIT License.