CDN加速:让内容离用户更近

在互联网+时代,人民越来越依赖互联网获取信息,生活服务,娱乐等。流畅的用户访问体验是所有互联网产品获得用户认可和长期发展的基本前提。但如今网页中包含的元素也越来越丰富,有大量的图片、Flash、动画等内容,文件下载的数据量也在飞速上升,加上网络游戏,网络视频,直播等需要高带宽的业务蓬勃发展,对服务器和网络带宽的压力越来越大。21世纪是讲究效率的时代,唯快不破,互联网领域还存在着一个八秒定律,指用户访问一个网站时, 如果等待网页打开的时间超过8秒,会有超过70%的用户放弃等待。网站访问速度的快慢给予用户体验不同,直接影响用户的忠诚度。当用户体量越来越大,且地理位置相对分散,用户体验与安全要求又很高时,内容提供商面临着以下几个问题:

1) 服务器集中,用户分散,存在长距离传输时延问题

2) 访问量越来越大,服务器压力越大越大,采购成本变高

3) 请求的数据量越来越大,带宽被迅速消耗掉,存在传送瓶颈

4) 网络只负责数据包端到端传输,不会进行传输优化,传输质量得不到保障


CDN的产生与上面分析的一系列问题息息相关,CDN加速作为缓解互联网络拥塞、提高网络业务响应速度、改善用户体验的重要手段,已成为互联网基础设施中的重要组成部分。CDN的全称是Content Delivery Network,即内容分发网络,其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定。CDN加速设计目标就是让内容离用户更近,访问速度更快,用户体验更好。本文介绍CDN加速的关键技术,希望能帮助读者对CDN加速技术有个初步了解。


那么CDN是如何工作的呢?先看看没有CDN服务时一个网站是如何向用户提供服务的。现在的网站系统基本上都是基于B/S架构,即Browser-Server(浏览器/服务器)架构。在这种架构下,用户只需使用通用浏览器在地址栏中输入要访问资源的URL地址,就可以获得相应的资源。以下是一个简化的互联网访问流程图:

870b532103c7a166bc2c195d714151eeac2e2f16


1) 用户在浏览器中输入URL地址

2) 浏览器请求DNS服务器对该域名进行解析

3) DNS服务器返回网站服务器的IP地址

4) 浏览器向服务器请求内容。

5) 服务器将用户请求内容传送给浏览器。


那么这个请求需要多长的时间呢?使用HttpWatch工具抓一个页面的访问时间,如下图所示:

  82711f4fda45b56cb441742eac5532fa6706442b


上图中每一行是一个网页对象的加载,页面的加载时间则是该页面第一个对象发出请求到收到最后一个对象中间花费的时间。如下图所示:


5a431bad0437450fd299005bac19c27d0d7de95b



每个对象都有自己的加载时间,每个对象的加载时间=请求从客户端到服务器的网络时间+服务器收到请求处理后产生回复的时间+回复从服务器返回到客户端的时间。从这里可以看到,影响一个页面加载速度有两个因素:网络时间,服务器时间。


在复杂的互联网上,从用户到网站服务器之间要经过用户所在接入网、用户所在城域网、全国各大城市的多路(电信、联通、移动、教育)骨干网络, 网站所在IDC等,如下图所示:

995a80a07cf2d25408fd9b5637f16d9285097bb3


如果访问者和服务器之间的距离较远,它们之间的通信需要经过重重的路由转发和处理,网络延误不可避免。访问量越大,请求的内容越多,服务器的压力越来越大,带宽也被迅速消耗掉,用户的请求返回就会越来越慢。而且骨干网之间的连接需要转接,就会出现如果服务器在网通,电信用户访问很慢,如果服务器在电信,网通用户访问又很慢的情况。而CDN的出现很好的解决了这些问题。如下图所示:

c4a3c24a994c55b96abb49b30bab5ce8943b2dd9

