1.简介
CDN加速大家应该都不陌生,至少是有听说过的,其实我们应该每天都会无形中使用到它,大多数比较优秀的互联网公司都会用到它来提高网站的响应速度,比如阿里,腾讯等.CDN是Content Delivery Network的简称,即“内容分发网络”的意思,一般是指网站加速或者用户下载资源加速.
简单来说,CDN相当于一个中间代理,原来我们需要请求某个网址比如www.baidu.com,请求会直接发送至百度的服务器上,假如请求者在新疆,但百度的服务器在北京,这样的话请求和响应都会受距离影响慢一些,但有了CDN后,请求是先发至距离请求IP定位最近的CDN服务器上,该服务器上缓存了www.baidu.com页面上的一些静态文件,比如js,css.html,图片等,这样对请求的发起者来说,获取这些静态资源就比较近了,因此可以起到一定的加速效果.至于动态的资源,因为是可变的,所以无法通过缓存的方式存储在CDN服务器上,仍需要通过CDN去请求对应服务器获取资源,所以CDN加速仅限于静态资源.下图是某CDN第三方在国内部署的CDN节点.
在分布式系统中,CDN可以一定程度的减轻服务器的IO压力,提高响应速度,而且在使用CDN后用户的请求是发送到CDN服务器上的,可以避免用户直接访问源服务器,从而可以一定程度上提高系统安全性,降低被黑客攻击的可能性,类似于保护代理...
但CDN的架设成本比较高,就像快递公司的网点一样,如果需要提高服务效率和质量,需要在全国各个地区都设有网点,而且在人口稠密地区需要架设更多的网点来缓解单个网点的压力,这笔成本可以说是非常高了,所以一般CDN加速都是由专门的第三方大公司去做的,比如阿里,七牛云等,对小公司而言,自己架设成本太高,如果需要CDN加速,直接付费使用第三方提供的即可,价格合理,治理方便,一般第三方会提供详细的使用文档和优质的服务.
2.CDN 的工作原理
CDN网络是在用户和服务器之间增加Cache层,主要是通过接管DNS实现,将用户的请求引导到Cache上获得源服务器的数据。步骤如下:
- 用户输入访问的域名,操作系统向 LocalDns 查询域名的ip地址.
- LocalDns向 ROOT DNS 查询域名的授权服务器(这里假设LocalDns缓存过期)
- ROOT DNS将域名授权dns记录回应给 LocalDns
- LocalDns得到域名的授权dns记录后,继续向域名授权dns查询域名的ip地址
- 域名授权dns 查询域名记录后(一般是CNAME),回应给 LocalDns
- LocalDns 得到域名记录后,向智能调度DNS查询域名的ip地址
- 智能调度DNS 根据一定的算法和策略(比如静态拓扑,容量等),将最适合的CDN节点ip地址回应给 LocalDns
- LocalDns 将得到的域名ip地址,回应给 用户端
- 用户得到域名ip地址后,访问站点服务器
- CDN节点服务器应答请求,将内容返回给客户端.(缓存服务器一方面在本地进行保存,以备以后使用,二方面把获取的数据返回给客户端,完成数据服务过程)
通过以上的分析我们可以得到,为了实现对普通用户透明(使用缓存后用户客户端无需进行任何设置)访问,需要使用DNS(域名解析)来引导用户来访问Cache服务器,以实现透明的加速服务. 由于用户访问网站的第一步就是域名解析,所以通过修改dns来引导用户访问是最简单有效的方式.
CDN网络的组成要素
对于普通的Internet用户,每个CDN节点就相当于一个放置在它周围的网站服务器. 通过对dns的接管,用户的请求被透明地指向离他最近的节点,节点中CDN服务器会像网站的原始服务器一样,响应用户的请求. 由于它离用户更近,因而响应时间必然更快.
从上面图中 虚线圈起来的那块,就是CDN层,这层是位于 用户端 和 站点服务器 之间.
- 智能调度DNS(比如f5的3DNS)
智能调度DNS是CDN服务中的关键系统.当用户访问加入CDN服务的网站时,域名解析