一个请求需要经历三个阶段:请求=>处理=>响应,本地缓存、浏览器缓存就是尽量减少请求,使用本地缓存来提高响应速度.如果本地缓存不能够使用,那么我们就必须发起请求到服务器,那么这个请求的过程就涉及到DNS解析,将url解析成IP地址(迭代查询、递归查询),然后发起连接,但是如果同一台服务器接收处理的请求越来越多,服务器的压力就越大,响应的时延可能就会越长,同时由于不同地区的访问时延也不一样(服务器距离),也会影响响应时延.那么这就需要CDN.
CDN(Content Delivery Network)内容分发网络
通过在网络各处放置节点服务器在现有的互联网基础上构建一层智能网络,通过中心平台实时根据网络流量和各节点的连接、负载情况以及到客户端的距离和响应时间等综合信息,将请求重新指向离客户端最近的节点服务器上,以此来尽可能的避开互联网上可能影响数据传输速度和稳定性的环节(分布、带宽、服务器性能等),使内容传输的更快更稳定.
基本原理
CDN的基本原理就是广泛采用各种缓存服务器,将这些缓存服务器分不到用户访问相对集中的区域或网络中,在用户访问时,利用全局负载技术将用户的访问指向距离最近的工作正常的缓存服务器,由缓存服务器直接响应(参考反向代理).CDN的关键技术在于内容存储和分发技术.
CDN层级划分
-
边缘层:CDN系统中,直接面向客户端,负责给客户端提供服务的Cache设备,它们在整个CDN网络中处于边缘位置
-
中心层:负责全局的管理和控制,同时也保存最多的内容Cache.在边缘层未命中缓存时,会向中心层请求,如果中心层也不能命中,就会向源站发起请求.不同的CDN系统中有的中心层可能也会具有为客户端服务的能力,有的可能只是为下一层提供服务
-
区域层:如果CDN系统比较庞大,边缘层向中心层的请求内容太多,就会造成中心层负载压力过大,此时就需要在中心层和边缘层之间设置一个区域层,负责一个区域的管理和控制,也可以提供一些内容Cache供边缘层服务.
-
CNAME: 别名,为一个域名设置别名.URL是IP的名字,CNAME是URL的别名.通过CNAME记录查找URL.
-
回源: 当客户端向CDN节点发起请求时,如果此时没有缓存或者缓存过期,就需要向源站发起请求获取最新数据,这个过程就叫做回源.
CDN缓存
CDN边缘节点的缓存策略因服务商不同而不同,但一般会遵循http的标准协议,通过http响应头中的Cache-Control:max-age=xxx来设置CDN边缘节点的数据缓存时间.
当客户端向CDN节点发起请求时,CDN节点会判断缓存数据是否过期,如果没有过期,则直接将缓存数据返回给客户端,否则CDN节点向源站发起回源请求,从源站获取最新数据,更新节点缓存,并将最新数据返回给客户端.
CDN服务商会提供基于文件后缀、目录多个维度来控制CDN的缓存时间,为用户提供更精细化的缓存管理.
CDN的缓存时间会对“回源率”产生直接的影响,若CDN缓存时间短,CDN边缘节点上的缓存会经常失效,导致频繁回源,增加源站的负载,同时也会加大访问延时;若CDN缓存时间太长,将会带来数据更新不及时的问题.
当客户端向服务器发起请求(CDN)
- DNS解析.由于CDN对域名解析的调整,DNS服务器会根据CNAME将域名解析权交给CDN专用的DNS服务器,即DNS服务器解析域名后返回CDN专用的DNS服务器IP
- 客户端请求CDN专用DNS的服务器获取CDN的负载均衡设备的IP
- 客户端连接负载均衡设备,CDN负载均衡均衡设备,为客户端选择一台合适的服务器提供服务,即返回CDN边缘节点IP(缓存服务器)
- 客户端向cdn节点IP发起请求
- cdn节点根据缓存是否过期,判断是否要从源站获取数据,更新节点缓存
- cdn节点返回请求数据
CDN缓存刷新
CDN节点对开发者是透明的,可以通过CDN服务商提供的“刷新缓存”的接口来达到清理CDN节点缓存的效果,强制使数据过期,从而获得最新的数据.