在使用CDN模式时,用户在请求资源并不直接到网站服务器上获取,而是先在最近的CDN节点上查找是否有该资源,如果CDN节点上有则直接获取,而不再需要经过重重的路由转发和网络到远端的服务器上获取。由于CDN加速将大部分请求在最近的CDN节点完成,不仅可以减少网络时间,还可以解决跨越不同的基础运营商导致的延迟问题,而且CDN节点处理了部分请求,对服务器的请求量进行了分流,服务器性能提高处理时间也可以减少,有效地提高了网站的访问速度。由于CDN节点代替源服务器,隐藏源网站IP,降低网络攻击对网站的影响,还可以提高网站的安全性。下图为引入CDN后的典型用户访问流程:


2f9820bc97ac6c258ffe356472bc255af3cee033


从上图可以看到CDN加速的两个关键技术:


内容存储:用户请求的静态资源被缓存在CDN服务器上,用户请求直接在离自己最近的CDN节点上读取,也称内容缓存加速。

分发技术:通过动态域名解析做全局流量调度,用户的请求被分配到离自己最近的服务器,也称链路加速。


内容缓存加速

在因特网上浏览时看到的每一个页面,称为网页,很多网页组成一个网站。每个网页由不同的网页元素组成,网页元素包括文字、图片、音频、动画、视频等。假设页面由1个基本HTML文件和9个JPEG图像构成,用户每请求一次这个web页面,就会产生10个http请求发给服务器处理。受服务器硬件资源的限制,服务器能处理的请求数是有限的,当服务器超载时,就会出现请求排队的情况。这时可以选择进行系统纵向扩展,即换更快的CPU,加更大的内存,换更大的存储,但这种扩展方式有自然的上限。随着业务的发展,PV(页面的访问次数)大量增长,这时可以通过采购新的服务器进行横向扩展来提高网站的处理能力和购买更快的带宽来提高网络负载能力,但同时也提高了资源采购成本。


而CDN的内容存储则将系统中相对静态的页面(例如一两天才会有更新的页面)进行缓存,用户首次请求,CDN从原站抓取后缓存,再次访问如果没有过期,则CDN边缘节点直接响应用户请求。一般情况下,CDN节点可以分担50%到70%的到原始网站重复访问数据量,而不需访问原始服务器,可以减少对服务器的压力,同时也减轻网络带宽使用,节省了许多的网络时间,有效地提高了访问速度。


基于不同内容承载类型的CDN缓存方式

前面讲过每个网页由不同的网页元素组成,网页元素包括文字、图片、音频、动画、视频等,在进行内容缓存加速时,根据不同的内容,采用的是不同的缓存方式,主要分为以下六种:


网页加载

适用小文件的场景,如网页上有各种元素,HTML、CSS、JavaScript、图片等,这些网页元素的平均大小基本都在1M以下,有些可能只有几KB,几十KB。在此应用场景下,CDN节点同时实现链路加速和缓存加速。

84dcfe7422db3ed6ead4d8ae4731f1010cdf273a

下载加速

适用大型文件的场景,如安桌的APK应用包,iOS的IPA应用包,网络游戏的安装包,下载的gz,zip,tar等文件。因为文件比较大,有些文件的大小可能是几百M,几G时或更大,传输的时间相对会比较长,极难在一次请求中完成下载。如果中途断开了,将前功尽弃,又要重新传输, 重试的成本高。相比小文件,大文件的传输有很大的稳定性问题。这时可以将文件按照一定的大小,分成若干个数据块,CDN节点分成多次请求回源,按顺序每次下载固定大小的数据块,并立即返回给客户端。如果中途断开了也能从某个失败的数据块开始继续下载。

77c848ce097870cb772c003931612c936cbd16c5

当文件大于几百M,几G时,如果为每个数据包的传送创建一个连接,就会有大量的建立/释放连接的开销,而长连接方式则可以让一个大文件分片传送时只创建一个连接,每传完一个分片就重置keepalive_timout,重新计时,这样更高效,性能更高。TCP的长连接与短连接,如下图所示:


9fffad99eea2ad4aa790048884428a495d4ff562

音视频

