什么是 cdn
cdn 是建立在网络之上的,通过分布在不同区域的边缘节点服务器群,组成的分布式网络。通过智能调度将用户请求打到最近的服务器节点,提高资源的访问速度,分担源站的压力
用户第一次访问的过程
1. js.abc.com -> js.acbc.com.ali.com
graph LR
客户端 --> DNS服务器
DNS服务器 --> 客户端
客户端访问网站的静态资源,比如 js.abc.com 这个是在域名供应商那里配置的,业务静态资源使用的加速域名,通过在 cdn 服务商配置这个域名,cdn 服务商会给到一个加速域名,比如 js.acbc.com.ali.com。另外在 cdn 服务商那里,还需要配置一个源站域名,比如 abc.com,在静态资源查找不到回源时,可以在这里去找。
另外要到域名供应商那里配置 js.abc.com 域名的 CNAME 记录,值时刚刚提到的 js.acbc.com.ali.com
于是在客户端请求 js.abc.com 这个域名时,会先到 DNS 服务器中找域名解析的记录,找到了这个 CNAME 记录,于是就返回了 js.acbc.com.ali.com 这个 cdn 服务商的加速域名
2. js.acbc.com.ali.com -> xx.xx.xx.xx
graph LR
客户端 --> DNS服务器
DNS服务器 --> 客户端
客户端拿到 cdn 域名 js.acbc.com.ali.com 后,会再去 DNS 服务器请求,DNS 服务器根据 A 记录(域名到ip的映射记录)查询到域名对应的 ip 地址,返回比如 xx.xx.xx.xx
3. 客户端请求 xx.xx.xx.xx/abc.js 到边缘层节点
graph LR
客户端 --> 边缘层节点
边缘层节点分布在 cdn 网络的边缘位置,给用户就近提供服务
4. 边缘层节点请求中心层节点
graph LR
边缘层节点 --> 中心层节点
中心层节点储存着源站信息,还有缓存了各种资源
5. 中心层节点请求源站(业务服务器)
graph LR
中心层节点 --> 源站
最终请求到业务服务器(源站), 比如 abc.com/abc.js 源站返回对应的资源
文件内容一直返回到客户端
graph LR
资源 --> 中心节点 --> 边缘节点 --> 客户端
同一个用户再次访问
graph LR
客户端 --> 边缘层节点
边缘层节点 --> 客户端
客户端请求 js.abc.com/abc.js 因为本地 DNS 客户端有了域名的缓存,因此不需要再请求 DNS 服务器,因为 CDN 边缘层节点有了对应资源的缓存,于是不需要再请求资源
另外一个用户第一次访问
会找到边缘节点,但是不会继续了,因为边缘节点有缓存
就近访问验证
可以使用 dig 命令查询 DNS 解析记录