1、为什么要有网络加速
互联网从逻辑上看是一张大网,但实际上是由许多小网络组成的,这其中就有小网络“互连互通”的问题,典型的就是各个电信运营商的网络,比如国内的电信、联通、移动三大家。
这些小网络内部的沟通很顺畅,但网络之间却只有很少的联通点。如果你在 A 网络,而网 站在 C 网络,那么就必须“跨网”传输,和成千上万的其他用户一起去“挤”连接点 的“独木桥”。而带宽终究是有限的,能抢到多少只能看你的运气。
另外,网络中还存在许多的路由器、网关,数据每经过一个节点,都要停顿一下,在二层、 三层解析转发,这也会消耗一定的时间,带来延迟。
最终结果就是,如果仅用现有的 HTTP 传输方式,大多数网站都会访问速度缓慢、用户体 验糟糕。
放到全球来看,物理距离非常大,你在北京,访问旧金山的网站,要跨越半个地球,地理位置距离远、运营商网络、路由转发的影响就会成倍增加。
2、什么是CDN?
CDN (全称 Content Delivery Network),即内容分发网络。
CDN构建在现有网络基础之上的智能虚拟网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。
CDN 的关键技术主要有内容存储和分发技术,简单来讲,CDN就是根据用户位置分配最近的资源,于是,用户在上网的时候不用直接访问源站,而是访问离他“最近的”一个 CDN 节点(也叫做“边缘节点”、edge node),其实就是缓存了源站内容的代理服务器。
3、CDN的分发系统架构
全球有这么多的数据中心,无论在哪里上网,临近不远的地方基本上都有数据中心。是不是可以在这些数据中心里部署几台机器,形成一个缓存的集群来缓存部分数据,那么用户访问数据的时候,就可以就近访问了呢?
当然是可以的。这些分布在各个地方的各个数据中心的节点,术语叫“边缘节点”(edge node)。
由于边缘节点数目比较多,但是每个集群规模比较小,不可能缓存下来所有东西,因而可能无法命中, 这样就会在边缘节点之上。有区域节点,规模就要更大,缓存的数据会更多,命中的概率也就更大。在区域节点之上是中心节点,规模更大,缓存数据更多。如果还不命中,就只好回源网站访问了。
这就是CDN的分发系统的架构。CDN系统的缓存,也是一层一层的,能不访问后端真正的源,就不打扰它。这也是电商网站物流系统的思路,北京局找不到,找华北局,华北局找不到,再找北方局。
4、CDN的特点
1.CDN 的最核心原则是“就近访问”,如果用户能够在本地几十公里的距离之内获取到数据,那么时延就基本上变成 0 了。所以 CDN 厂商 投入了大笔资金,在全国、乃至全球的各个大枢纽城市都建立了机房,部署了大量拥有高存储高带宽的节点,构建了一个专用网络。
2.有了这个高速专用网,CDN就要分发源站的内容,利用缓存代理技术,把源站内容逐级缓存到网络的每一个节点上,这样用户上网就不用直接访问源站,而是访问离他“最近的”一个 CDN 节点,其实就是缓存了源站内容的代理服务器,这样一来就省去了“长途跋涉”的时间成本,实现了“网络加速”。
3.那么,CDN 都能加速什么样的“内容”呢? 静态资源,而不是动态资源。
在 CDN 领域里,“内容”其实就是 HTTP 协议里的“静态资源”,比如超文本、图片、视频、应用程序安装包等等。
5、CDN的原理
内容分发网络(Content Delivery Network, CDN)其目的是通过在现有的Internet中增加一层新的网络架构,将网站的内容发布到最接近用户的网络"边缘",使用户可以就近取得所需的内容,解决Internet网络拥塞状况,提高用户访问网站的响应速度。
从技术上全面解决由于网络带宽小、用户访问量大、网点分布不均等原因所造成的用户访问网站响应速度慢的问题。
6、CDN网络的组成
一个CDN网络主要由以下几部分组成:内容缓存设备、内容分发管理设备、本地负载均衡交换机、GSLB设备和CDN管理系统,其网络结构如下图所示:
其中:
内容缓存设备Cache:
用于缓存内容实体和对缓存内容进行组织和管理。当有用户访问该客户内容时,直接由各缓存服务器响应用户的请求。
内容分发管理设备:
主要负责核心Web服务器内容到CDN网络内缓存设备的内容推送、删除、校验以及内容的管理、同步。
GSLB设备:
则实现CDN全网各缓存节点之间的资源负载均衡,它与各节点的SLB设备保持通信,搜集各节点缓存设备的健康状态、性能、负载等,自动将用户指引到位于其地理区域中的最近服务器或者引导用户离开拥挤的网络和服务器。还可以通过使用多站点的内容和服务来提高容错性和可用性,防止因本地网或区域网络中断、断电或自然灾害而导致的故障。(不用CDN技术时,使用GSLB设备可以为用户选择最合适的服务器,但受Web服务器的负荷和传输距离等因素的影响,响应速度依然经常不能满足用户的需求。这一问题的解决方案就是在传输网络上利用缓存技术使得Web服务数据流能够就近访问。内容分发网络(CDN)正是这种思想的一个实现,CDN使用GSLB设备将用户引导到最合适的缓存节点(距离近,负载低),使得用户在访问静态内容时获得更好的体验。)
CDN管理系统:
实现对全网设备的管理,对系统的配置。它不仅能对系统中的各个设备进行实时监控,对各种故障产生相应的告警,还能实时观测到系统中总的流量以及各节点的流量,并保存在系统的数据库中,作为统计分析的基础数据,并对日志文件进行管理、报告,作为计费的基础数据。
6、CDN工作流程
CDN网络结合了GSLB与缓存技术,其工作流程如下图所示:
用户访问某个站点的内容时,若该站点使用了CDN网络,则在用户会在域名解析时获得CDN网络GSLB设备的IP地址。GSLB设备根据其预设的选择策略(如,地理区域、用户时间等)为用户选择最合适的内容缓存节点,并且使用某种方式(如,基于DNS、基于HTTP重定向、基于IP欺骗的方式等)导引用户访问所选的内容缓存节点。
用户继续向缓存节点发出请求,若缓存中包含请求的内容,则直接返回给用户,否则从核心Web服务器中获取该内容,缓存后返回给用户。这样当用户再次访问相同内容或其他用户访问相同内容时,可以直接从缓存中读取,提高了效率。
在没有应用CDN时,我们使用域名访问某一个站点时的路径为:
用户提交域名→浏览器对域名进行解释→DNS 解析得到目的主机的IP地址→根据IP地址访问发出请求→得到请求数据并回复
应用CDN后,DNS 返回的不再是 IP 地址,而是一个CNAME(Canonical Name ) 别名记录,指向 CDN的全局负载均衡 GSLB, GSLB实际上在域名解析的过程中承担了中间人(或者说代理)的角色,这是CDN实现的关键
7、CDN的全局负载均衡 GSLB
由于没有返回IP地址,于是本地DNS会向负载均衡系统再发送请求 ,则进入到CDN的全局负载均衡系统GSLB 进行智能调度:
-
看用户的 IP 地址,查表得知地理位置,找相对最近的边缘节点
-
看用户所在的运营商网络,找相同网络的边缘节点
-
检查边缘节点的负载情况,找负载较轻的节点
-
其他,比如节点的“健康状况”、服务能力、带宽、响应时间等
结合上面的因素,得到最合适的边缘节点,然后把这个节点返回给用户,用户就能够就近访问CDN的缓存代理
8、CDN工作流程的一个示例图解
这个负载均衡主要用来选择一个就近的同样运营商的服务器进行访问。你会发现,CDN分发网络也是一个分布在多个区域、多个运营商的分布式系统,也可以用相同的思路选择最合适的边缘节点。
下图,是CDN工作流程的一个示例:
在没有CDN的情况下,用户向浏览器输入www.web.com
这个域名,客户端访问本地DNS服务器的时候,如果本地DNS服务器有缓存,则返回网站的地址;如果没有,递归查询到网站的权威DNS服务器,这个权威DNS服务器是负责web.com的,它会返回网站的IP地址。
本地DNS服务器缓存下IP 地址,将IP地址返回,然后客户端直接访问这个IP地址,就访问到了这个网站。
然而有了 CDN之后,情况发生了变化。
在web.com这个权威DNS服务器上,会设置一个CNAME别名,指向另外一个域名www.web.cdn.com
,返回给本地DNS服务器。
当本地DNS服务器拿到这个新的域名时,需要继续解析这个新的域名。这个时候,再访问的就不是 web.com 的权威DNS服务器了,而是web.cdn.com的权威DNS服务器,这是CDN自己的权威 DNS 服务器。在这个服务器上,还是会设置一个CNAME,指向另外一个域名,也即CDN网络的全局负载均衡器。
接下来,本地DNS服务器去请求CDN的全局负载均衡器解析域名,全局负载均衡器会为用户选择一台合适的缓存服务器提供服务,选择的依据包括:
- 根据用户IP地址,判断哪一台服务器距用户最近;
- 用户所处的运营商;
- 根据用户所请求的URL中携带的内容名称,判断哪一台服务器上有用户所需的内容;
- 查询各个服务器当前的负载情况,判断哪一台服务器尚有服务能力。
基于以上这些条件,进行综合分析之后,全局负载均衡器会返回一台缓存服务器的IP地址。
本地DNS服务器缓存这个IP地址,然后将IP返回给客户端,客户端去访问这个边缘节点,下载资源。 缓存服务器响应用户请求,将用户所需内容传送到用户终端。如果这台缓存服务器上并没有用户想要的内容,那么这台服务器就要向它的上一级缓存服务器请求内容,直至追溯到网站的源服务器将内容拉到本地。