# 什么是 CDN
CDN 全称是(Content Delivery NetWork,即内容分发网络。其目的是通过现有的 Internet 中增加一层新的缓存层,将网站的内容发布到最接近用户的网络 边缘 节点,使用户可以就近取得所需的内容,提高用户访问网站的响应速度。从技术上全面解决由于网络带宽小、用户访问量达、网点分布不均等问题,提高用户访问网站的响应速度。
简单来说,CDN 的工作原理就是将您源站的资源缓存岛位于全球各地的 CDN 节点上,用户请求资源时,就近返回节点上缓存的资源,而不需要每个用户的请求都从您的源站获取,避免网络拥塞、缓解源站压力,保证用户访问资源的速度和体验。
CDN 对网络的优化作用主要体现在如下几个方面:
- 解决服务端的 第一公里 的问题
- 缓解甚至消除不同运营商之间互联的瓶颈造成的影响
- 减轻了各省的出口带宽压力
- 缓解了骨干网的压力
- 优化了网上热点内容
# 工作原理
# 传统访问过程
由上图可见,用户访问未使用 CDN 缓存网站的过程:
- 用户输入访问的域名,操作系统向 LocalDNS 查询域名的 IP 地址
- LocalDNS 向 Root DNS 查询域名的授权服务器(这里假设 LocalDNS 的缓存已过期)
- Root DNS 将域名授权 DNS 记录回应给 LocalDNS
- LocalDNS 得到域名授权的记录后,继续向域名授权 DNS 查询域名的 ip 地址
- LocalDNS 将得到的域名 ip 地址返回给客户端
- 用户得到域名IP地址后,访问站点服务器
- 站点服务器响应请求,将请求资源返回给客户端
# CDN 访问过程
通过上图,我们可以了解到,使用了 CDN 缓存后的网站访问过程变更为:
- 用户输入访问的域名,操作系统向 LocalDNS 查询域名的IP地址
- LocalDNS 向 RootDNS 查询域名的授权服务器(这里假设缓存已过期)
- RootDNS 将域名授权 DNS 记录返回给 LocalDNS
- LocalDNS 得到域名的授权记录后,继续向域名授权 DNS 查询域名的IP地址
- 域名授权DNS查询域名记录后(一般是CNAME),回应给 LocalDNS
- 智能调度 DNS 根据一定的算法和策略(比如静态拓扑、容量等)将最合适的 CDN 节点IP地址回应给 LocalDNS
- LocalDNS 得到域名IP地址,返回给客户端
- 客户端得到IP地址后发送请求访问站点服务器
- CDN 节点服务器应答请求,将内容返回给客户端
通过以上的分析,我们可以得到:为了实现对普通用户透明(使用缓存后用户无需进行任何设置)访问,需要使用 DNS(域名解析)来引导用户来访问 Cache 服务器,以实现透明的加速服务。由于用户访问网站的第一步就是域名解析,所以通过修改 DNS 来引导用户访问是最简单有效的方式。
# 组成要素
对于普通的互联网用户,每个 CDN 节点就相当于一个放置在他周围的网站服务器。通过对 DNS 的接管,用户的请求被透明的指向里他最近的节点,节点中的 CDN 服务器会想网站的原始服务器一样,响应用户的请求。由于它离用户最近,所以响应时间也是更快。
从上面的图中我们可以得知虚线圈起来那块就是 CDN层,这层是位于用户端和站点服务器之间。
智能调度 DNS
智能调度 DNS 是 CDN服务中的关键系统,当用户访问加入 CDN 服务的网站时,域名解析请求将最终由 智能调度 DNS 负责处理。它通过一组预先定义好的策略,将当时最接近用户的节点地址提供给用户,使用户可以得到快速的服务。同时它需要与分布在各地的 CDN 节点保持童心,跟踪个节点的健康状态、容量等信息,确保将用户的请求分配到就近可用的节点上。
缓存功能服务
负载均衡设备
内容 Cache 服务器
共享存储
# 名词解释
# CNAME记录(CNAME record)
CNAME 即别名(Canonical Name);可以用来把一个域名解析成另一个域名,当 DNS 系统在查询 CNAME 左边的名称的时候,都会转向 CNAME 右边的名称在进行查询,一直最总到最后的 PTR 或 A名称,成功查询才会做出回应,否则失败。
例如,你有一台服务器上存放了很多资料,你是用 doc.example.com
去访问这些资源,但又希望通过 documents.example.com
也能访问到这些资源,那么你就可以在你的 DNS 解析服务商添加一条 CNAME 记录,将 documents.example.com
指向 doc.example.com
,添加记录之后,所有访问 documents.example.com
的请求都会被转到 doc.example.com
,并得到相同的响应。
# CNAME域名
接入 CDN 时,在 CDN 提供商控制台添加完加速域名后,您会得到一个 CDN 给您分配的 CNAME域名,您需要在您的 DNS 解析服务上添加 CNAME 记录,将自己的加速域名指向这个 CNAME域名,这样该域名的请求才会指向 CDN 的节点,以达到加速效果。
# 回源host
回源host 决定回源请求访问到原站上的具体站点。
例子1:源站是域名源站为
www.a.com
,回源host为www.b.com
,那么实际回源是请求到www.a.com
解析到的IP,对应的主机上的站点www.b.com
例子2:源站是IP源站为
1.1.1.1
,回源host为www.b.com
,那么实际回源的是1.1.1.1
对应的主机上的站点www.b.com
# 协议回源
指回源时使用的协议和客户端访问资源时的协议保持一致,即如果客户端使用 HTTPS 方式请求资源,当CDN节点上未缓存该资源时,节点会使用相同的 HTTPS 方式回源获取资源;同理如果客户端使用 HTTP 协议的请求,CDN节点回源时也使用HTTP协议。