CDN网络

        CDN,全称Content Delivery Network,即内容分发网络,CDN是构建在网络上的内容分发网络,依靠部署在各地边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能,是用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率,核心技术是内容存储和分发技术。

        那我们用户一般访问一个网站的时候,没有cdn的时候,DNS服务器解析访问网站的域名到ip地址,然后用户请求这个地址,返回所需页面,这里的话,所有的访问请求可能都到了总部服务器,那我们是不是有可以改进的地方呢?比如电商,以前买个东西都是从电商总部仓库送过来,每一单单独配送,你能够收到你的宝贝取决于你离总部仓库的距离,这样的话用户购买的体验是特别的差,尤其现在大家都推崇当日达、次日达的理念下。那电商怎么去改进呢?电商改进了自己的物流系统,在全国各地建立很多仓库,然后利用大数据技术来统计各个地方的订单信息,然后在各个分仓备货,用户订货就根据用户的信息就近仓库发货了,大大提高了用户的购物体验。

        那网络可不可以借鉴就近配送的原理呢?当然是可以的,全球有N个数据中心,在这些数据中心里部署几台机器,形成缓存集群系统来缓存部分数据,那用户访问数据就可以就近访问了,我们称之为边缘节点;边缘节点数目众多,最贴近用户,但是规模小,缓存的数据少,会出现用户无法命中的情况,那边缘节点之上我们就需要部署区域节点,规模比边缘节点更大,缓存数据更多;在区域节点之上就是中心节点,规模更大,缓存数据更多,如果还没有命中,只能回源到网站访问数据了。CDN分发系统的架构如下:

CDN网络_第1张图片

        可以看出CDN系统缓存也是一层一层的,能不访问后端真正的源就不去打扰它。

        那我们就会有问题了,客户端是怎么找到他对应的边缘节点进行访问呢?

这里我们需要了解一个基于DNS的全局负载均衡,此负载均衡主要是选择一个就近的运营商的服务器进行访问。CDN分发网络其实也是一个分部在多个区域,多个运营商的分布式系统,也可以用相同的思路选择最合适的边缘节点。如下就是基于DNS的全局负载架构图:

CDN网络_第2张图片

 

虚线的1----2----3----4----5----6表示没有CDN的情况下客户端访问服务器的情况,我们下面讲有CDN的情况:

  1. 客户端访问www.jd.com网站,如果本地DNS服务器有缓存,直接返回服务器的地址
  2. 如果本地没有,到网站权威的DNS服务器上去查询,
  3. 权威DNS服务器会设置一个CNAME别名,指向www.jd.cdn.com,返回给本地DNS服务器
  4. 本地DNS服务器访问CDN权威DNS服务器,
  5. CDN权威DNS服务器会设置一个CNAME别名,指向CDN全局负载均衡服务器,
  6. 本地DNS服务器访问CDN全局负载均衡服务器来解析www.jd.com域名,
  7. CDN全局负载均衡服务器会根据一定策略选择合适的缓存服务器来提供服务,策略如下
  • 根据客户端的IP地址选择最近
  • 客户端所在的运营商
  • 根据用户携带URL里的内容来选择哪台服务器上有用户所需内容
  • 查询缓存服务器的负载,分配尚有负载能力的服务器提供服务
  1. 客户端根据返回的ip地址进行访问

 

我们知道,CDN缓存的东西可以有很多种,还记得接入缓存架构么?

https://static001.geekbang.org/resource/image/c8/ac/c81af7a52305f7de27e32e34a02d0eac.jpg

        在进入数据中心时,我们希望通过最外层接入层的缓存,将大部分静态资源访问拦在边缘,CDN网络将这些静态资源缓存到离用户更近的数据中心,离客户越近,访问性能越好,时延越低,流媒体我们也大量使用到了CDN。CDN是支持流媒体的,RTMP协议,就相当于一个代理,从上一级缓存读取内容,转发给用户,流媒体都是连续的,可以进行预先缓存策略,也可以预先推送到用户的客户端。

        静态页面上,内容的分发汪汪采取拉取方式,也即当发现未命中时,再去上一级进行拉取,但是流媒体数据量大,如果出现回源,源的压力会比较大,所以往往采取主动推送的方式,将热点数据主动推送到边缘节点。

        CDN也提供了流媒体的预处理服务,也即在分发前,经过一定处理,比如将视频转换为不通码流,适应不通网络宽带用户的需求,或者对视频进行分片压缩,这就是我们看爱奇艺有超清、高清、标清等不通清晰度选择的原因。

        对于常用的TCP连接,公网传输经常会丢失数据导致TCP窗口很小,发送速度上不去,根据TCP的流量控制和拥塞控制原理,我们在CDN加速网路中可以调整TCP的参数,使得TCP可以更加激进的传输数据,也可以通过复用TCP连接,保证每次动态请求到达时,连接建立,不比临时三次TCP握手,减少服务器的压力,也可以对传输数据进行压缩,提高传输效率。

你可能感兴趣的:(网络协议分析)