在线使用的音视频文件采用的是流式传输方式,将整个A/V及3D等多媒体文件经过特殊的压缩方式分成一个个压缩包,由视频服务器向用户计算机连续、实时传送。用户不必采用像下载方式那样等到整个文件全部下载完毕才能观看,而只需经过几秒或几十秒的启动延时即可在用户的计算机上利用解压设备对压缩的A/V、3D等多媒体文件解压后进行播放和观看。虽然音视频文件也是大文件,但其文件结构和应用形态写安装包之类完全不同,如果使用网页加速的方式会出现卡画面现象,如果使用下载加速,顺序播放通宵没有问题,一旦拖拽进度条则可能会卡顿,等待。为了解决拖拽播放需求,需要解析进度条时刻对应的数据块,单独的,有序的重新下载。

de66802c175c92919165ff0e764ae9ca017cd753

在观看视频时可以看到进度条分三种颜色,分别表示已加载的,已缓存的,未缓存加载的。

b1d4db676cf1577a11cb8453800b54fbe0e89f52

原视频文件以内容类别、版本等为索引按片段存放在服务器上,用户端加载的第一个包里保存的是元数据,视频每25帧会有一个关键帧,元数据里包含这些视频帧序列,时间长度、码率、采样频率等信息。在观看时并不需要等到视频全部加载完,当需要跳着看视频时,即使前面的内容还未加载完,也可以从新起点进行加载,通过视频帧的索引信息找到该视频帧,先加载新起,会点前后的视频帧,因为视频帧非常少,所以跳着看也不会卡。


动态资源

某些页面,如论坛,邮箱应用等,需要动态生成(访问数据库+页面渲染),每次请求的数据都不一样,通常无法将结果缓存下来。如一个论坛的帖子,这次请求可能盖了10层楼,下次请示可能就是20层楼了。因为每次的内容都不一样,要与后端的数据库做交互,不能在CDN缓存节点取到相应的数据,只能将请求发送到从源站获取。针对这种数据,CDN节点会将每次请求穿透回源站上,此时应用的是链路加速,将请求通过最短的链路发送到服务器站,从而提高访问速度。

2cec1375f44e1b75bee5d1350d6047dd3cff076d

流媒体直播

直播处理的是流媒体数据,而不是成形的,单独的,可反复访问的单一文件,故没必要缓存所有数据。通宵而言,CDN节点使用长连接,不停从源站拉取最新画面帧数据,并缓存一小段(3-5秒),超时过后即删除过期数据,同时缓存新数据。直播客户端获取到的,并不是一个完整的数据流,有头没尾,不可以快进/回退,缓存的数据消费了就删除。在服务器端将直播数据流存储为连续的、很短时长的媒体文件(MPEG-TS格式),而客户端则不断的下载并播放这些小文件,因为服务器端总是会将最新的直播数据生成新的小文件,这样客户端只要不停的按顺序播放从服务器获取到的文件,就实现了直播。直播的分段策略基本上推荐是10秒一个分片,为了缓存等方面的原因,在索引文件中会保留最新的三个分片地址,以类似“滑动窗口”的形式,进行更新。m3u8,是直播的索引文件。包含第一个TS分片的序列号,每个分片TS的最大的时长,m3u8文件结束符,分片TS的信息,如时长,带宽等。

91416e3c1d2337be23423b03bd13bb778edc597b

链路加速

用户和网站服务器中间通过全国各大城市的多路(电信、联通、移动、教育)骨干网络内部连接、骨干网间互联和骨干网与互联网互联互通,它们之间的通信需要经过重重的路由转发和处理,网络延误不可避免。有别于传统的互联网性能改善方案(如增加接入带宽、升级软硬件和建立多个镜像站点),CDN是通过在现有的Internet中增加一层新的网络架构,将网站的内容发布到最接近用户的网络“边缘”,使用户可以就近取得所需的内容,从而解决Internet网络拥挤的状况,提高用户访问网站的响应速度。当Web用户点击一个可以内容分发的URL,内容分发网络实时地根据网络流量和各节点的连接、负载状况以及到用户的距离和响应时间等信息,将用户请求重定向到离用户最近的内容服务器。CDN节点解决了跨运营商和跨地域访问的问题,访问延时大大降低。

195690e4cf3fb6daed1a532b620df39e73f07ef5

CDN分发的工作流程:

1.用户向浏览器提供要访问的域名;

