一、什么是CDN
CDN的全称是Content Delivery Network,翻译成中文就是内容分发网络。CDN依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取内容,降低网络延迟,提高访问速度,CDN是用来进行加速的,它可以让用户更快获取所需信息。
举个例子,某个网站的服务器在北京,如果深圳的用户想要获取服务器上的数据,就需要跨域很远的距离,由于传输速度和路由转发等因素,就会导致访问速度非常缓慢。但如果我们在深圳建立一个CDN服务器,上面缓存一些服务器数据,那么深圳用户只需要访问这个CDN的服务器就能获取相关内容,这样速度就提升许多。
二、什么是DNS
要了解CDN就要先了解下DNS。当我们在浏览器中输入一个域名时,就能访问对应的站点。但实际情况远比我们看到的复杂,因为计算机不能直接识别域名,所以必须依靠某种环节将域名翻译成IP地址才能识别,这个环节就是DNS。
当我们向DNS服务器发起解析域名的请求时,DNS服务器首先会查询自己的缓存有没有该域名,如果缓存中存在该域名,则可以直接返回IP地址。如果缓存中没有,服务器则以递归的方式层层访问。
例如,我们要访问www.baidu.com ,首先我们先向全球13个根服务器发起请求,询问com域名的地址,然后再向负责com域名的名称服务器发送请求,找到baidu.com ,这样层层递归,最终找到我们需要的IP地址。
三、CDN和DNS的区别
上面我们提到CDN实际上就是提供一个就近访问的功能,但现在有一个问题,我们如何知道用户所在的位置并为其分配最佳的CDN节点尼?这就需要用到DNS服务进行定位了。
当我们使用DNS服务时,可以根据用户使用的递归服务器进行定位。当你给我们看到用户使用的是深圳的递归服务器,那么就认为该用户来自深圳,然后调度服务器,就让该客户去访问深圳的CDN服务器。
但这种调度方式可能存在一个问题,就是用户的实际IP与递归服务器不一致。比如,我是北京联通的用户却使用了深圳电信的递归服务器,那么调度服务器为我分配深圳电信的CDN服务器,就会产生错误的调度。
四、HTTP调度
针对上面的问题,我们还有另一种调度方式-----HTTP调度。
当用户访问服务器时,先分析用户的IP地址,然后服务器给用户返回一个302重定向,将离用户最近的服务器存在缓存中,用户再去请求时就能得到最佳的CDN节点。
这种方式定位更加准确,但缺点是需要增加一次额外的HTTP访问,这样导致首次访问的延时较高。
所以在实际情况中,我们可以将两种方式结合起来,先通过DNS的方式来定位,然后通过HTTP的方式来纠正偏差。
五、缓存的两种方式
CDN节点中缓存了服务器上的部分资源。那么服务器怎么去更新CDN节点的缓存尼?
一种方式,是服务器主动进行缓存的更新,CDN节点被动接受。另一种方式是用户请求的资源不存在时,CDN节点主动放弃请求,更新缓存,然后将数据返给用户。
显然第一种方式存在很多问题,例如很容易产生404等,所以一般采用第二种缓存方式。
六、CDN工作流程
当用户请求一个文件时,CDN的工作流程如下:
1. DNS请求当地DNS
2. 当地DNS递归查询服务器的负载均衡(GSLB)
3. 服务器根据当地DNS分配最佳节点,返回IP
4. 用户获取最佳接入IP,访问最佳节点
5. 如果该节点没有用户想要获取的内容,则通过内部路由访问上一节点,直到找到文件或到达源站为止
6. CDN节点缓存该数据,下次请求该文件时可以直接返回