CDN
一、概念
CDN 全称为 “Content Delivery Network”,即内容分发网络。
CDN 是一种特殊的 DNS服务器。
二、原理
当使用域名访问某一个网站时(比如访问 www.baidu.com),分为两步:
- 首先解析出该域名所对应的 IP地址(DNS 域名解析)
- 然后将 Http请求包 路由到 IP地址 所对应的服务器
(注:IP地址和网卡相绑定,一个服务器可以有多个网卡,即可能有多个IP地址)
1、域名解析
域名解析分为两种:
- 将域名解析为IP地址
- 将域名解析为另一个域名(CNAME)
购买一个域名之后,需要去映射一个 IP地址,用 Map 表示:{域名:IP}。
也可以给某域名取一个别名,比如给 www.baidu.com 取一个别名 test.baidu.com,用 Map 表示:{域名:CNAME},这里的CNAME就是别名。
域名解析,实际上就是解析出指定域名所对应的 IP地址,或该域名的一个 CNAME。
没有CNAME的情况:
有CNAME的情况:
特别注意:在有 CNAME 的情况下,CNAME 在域名解析的过程中承担了代理的角色,这是 CDN 实现的关键。
2、资源分类
服务器上的资源分为两种:
- 静态资源:这种资源通常很少变动,比如图片,视频,css,js 等等
- 动态资源:这种资源不同用户不同时刻访问通常是不一样的,比如 ftl,jsp 等等。
(1)集群(动态资源)
在全国各地部署服务器,每个服务器上都有相同的动态资源,并且还需配置相应的数据库,这就涉及到数据同步等问题。这种做法专业一点就是集群,目前集群架构最多是三地五中心,因为全国多地集群成本太高。
(2)CDN服务器(静态资源)
在每个服务器上只部署静态资源是成本较低的方式,因为静态资源通常不涉及数据库,也能提高用户访问速度。
现在有很多 CDN供应商,只要把系统接入并将静态资源传给 CDN服务,这些静态资源将会自动分布到世界各地。
在访问静态资源时,DNS系统 进行域名解析的过程中,如何解析出离用户最近的 IP地址?
这就需要使用 CDN服务器,该服务器知道用户当前所在位置,和用户访问的域名对应哪些 IP地址,及这些 IP地址 分别在哪。
这样,只要用户在通过某域名访问静态资源时,配置自己电脑的 DNS地址 为 CDN专用DNS服务器,就可以解决问题了,但不能要求所有用户都去修改自己电脑的 DNS地址,这时就要利用 DNS 中的 CNAME 了。
3、负载均衡和缓存
(1)负载均衡系统
如果没有返回 IP地址,本地DNS服务器 会向对应的 CDN服务器 再次发送请求,通过 CDN负载均衡系统 进行智能调度:
- 看用户的 IP 地址,查表得知地理位置,找相对最近的边缘节点
- 看用户所在的运营商网络,找相同网络的边缘节点
- 检查边缘节点的负载情况,找负载较轻的节点
- 其他,比如节点的“健康状况”、服务能力、带宽、响应时间等
结合以上因素,得到最合适的边缘节点,并把该节点返回给用户,用户就能就近访问 CDN 的缓存代理。
整体流程如下:

(2)缓存代理
缓存系统是 CDN 的另一个关键组成部分,缓存系统会缓存最常用的资源,有两个衡量 CDN服务质量 的指标:
- 命中率:用户访问的资源恰好在缓存系统里,可直接返回给用户,命中次数与所有访问次数之比
- 回源率:缓存里没有,必须用代理的方式回源站取,回源次数与所有访问次数之比
缓存系统可以划分层次为:一级缓存节点和二级缓存节点,一级缓存直连源站,二级缓存直连用户。
在回源时,二级缓存首先找一级缓存,一级缓存没有才回源站,可有效减少真正的回源。

现在的商业 CDN命中率都在 90% 以上,相当于把源站的服务能力放大了 10 倍以上
补充
域名解析有多种记录类型,最常用的有:
- A记录:一个域名对应一个IP地址
- CNAME:一个域名对应另外一个域名
- NS:将子域名指定其他DNS服务器解析
- Title: CDN
- Author: Gabrielle
- Created at : 2024-10-29 09:15:20
- Updated at : 2025-05-20 10:47:28
- Link: https://zoella-w.github.io/2024/10/29/26-CDN/
- License: This work is licensed under CC BY-NC-SA 4.0.