CDN原理简单理解

CDN的英文全称是Content Delivery Network,即内容分发网络。提到CDN的时候,通常会想到网站加速、下载加速等。
本文简单描述CDN原理、智能DNS解析以及CDN中的常见词汇及其含义。

CDN原理

想象一下,一个网站,服务器在北京。在北京(距离近)访问网站响应时间大约20ms,而在广州(距离远)响应时间差不多100ms。
如何让广州的用户也享受10ms的速度呢?

很简单,将服务器上的内容复制一份,存储到广州的服务器,让广州周边的用户访问广州的服务器。同理,如果在全国各地都部署服务器,全国的用户都能享受10ms的速度。

这就是CDN的基本原理:将内容发布到不同的节点上,用户就近访问,提升响应速度

CDN常见词汇

  1. 源站:发布内容的原始站点(例子中在北京的服务器),通常接入CDN后不再提供给用户访问。
  2. CDN节点:又称为缓存服务器(例子中的全国各地服务器),是直接提供给用户访问的服务器。如果用户请求的内容存在缓存中,则直接返回给用户;否则先去源站获取内容,返回给用户,并将内容保存在CDN节点缓存中(下次请求时直接从缓存中读取)。
  3. 回源:用户请求的内容不在CDN节点缓存中,需要到源站获取。
  4. 命中缓存:用户请求的内容正好存在CDN节点缓存中,可以直接返回内容给用户,不需要访问源站获取。

CDN优缺点

优点

显然,加速是最大的优势,因此,部分服务商甚至把CDN称作“加速网络”、“网站加速服务”。
除了加速之外,还有以下优势:

  1. 减少源站宽带压力:将请求分发到各个CDN节点上,源站只需承担回源时的宽带压力。如果使用的是云服务器,可以省去部分昂贵的宽带费用。
  2. 提升网站静态资源的并发数;
  3. 隐藏源站IP地址:用户访问网站时,连接到CDN节点,而不是连接到源站。因此,恶意用户无法直接对源站服务器发起攻击,恶意请求将首先到达CDN节点,CDN节点可以拦截部分攻击(例如SYN泛洪)。

缺点

  1. 对于动态内容加速效果有限:CDN通常用于加速图片、视频、CSS文件等静态资源,而对于动态内容每次访问都需要回源。因此,对于动态内容,接入CDN后可能变得更慢(也可能变快)。
  2. 如果遇到DDOS攻击,可能产生高额CDN费用。
  3. 由于访问日志分布在各个CDN节点,获取访问日志会有延迟。
  4. 网页内容会泄露给CDN提供商,即使是HTTPS加密的请求。

智能DNS解析流程

问题来了:如何让广州的用户访问广州的CDN节点(而不是北京的节点)呢?

通常是通过DNS智能解析来实现,当用户请求解析域名时,DNS服务器对于不同地区的用户,返回就近的CDN节点IP地址。

以域名 www.web-security.cn为例,通过多个地点在线Ping工具,可以直观地看到,不同地区ping域名得到的IP不一样:

智能DNS解析流程如下:
CDN智能DNS解析流程

  1. 客户端向本地DNS服务器发起域名解析请求;
  2. 本地DNS经过查询后,发现该域名是一条CNAME记录,该记录由智能DNS服务器负责解析,所以本地DNS服务器需要向智能DNS请求解析该域名(即CNAME记录中的值);
  3. 智能DNS根据本地DNS的IP地址,选择一个CDN节点,并将CDN节点的IP地址返回给本地DNS;
  4. 本地DNS返回CDN节点IP给客户端;
  5. 客户端向指定的CDN节点发起请求;
  6. CDN节点收到请求后,判断请求的内容是否在缓存中,如果存在则直接将内容返回给客户端(到第8步),否则需要向源站发起请求并将内容缓存起来(第6、7步),再将内容返回给客户端(第8步)。

智能DNS解析实例

仍然以域名 www.web-security.cn为例,该域名部署在腾讯云CDN。通过dig命令查看DNS解析过程:

1
dig www.web-security.cn +trace

命令运行后,返回结果中关键的信息如下:

1
www.web-security.cn.	600	IN	CNAME	www.web-security.cn.cdn.dnsv1.com.

其中CNAME表示别名记录,即域名www.web-security.cn.指向www.web-security.cn.cdn.dnsv1.com.。继续用dig命令查找该域名:

1
dig +trace www.web-security.cn.cdn.dnsv1.com.

返回结果:

1
www.web-security.cn.cdn.dnsv1.com. 600 IN CNAME	1942275.dispatch.spcdntip.com.

仍然是一条CNAME记录,继续dig:

1
dig +trace 1942275.dispatch.spcdntip.com.

返回结果:

1
2
3
4
5
6
spcdntip.com.		172800	IN	NS	ns-open1.qq.com.
spcdntip.com. 172800 IN NS ns-open2.qq.com.
spcdntip.com. 172800 IN NS ns-open3.qq.com.
......
1942275.dispatch.spcdntip.com. 60 IN A 182.254.52.213
1942275.dispatch.spcdntip.com. 60 IN A 182.254.52.146

重点在这里,前3行表示,域名spcdntip.com.是由DNS服务器ns-open*.qq.com负责解析。即最后两行返回的IP地址(也就是CDN节点的IP),是由DNS服务器ns-open*.qq.com.返回的。

经过测试,在不同地区执行dig +trace 1942275.dispatch.spcdntip.com.,会获得不同的IP。意味着在这一步,智能DNS(ns-open*.qq.com)根据情况选择了不同的CDN节点。