CDN的英文全称是Content Delivery Network,即内容分发网络。提到CDN的时候,通常会想到网站加速、下载加速等。 本文简单描述CDN原理、智能DNS解析以及CDN中的常见词汇及其含义。
CDN原理
想象一下,一个网站,服务器在北京。在北京(距离近)访问网站响应时间大约20ms,而在广州(距离远)响应时间差不多100ms。 如何让广州的用户也享受10ms的速度呢?
很简单,将服务器上的内容复制一份,存储到广州的服务器,让广州周边的用户访问广州的服务器。同理,如果在全国各地都部署服务器,全国的用户都能享受10ms的速度。
这就是CDN的基本原理:将内容发布到不同的节点上,用户就近访问,提升响应速度。
CDN常见词汇
- 源站:发布内容的原始站点(例子中在北京的服务器),通常接入CDN后不再提供给用户访问。
- CDN节点:又称为缓存服务器(例子中的全国各地服务器),是直接提供给用户访问的服务器。如果用户请求的内容存在缓存中,则直接返回给用户;否则先去源站获取内容,返回给用户,并将内容保存在CDN节点缓存中(下次请求时直接从缓存中读取)。
- 回源:用户请求的内容不在CDN节点缓存中,需要到源站获取。
- 命中缓存:用户请求的内容正好存在CDN节点缓存中,可以直接返回内容给用户,不需要访问源站获取。
CDN优缺点
优点
显然,加速是最大的优势,因此,部分服务商甚至把CDN称作“加速网络”、“网站加速服务”。 除了加速之外,还有以下优势:
- 减少源站宽带压力:将请求分发到各个CDN节点上,源站只需承担回源时的宽带压力。如果使用的是云服务器,可以省去部分昂贵的宽带费用。
- 提升网站静态资源的并发数;
- 隐藏源站IP地址:用户访问网站时,连接到CDN节点,而不是连接到源站。因此,恶意用户无法直接对源站服务器发起攻击,恶意请求将首先到达CDN节点,CDN节点可以拦截部分攻击(例如SYN泛洪)。
缺点
- 对于动态内容加速效果有限:CDN通常用于加速图片、视频、CSS文件等静态资源,而对于动态内容每次访问都需要回源。因此,对于动态内容,接入CDN后可能变得更慢(也可能变快)。
- 如果遇到DDOS攻击,可能产生高额CDN费用。
- 由于访问日志分布在各个CDN节点,获取访问日志会有延迟。
- 网页内容会泄露给CDN提供商,即使是HTTPS加密的请求。
智能DNS解析流程
问题来了:如何让广州的用户访问广州的CDN节点(而不是北京的节点)呢?
通常是通过DNS智能解析来实现,当用户请求解析域名时,DNS服务器对于不同地区的用户,返回就近的CDN节点IP地址。
以域名 www.web-security.cn
为例,通过多个地点在线Ping工具,可以直观地看到,不同地区ping域名得到的IP不一样:
智能DNS解析流程如下:
- 客户端向本地DNS服务器发起域名解析请求;
- 本地DNS经过查询后,发现该域名是一条CNAME记录,该记录由智能DNS服务器负责解析,所以本地DNS服务器需要向智能DNS请求解析该域名(即CNAME记录中的值);
- 智能DNS根据本地DNS的IP地址,选择一个CDN节点,并将CDN节点的IP地址返回给本地DNS;
- 本地DNS返回CDN节点IP给客户端;
- 客户端向指定的CDN节点发起请求;
- CDN节点收到请求后,判断请求的内容是否在缓存中,如果存在则直接将内容返回给客户端(到第8步),否则需要向源站发起请求并将内容缓存起来(第6、7步),再将内容返回给客户端(第8步)。
智能DNS解析实例
仍然以域名 www.web-security.cn
为例,该域名部署在腾讯云CDN。通过dig命令查看DNS解析过程:
dig www.web-security.cn +trace
命令运行后,返回结果中关键的信息如下:
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命令查找该域名:
dig +trace www.web-security.cn.cdn.dnsv1.com.
返回结果:
www.web-security.cn.cdn.dnsv1.com. 600 IN CNAME 1942275.dispatch.spcdntip.com.
仍然是一条CNAME记录,继续dig:
dig +trace 1942275.dispatch.spcdntip.com.
返回结果:
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节点。