在今日的世界中,互联网已经与人们的生活密不可分,诸如电商、门户网站、直播、游戏等互联网业务都有着广泛的受众。而在这些服务的背后,都离不开一个重要的角色:CDN。
互联网上的大部分业务都离不开CDN的支持,可以说如果没有CDN,也不会有现今互联网的繁华。
本文我们将对CDN的工作原理及主要技术知识点进行介绍。
在上个世纪90年代,麻省理工学院教授,万维网的发明者 Tim Berners-Lee针对当时快速增长的互联网流量,预见到在不久的将来网络拥塞将成为互联网发展的最大障碍。 对此,他提出了一个学术难题:希望发明一种全新的、从根本上解决问题的方法来实现互联网内容的无拥塞分发。
这项学术难题最终催生出一种革新性的互联网服务– CDN,并且由Berners-Lee的同事Tom Leighton教授与其他几位科学家一起将其商业化,成立了世界上第一家CDN公司:Akamai公司。
对于CDN,在百度百科中有如下解释:
CDN(Content Delivery Network)中文名为内容分发网络,是构建在现有网络基础之上的智能虚拟网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。
如果用一句简单的话来概括,那就是CDN让用户实现了对资源的就近访问,从而达到最优的访问效率。
举个例子,假设现在用户需要获取网站中某个视频资源,在没有CDN的情况下,所有的用户请求都需要到源站处理,并从源站下载资源。
在这种场景下会带来几个问题:首先是跨运营商的网络影响,当前全国除三大运营商外,还有各地大大小小的运营商。在跨运营商的网络互访过程中,往往会出现较大的延迟,从而带来网络性能的下降;其次是跨地域的问题,互联网业务往往是面向全国甚至更大范围内的用户,而随着用户到源站距离的增加,数据的往返时间也会随着增加,并可能影响到业务的使用体验;最后,当大量的用户请求都通过源站进行处理时,无疑会给源站点带来巨大的压力,严重的情况下甚至可能压垮站点。
而在使用CDN的场景中,访问请求的架构将如下图所示。对于源站的资源请求会被分配到CDN位于各地的边缘节点,用户根据就近访问原则到分配的节点去请求资源,从而获得最优的访问效率。
CDN的技术实现需要DNS的支持,这里涉及到与DNS有关的两个名词:A纪录与Cname纪录。
A纪录:即Address记录,用于指定域名与对应的IP地址记录,例如: www.test.com –> 10.10.10.10。当访问这类记录的域名时,DNS服务器会解析出相应的IP地址,并返回给到客户端。
Cname纪录:也称为别名记录,用于指定域名与另外一个域名的解析关系,例如:www.aaa.com –> www.bbb.com。 当访问这类域名时,DNS首先会将域名解析为对应的别名记录,然后再通过该别名去解析对应的IP地址,最后返回给到客户端。该类型的用途在于可以将自身域名委托给到第三方做解析,在CDN等场景中会经常用到。
在不使用CDN的情况下,我们通常是在DNS上配置A记录,即将域名解析到源站IP。此时,当客户端访问域名时,将使用以下的流程:
而在使用CDN后,源站域名解析将配置为Cname,即将域名解析到CDN域名,并最终由CDN厂商的GSLB分配IP。此时,整体的访问流程变成如下所示,浏览器将到CDN节点请求资源。
CDN的加速功能实现,主要由GSLB(全局负载均衡器)与缓存系统两个主要功能系统来处理。
1. GSLB
GSLB系统可以基于智能的DNS技术来实现,相比于传统DNS具有功能更加强大、更加智能的特点。GSLB根据预先配置好的策略,为用户分配最适合的节点地址。以下几种为GSLB常见的调度策略:
. 基于Local DNS的静态调度
该策略会根据Local DNS的IP地址(或者终端机器的IP地址),然后在配置里面找到IP所对应的区域,返回该区域最适合的CDN节点地址给到客户端。
. 基于RTT的调度
RTT(Round-Trip Time)指节点到目标之间数据的往返时延,该策略会根据Local DNS的IP地址,将候选的CDN节点与该地址的RTT进行比较,并将其中RTT小的节点调度给用户。
. 基于成本和带宽的调度
成本方面主要从CDN厂商角度考虑,比如在某些业务少的地区,调度器会将部分请求调度给到其他区域的节点处理,这样可以减少在该区域的节点部署 。而基于带宽的调度则会根据CDN节点的出口带宽大小计算权重,分配访问请求。
. 基于服务等级的调度
该策略基于目标域名的企业服务等级,通常会将质量更好节点分配给等级更高的企业客户,以便提供给高级别用户更好的服务。
以上几种为常见的调度策略,CDN厂商通常会将这几种方式结合使用,在成本和带宽满足的情况下,尽量提供就近选择的节点资源。当然,不排除部分CDN厂商还会有自身的定制化策略。
2. 缓存系统
缓存系统最基本的工作单元就是许许多多的Cache节点(缓存服务器),Cache节点负责直接响应最终用户的访问请求,把缓存在本地的内容快速提供给用户。同时 ,Cache节点也会与源站进行内容同步,把更新的内容以及本地没有的内容从源站点获取并保存在本地。
缓存系统可能存在着多层级的架构,如典型的三层架构:边缘节点作为最接近用户的节点,提供给到用户进行就近访问。当边缘节点未命中资源时,会向上层节点请求。如果在中心节点仍未命中,则会回源到源站进行获取。
1. 网站加速
主要针对门户网站、电商等业务场景,如网易、淘宝等站点。这类站点往往有着非常多的的静态内容文件(文本、图片等),CDN可对其进行加速处理,从而显著改善页面响应时间,提升用户的使用体验。
2. 文件下载加速
文件下载加速是CDN的一项重要功能,常见的场景有软件补丁包发布、游戏安装包获取等,这类文件容量大,下载的过程中容易给源站带来性能和带宽压力。通过CDN的方式,可以有效分担这些压力,并提高客户端的下载效率。
3. 流媒体加速
流媒体加速的方式是通过将流媒体内容推送到离用户最近的边缘节点,使得用户可以就近获取内容,从而提高视频传输质量、缩短访问时间,节省骨干网络的流量。流媒体加速包含直播和点播两种,此类模式适用于各类音视频网站和应用,如:抖音、爱奇艺等。
4. 全站加速
主要针对动态内容较多的站点,通过智能路由、协议优化等动态加速技术,提升客户端到源站的网络效率,便于快速获取动态资源。
1. 节省成本投入
CDN通过广泛部署的节点对流量进行分摊处理,对于静态资源的命中率通常达到90%以上,这极大的减少了源站的带宽及服务器资源需求,可较大的降低企业成本投入。
另外,对于互联网类型的企业而言,业务流量往往会有较大的波动性,如:电商企业在做活动的时候,当天流量可能达到平时的数倍,而在活动过后则会下降较多。
在不使用CDN的场景下,往往需要准备足够应付流量波峰的资源来应对,这样会造成资源的较大浪费。而CDN使用按量付费的模式,可有效降低这种资源浪费的情况。
2. 提升用户体验
互联网存在着一个8秒定律:用户访问一个网站时,如果等待网页打开的时间超过8秒,会有超过70%的用户放弃等待。而加载时间每多1秒,你就会流失7%的用户。这个定律表明了速度对于互联网业务的重要性。
CDN服务解决了跨区域、跨运营商等造成网络阻碍的常见问题,通过智能分配、就近接入的模式,可以有效提升用户对于相关资源的下载效率,从而极大地提升用户体验。
3. 增加安全性
当前,在互联网上的黑客攻击并不少见,像DDoS等流量攻击往往会通过大量请求将源站的资源耗尽,从而让正常用户无法进行访问。CDN通过Cname的方式,屏蔽了源站的IP信息,这使得攻击者无法对源站地址进行直接攻击,而且CDN有着广泛分布的节点,可以有效减少攻击的危害性,使得业务的安全性得到增强。
4. 降低运维复杂性
CDN厂商通常会提供一站式的服务,包括配套的监控告警、服务分析、软件工具等,可以较好地降低运维的复杂性,便于把更多精力投入到核心业务中。
附录:CDN相关术语
加速域名:指使用CDN加速服务的域名。
边缘节点:提供给用户就近访问的缓存服务器。
命中率:CDN为静态文件提供加速的方式主要通过缓存技术来实现,当客户端请求到达CDN节点时,如果请求的内容文件已缓存,则会直接在缓存获取并返回给客户端。如果没有缓存的情况,CDN节点则是回到源站去拉取文件。命中率代表客户的请求命中CDN缓存的比例。
回源:在没有命中缓存的情况下,CDN节点将返回源站获取资源,这个过程称为回源。
预热:提前将指定资源加载到CDN。
刷新:删除CDN节点上缓存的资源,当用户访问对应资源时,直接回源接取新资源返回组用户,并重新缓存。