01
什么是CDN?
CDN(Content Delivery Network)也叫内容分发网络,此技术旨在降低带宽消耗,减少延迟,在网络负载时体现路由的可扩展性。
直观上体现在应用程序或网页的提速,改善应用服务器压力的同时提高用户体验。
02
为什么要用CDN?
传统单一站点,以及流媒体的访问并发量受带宽限制和服务器性能等因素限制,无限扩容虽能及时缓解瓶颈压力,但是治标不治本,还会有资源浪费的嫌疑。因此在网络“基建”已搭建好的情境下,如何对数据流进行规整,实现既能节省带宽又能减少对服务器性能依赖成为了一种新思路。
CDN技术由此应运而生。对源站页面内容进行缓存,打破跨地域、跨运营商用户访问的壁垒,同时缓解了企业带宽和服务器承载压力,加快应用的响应速度,为用户带来卓越的交互体验。
03
CDN加速原理
CDN通过建立多个节点,将源站内容更新并下发、缓存到全部节点。当用户请求资源时,CDN根据就近原则,将距离用户最近的节点作为缓存服务器下发资源。
图|CDN架构示例
CDN主要从两点体现加速价值,一是提高网络的连接性,二是从网络根本的性能上。下面会根据这两方面分别介绍CDN的功能。
炫酷技术——提高网络连接性
影响网络连接性的因素有很多,可以把数据传输过程想象成排水系统,不同类型的数据则可以理解为排水系统中不同的物质,所以在排水时有两类问题就需要工厂来明确。
-
从源头来考虑:
排放机制是否需要时时刻刻都进行,还是在中继处攒到一定容量再统一排放。
-
从中间环节来考虑:
排水系统的大体积物质若是过大是否会堵塞通道,因此也要考虑物质压缩问题。
这些问题都可以被形象地类比为数据传输中遇到的问题。工厂第一个排放机制的问题等同于HTTP请求的处理,无论是网络带宽,还是浏览器可容纳的TCP并发量,都是有阀值限制的,因此需要一些手段合理降低客户端请求数。第二个问题等同于数据传输中大文件的处理方式,是要统一进行压缩还是增加“排队”的长度。
值得欣慰的是,当前CDN的技术可以很好地解决数据传输中的问题。下面5点是从CDN在提高网络连接性的方面应用的技术和算法。
1. 对HTTP头部实现缓存策略
如果相同版本的HTTP页面一直在被加载,无论对于源站服务器还是客户端都等于做了很多“无用功”。因此CDN会自主学习,将该HTTP页面当成是“静态页面”,并缓存到CDN的缓存服务器上。等用户再请求相同资源的时候,CDN代替源站服务器,直接返回已进行缓存的资源,节省了进行相同运算的处理时间。带给用户的直观感受就是程序或网页响应快。
此外,CDN可以直接重写HTTP的缓存标头,对是否缓存、缓存时间、强制缓存,将源站资源缓存在CDN节点上,完全根据用户需求进行定制化部署。
2. 减少HTTP请求
从网络层面讲,每请求一个网页资源就需要发起一个HTTP请求,当请求数过多时就会造成首字节时间(TTFB)的延长。因此页面元素越多,也就越消耗时间来加载资源。造成的结果就是,用户打开内容丰富的页面,反而引起了5s焦虑,因此放弃继续访问[]。丢失用户这对于应用来说,无异于是巨大的损失。
CDN可通过整合资源从而减少资源的HTTP请求,从而加快用户加载页面所消耗的时间。
图|CDN进行HTTP资源整合示例
3. HTML内容压缩
通常HTML会对整个内容进行压缩,压缩后的文件越大,浏览器在进行解压缩并传递给用户的时间就会越长,而影响解压缩时间的因素与采取的压缩工具有关。在对GZIP、BZIP、LZMA等压缩方式进行对比之后发现,GZIP对内容的压缩量相对较大[2],且GZIP的压缩和解压缩时间都相对较小[3],因此GZIP为当前最为普遍的压缩方式。
CDN可以对HTML进行GZIP压缩,最大程度优化因为网页内容的压缩和解压缩影响下的TTFB。
4. 图片加载
常规的图片压缩方式分为三种:
第一种是有损压缩,将图片的质量降低,从而减少图片大小;
第二种是将图片变成像素模式,并同时将图片优化,使其看起来更好看而不是全部由像素点构成的图片,从而减少浏览器加载图片的时间;
第三种是将栅格式的图片全部变成矢量图,从根本上减少图片大小,同时维持高质量的视觉效果。
CDN则利用第三种方式,在无损图片质量的同时最大程度减少图片大小。因此图片越大,越能体现CDN对于图片处理的优越性。
5. SSL连接
图|CDN双向加密示例
① 安全性
数据传输当然不可忽视数据加密问题,在使用CDN过程中涉及两阶段SSL加密过程。优秀的CDN服务商,在用户和CDN交互过程使用的是CDN提供的经由CA认证的高等级A+证书。因此通常情况下用户与CDN节点的缓存数据进行交互过程是安全可控的。而CDN访问源站的过程是需要自行按需部署SSL证书,所以保证了数据在CDN和源站进行交互的过程也是加密的。
除此之外,CDN还可提供HTTP严格传输安全协议( HSTS )技术。即CDN可统一对接入的源站域名进行管理,使该域只能通过SSL/TLS进行访问。但是因为有些应用在https进行访问后会重定向到http,若应用HSTS,则有可能会影响部分功能,因此HSTS技术还是根据用户需求按需部署。
② 高效
当client请求数据的时候,本质上是通过与CDN边缘节点服务器进行交互,而CDN边缘节点服务器再定期或根据用户需求向源站进行数据同步或预取。在用户与CDN进行数据交互过程中,CDN提供keep alive机制。当用户请求资源时,CDN支持短时间的开放连接,使用户无需重复与CDN节点建立连接,从而减少了SSL反复建立连接过程中浪费的时间。
稳固地基——改善网络性能
CDN是否优秀,一方面体现在对于改善网络连接所使用的多种技术。但是无论提供的技术有多智能、多便捷,CDN的立足之本都是节点的物理位置选择和整体网络的架构部署。就好比搭建房子,根基稳了才能在上层建筑上凸显个性。因此CDN的根基主要是从网络的数据传输方式、路由策略和运营商的选择来衡量的。
1. 拯救运维工程师睡眠的技术——任意播(Anycast)
网络环境中,数据从客户端到服务器的通信方式有多种选择,常见为单播、组播、广播。
-
单播(Unicast)是指一对一的通信方式,只有客户端发起了请求服务器才会发送数据流。这种方式最为广泛,常见的TCP就是属于单播模式。更直观来讲,用户发送邮件、浏览网页就是单播最好的体现,即点对点传输。
-
组播(Multicast)是指一对多的通信方式,但是只发给特定“组”的用户,当下视频会议、流媒体等资源多数采用组播方式。形象的比喻是用户在油管上关注了一个播主,那么这个播主更新的内容会自动推送到订阅该播主的用户上。不在这个订阅组的用户将收不到更新的推送。那么“组”的这个概念就很好理解了。
-
广播(Broadcast)也是一对多的通信方式,只不过相较于组播,广播是发给广播域里面所有用户。因为用户只能是被动接受,若是再加上网络结构设计不合理,因此才会有“广播风暴”这种网络故障存在。
然而任意播(Anycast)的产生则是概念性的突破。任意播是由IPV6衍生出的一个技术,即通过“就近原则”,向最近节点发送数据的方式。那么问题来了,网络又不像实际路况,到某一个节点路由器时,面对新解锁的地图它怎么知道谁最近呢?尤其涉及到全球范围,每一个国家的路由是不会让别人摸清的,那依靠任意播的CDN、DNS是怎么工作的呢?
答案就是利用BGP。不同地域之间靠边缘ISP将路由告知给邻居节点,从而实现了将保密区域内部结构私有化,同时不同地域之间又能互通。
CDN便是依托于该特点,在全球节点互通互联的基础上,向全球用户提供加速服务。
图|CDN路由选择示例
2. 运营商强强联合
CDN选取的运营商线路所影响的加速效果远比CDN提供的技术性能优化明显得多。一般来讲,一级运营商的专线质量以及节点位置、数量会远远高于二、三级运营商。因此为保证运营商效益,一级运营商会在不同地域构成一个类似于联盟性质的“一级运营商俱乐部”,在稳固了自己的市场占有率同时,又保证彼此通过联盟而向用户提供最优的链路质量。与此同时,优质CDN则会协议使用“一级运营商俱乐部”提供的链路,将加速效果最大化。
04
总结
通过CDN的灵活部署,在节省了互联网出口带宽的同时,为业务带来了更多的可能性。不用再顾虑大文件、高清音频是否会出现严重卡顿现象,不再考量其他地域用户是否有时延问题等。应用CDN不但为业务免除了数据传输的影响因素,而且带来了卓越的用户体验,让业务可以更加专注于应用的开发以及客户群体的定位。
作为当前已经使用CDN的业务,现在是不是已经开始偷着乐了呢。