2.浏览器调用域名解析库对域名进行解析,由于CDN对域名解析过程进行了调整,所以解析函数库一般得到的是该域名对应的CNAME记录

3.浏览器需要再次对获得的CNAME域名进行解析

4.确定离用户最近的CDN节点,将解析的IP地址返回给用户

5.最近的CDN节点响应用户的请求的内容


流程图如下:


7d4688fd436eb100d51275222b0189eb1f61bb66


CDN服务的发展

目前,从主流的CDN运营商来看,至少都可提供十几种到二十多种基础服务和产品,比如某些CDN擅长分发图片等小文件,而另一些则擅长分发大文件,那么选择一家合理的CDN服务是首要要考虑的问题。比如视频相对web内容对CDN基础设施的负荷完全不同的要求,则不能选择只能满足小型web项目的CDN,需要选择适合视频的CDN服务。传统CDN厂商中被分门别类分别用以支持不同的CDN服务,前面讲要根据不同的承载内容选择不同的CDN服务商,如果业务复杂,且为了避免单点故障,可能会用到两到三家CDN厂商,那么运营成本会变高,且传统的CDN服务模式缺乏开放与透明,影响用户作出准确的判断,无法实时掌控服务质量,而网络只负责端到端传输,并不会对传输质量进行优化,如果链路传输质量不好也并不会选择其他好的链路进行传输,仅管CDN节点近,但链路的传输质量得不到保障。


为了解决以上单一CDN存在的各种弊端,引入了多CDN管理服务的概念,通过FUSION融合CDN管理平台接入多家国内外主流CDN厂商,可实时追踪全国CDN线路质量,通过长期的监控的历史数据,把线路好的网络选出来,形成新的资源网提供给用户。融合CDN平台帮开发者做最优选择,通过融合多家CDN厂商的线路进行智能调度,用户不但可以获得最近且最优网络质量的链路,还可享受多家CDN服务,解决单家CDN线路故障问题,不断提升网络体验。覆盖全场景CDN优化线路,一次接入,即可实现智能CDN线路切换,无缝流量过渡,确保CDN持续可用。用户可以根据使用场景自主选择最优的CDN线路。


在CDN的应用中,有很多场景,现在比较火的就是视视和直播,像爱奇艺、乐视这类视频网站,斗鱼TV、熊猫TV这类有互动的“流媒体”直播平台,这些平台都有高并发,大流量传输的特点,而这些平台的画面质量,流畅性则是用户在选择时重点考虑的因素。流媒体有不同的码率,提供不同的画面质量,比如1080p(超清),720p(高清),480p(标清),360p(流畅),不同码率文件的大小也不同,对带宽的要求也不同,不同的传输质量又带来不同的流畅性。在用户本地网速不佳的情况下,可以通过降低码率来保证用户的流畅体验。而对服务端则需要通过选择合适的CDN来确保整个环境的传输质量,而CDN服务的质量就直接影响着用户的体验。


所有场景中,直播要求的时效性是最强的。直播中卡,延迟是最让用户感到崩溃的。比如看球赛直播,整个网络上已经刷屏球进了,而自己却要过几秒才能看到进球到或刚好要进球时卡住了,这种用户体验非常糟糕。前面讲过数据从服务端到客户端中间需要经过大量的网络设备,如路由器,交换机,网络等,而各种网络设备传输数据都有延迟时间,那么针对直播的场景,特别是还需要对直播中实时转码,水印,拼接,混剪等服务的场景,对基础资源的性能有着高度的依赖。所以这种对CDN基础设施有着高度依赖,高负荷的CDN需要单独构建。后续将再详细介绍CDN自建,架构,监控等内容。


文章作者简介:

陈爱珍,DBA+社群中间件云用户组联合发起人,上海中间件用户组负责人,新炬网络技术专家,7年运维经验,涉及电信、金融、税务等行业,精通主流中间件技术,精通以业务为导向的端到端性能优化,熟悉私有云平台建设。


6d9ff81e97dc643ec97b5b505ba03fb3c9fd8b01


                                                    中生代技术分享群微信公众号

                                                da9312524921e637b684eed7bf3249db58f7badc


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值