内容分发网络(CDN,Content Distribution Network或Content Delivery Network)
其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输得更快、更稳定。通过在网络各处放置节点服务器所构成的在现有的互联网基础之上的一层智能虚拟网络,CDN系统能够实时地根据网络流量和各节点的连接、负载状况以及到用户的距离和响应时间等综合信息将用户的请求重新导向离用户最近的服务节点上。其目的是使用户可就近取得所需内容,解决 Internet网络拥挤的状况,提高用户访问网站的响应速度。
路由解析
内容分发网络将用户请求路由到它的资源服务器上,其实就是依靠DNS服务器来实现的。DNS域名解析过程如下,
比如查询网站icyfenix.cn
的请求,会发送到本地DNS后,递归查询到能解析icyfenix.cn
的权威DNS服务器,最终将结果返回给浏览器。
我们可以通过dig或者host命令得到DNS服务器的返回结果,以www.baidu.com
为例,如下图,
上图的部分含义如下:
- QUESTION SECTION:表示需要查询的内容,需要查询域名的A记录;
- ANSWER SECTION:表示查询结果,返回A记录的IP地址;
- AUTHORITY SECTION:从某台DNS服务器获取到具体的A记录信息;
- ADDITIONAL SECTION:表示DNS服务器对应的IP地址;
浏览器从本地DNS拿到了IP后,就会把该IP当作源站服务器来进行访问,此时该IP的CDN节点上可能有,也可能没有缓存过源站的资源。最后,经过内容分发后的CDN节点,就有能力代替源站向用户提供所请求的资源了。CDN时序图如下,
内容分发
CDN加速的核心。
缓存节点(CDN节点)必须要有用户想要请求的资源副本,它才可以代替源站来响应用户请求。那这包含两个子问题:
-
- 如何获取源站资源
-
- 如何管理(更新)资源
如何获取源站资源的过程也叫内容分发,目前有两种主流方案:
-
- 主动分发(Push):源站通过HTTP、FTP、P2P传输方式主动推送给CDN缓存节点;
-
- 被动回源(Pull):由用户访问所触发的全自动、双向透明的资源缓存过程。
如何管理资源常见做法是超时被动失效与手工主动失效相结合。
CDN应用
- 加速静态资源;
- 安全防御;
- 协议升级;
- 状态缓存;
- 修改资源;
- 访问控制;
- 注入功能;
注入功能如下国际CDN巨头CloudFlare提供的Google Analytics、PACE、Hardenize等第三方应用,都可以在CDN下做到无需修改源站任何代码即可使用。