CDN—提升互联网资源访问体验的“幕后英雄”

2022-04-02 10:48金琦
中国信息技术教育 2022年7期
关键词:域名IP地址节点

金琦

编者按:深度学习是新一代机器学习技术,深度学习技术的不断发展对自然语言处理技術产生了深远的影响。本期我们将讨论传统自然语言处理技术和以深度学习为基础的新一代自然语言处理技术基本方法,并分析利用深度学习技术实现自然语言处理应用案例。

近年来,随着互联网的发展,网络带宽提升带来的互联网用户数、互联网应用种类等都呈现出爆炸式的增长,图像、音频、视频服务所占的比重越来越大。以正进行数字化转型的教育行业为例,视频媒体技术作为数字化转型的重要部分在教育领域得到广泛的应用,如远程教育和泛在教育等新的教育形式都依赖于视频媒体技术的发展,教师和学生对视频的呈现形式和质量提出了越来越高的要求,而在这些服务的背后,都离不开一个重要的角色:内容分发网络(Content Delivery Network,简称CDN)。互联网上的大部分业务都离不开CDN的支持,可以说如果没有CDN,就不会有现今互联网的繁华。本期我们将对CDN的工作原理及主要技术知识点进行介绍。

● 什么是CDN

在互联网起源之初,设计的目标是实现端到端之间的通信,早在20世纪90年代,万维网创始人伯纳斯·李就预见这种单纯的端到端数据通信模式架构难以适应未来以发布和获取信息为主的互联网快速增长流量,网络拥塞将成为互联网发展的最大障碍。对此,他提出了一个学术难题:希望发明一种全新的、从根本上解决问题的方法来实现互联网内容的无拥塞分发。这项学术难题最终催生出一种革新性的互联网服务——CDN,并且由伯纳斯·李的同事汤姆·莱顿教授与其他几位科学家一起将其产业化,成立了世界上第一家CDN公司——Akamai公司。CDN是一种将单一中心结构变为分布式的网络系统,即组成该系统的硬件服务器可以分布在全球的每个角落,只要通过网络实现互连,就可以实现将访问目的服务器的资源按照一定的规则有选择性地复制到最接近用户网络的边缘服务器上,提高用户所获取业务的服务体验,其实质是在互联网上构建一个覆盖网络。边缘服务器的选择主要依赖于先进的负载均衡技术。在用户访问网络资源时,系统会自动为用户定向到网络延迟最小的服务器上,使用户可以在最短的时间内取得所需要的资源。CDN技术在原理上很清晰,然而要实现高性能访问仍有很大难度,它涉及负载均衡、内容分发、存储管理等诸多技术难点。CDN一般按照三级架构进行部署,分别是中心层、区域层和边缘层,中心层和区域层又称为骨干节点,边缘层又称为边缘节点。节点是CDN的基本单元,由缓存设备和本地主机构成。用一句简单的话来概括:CDN是一个经过策略性部署的整体系统,让用户实现了对资源的就近或有效率的访问。

接下来用功能实例来说明,假设用户需要获取目的网站中某个视频资源,在没有CDN的情况下,所有的用户请求都需要到目的网站处理,并从目的网站下载资源,功能简示如下页图1所示。

在这种场景下会带来几个问题:首先是跨运营商的网络影响,当前我国除三大网络通信运营商外,还有各地大大小小的运营商。在跨运营商的网络互访过程中,往往会出现较大的延迟,从而带来网络性能的下降。其次是跨地域的问题,互联网业务往往是面向全国乃至全世界的用户,而随着用户到目的网站距离的增加,数据的往返时间也会随着增加,并可能影响到业务的使用体验。最后,当大量的用户请求都通过目的网站进行处理时,无疑会给目的网站点带来巨大的负载,严重的情况下甚至可能让站点拒绝服务。

而在使用CDN的场景中,对于目的网站的资源请求会被分配到CDN位于各地的边缘节点,用户根据就近访问原则到分配的节点去请求资源,从而获得最优的访问效率,功能简示如图2所示。

我们如何知道一个网站是否用到了CDN?用了多少?部署在哪里?可以做一个简单实验来认识一下:以笔者家的网络(浙江金华中国电信)和刘宗凡老师家的网络(广东肇庆中国移动)分别访问央视网站www.cctv.cn为例来具体分析,并通过nslookup工具来查看结果。

笔者从家中网络(浙江金华的中国电信)访问央视网站,解析出了两个地址,这两个地址都属于浙江温州的中国电信网络,由此可知央视网站在浙江的中国电信网络部署的CDN就在浙江温州(如图3);刘老师从家中网络(广东肇庆的中国移动)访问央视网站,解析出了3个地址,这3个地址都属于广东广州的中国移动,由此可知央视网站在广东的中国移动网络部署的CDN就在广东广州(如图4)。笔者和刘老师在不同的地域通过不同的运营商对央视网站解析出的地址完全不同,这就形象地说明了CDN就近访问。

接下来我们对一个没有使用CDN的网站进行测试(如图5):最近笔者学校教师都在填报全国教师管理信息系统,由于同时填报人数较多,不管在家中还是学校填报都比较卡慢,经过nslookup命令查询在Addresses这行只有一个地址,说明全国教师管理信息系统没有使用CDN,建议主管部门可尝试使用CDN或DCDN(下文会提及)产品,这样教师填报体验会提升。

● CDN的工作原理

CDN的技术实现需要DNS的支持,这里涉及与DNS有关的两个名词:A纪录与Cname纪录。

A纪录:即Address记录,它并不是单一的IP或者域名,我们可以把它理解为一种指向关系,用于指定域名与对应的IP地址记录,假设www.a.com --> 10.10.10.10。当访问这类记录的域名时,DNS服务器会直接解析出相应的IP地址,并返回给到访问客户端。

Cname纪录:我们可以把CNAME记录叫做别名记录,通俗地说就是“小名”,用于指定域名与另外一个域名的解析关系,假设www.a.com --> www.b.com。当访问这类域名时,DNS首先会将域名解析为对应的别名记录,然后再通过该别名去解析对应的IP地址,最后返回给到访问客户端。该类型的用途在于可以将自身域名委托给到第三方做解析,这在CDN等场景中会经常用到。

在不使用CDN的情况下,我们通常是在DNS上配置A记录,即将域名解析到目的网站IP。此时,当客户端访问域名时,将使用以下的流程:

(1)用户在自己浏览器中输入要访问目的网站的域名,浏览器若发现本机DNS缓存或者hosts文件没有对应域名和IP记录,则浏览器向本地DNS请求对该域名的解析。

(2)本地DNS服务器中如果缓存有这个域名的解析结果,则直接响应用户的解析请求。

(3)本地DNS服务器中如果没有关于这个域名的解析结果的缓存,则以迭代方式向整个DNS系统请求解析,同时将该解析结果保存到自己的缓存中。

(4)本地DNS将解析结果IP地址返还给用户浏览器,经过标准的TCP握手流程,建立TCP连接。服务器将用户请求内容传送给浏览器,功能简示如图6所示。

而在使用CDN系统优化后的数据传输发生根本的变化,目的网站域名解析将配置为Cname,即将域名解析到CDN域名,此时CDN系统通过在精心挑选的网络各处放置节点服务器,从而将网站的内容放置到离用户最近的地方,即最终由CDN厂商的GSLB分配IP,避免了上述影响互联网传输性能的“一公里”(CDN业界的一种形象说法,包括与订购CDN服务的网站服务器网络间隔;访问者到离他最近的 CDN服务器的网络间隔;数据从进入CDN网络到出CDN网络的网络间隔)和“主干网间互联瓶颈”等各个环节,提高了用户访问速度。此时基于CDN网络的用户访问步骤如下:

(1)用户在自己的浏览器输入要访问网站的域名,浏览器若发现本机DNS缓存或者hosts文件没有对应域名和IP记录,则浏览器向本地DNS请求对该域名的解析。

(2)如果本地DNS服务器没有相应域名的缓存,则本地DNS系统会将域名的解析权交给CNAME指向的CDN专用DNS服务器。用户向CDN的全局负载均衡设备发起URL访问请求。

(3)CDN的DNS服务器将CDN的全局负载均衡设备IP地址返回给用户。用户向CDN的全局负载均衡设备发起URL访问请求。

(4)CDN全局负载均衡设备根据用户IP地址,以及用户请求的URL,选择一台用户所属区域的区域负载均衡设备,并将请求转发到此设备上。

(5)根据用户IP地址远近、各个边缘节点当前的负载情况、用户所请求的URL中包含的文件内容类型等因素综合考量,区域负载均衡设备会选择一个最优的缓存服务器节点,并从缓存服务器节点处得到缓存服务器的IP地址,最终将得到的IP地址返回给全局负载均衡设备。节点中的缓存服务器响应用户的请求提供相关内容。如该节点已有用户请求的内容,则直接响应,如没有用户请求的内容,则该节点会回到最原始的目的网站服务器获得,并保存在缓存中,响应随后的用户请求,功能简示如图7所示。

由上述可知,CDN的加速功能实现,主要由GSLB(全局负载均衡器)与缓存系统两个主要功能系统来处理。

1.GSLB

GSLB系统可以基于智能的DNS技术来实现,相比于传统DNS具有功能更加强大、更加智能的特点。GSLB根据预先配置好的策略,为用户分配最适合的节点地址。以下几种为GSLB常见的调度策略:①基于Local DNS的静态调度。该策略会根据Local DNS的IP地址(或者终端机器的IP地址),在配置里面找到IP所對应的区域,返回该区域最适合的CDN节点地址给到访问客户端。②基于RTT的调度。RTT(Round-Trip Time)指节点到目标之间数据的往返时延,类似大家常说的Ping值,该策略会根据Local DNS的IP地址,将候选的CDN节点与该地址的RTT进行比较,并将其中RTT小的节点调度给访问客户端。③基于成本和带宽的调度。成本方面主要从CDN厂商角度考虑,如在某些业务少的地区,调度器会将部分请求调度给到其他区域的节点处理,这样可以减少在该区域的节点部署。而基于带宽的调度则会根据CDN节点的出口带宽大小计算权重,分配访问请求。④基于服务等级的调度。该策略基于目标域名的服务等级,通常会将质量更好的节点分配给等级更高或更迫切场景(如疫情期间要保证医疗和线上教学)的客户,以便给相关用户提供更好的服务。

以上几种为常见的调度策略,CDN厂商通常会将这几种方式结合起来使用,在成本和带宽满足的情况下,尽量提供就近选择的节点资源。当然,CDN厂商还会完善和定制自身策略,如阿里用其业务中数据“包裹记录”来校准阿里CDN的IP地址库,以此来优化Local DNS调度策略。

2.缓存系统

缓存(Cache)说到底就是用空间换时间,通过使用多余的空间,获取更快的速度。CDN缓存系统最基本的工作单元就是众多的Cache节点(缓存服务器),Cache节点负责直接响应最终用户的访问请求,把缓存在本地的内容快速提供给用户。同时,Cache节点也会与目的网站进行内容同步,把更新的内容以及本地没有的文件内容从目的网站点获取并保存在本地。

CDN缓存系统可能存在着多层级的架构,以图8来简要说明:边缘节点作为最接近用户的节点,提供给用户进行就近访问。当边缘节点未命中资源时,会向上层节点请求。如果在中心节点仍未命中,则会回源到目的网站进行获取。

● CDN应用场景

1.网站加速

主要针对门户网站、在线影视、电商、在线教学等业务场景。这类站点往往有着非常多的静态内容文件(视频、图片等),CDN可对其进行加速处理,从而显著改善页面响应时间,提升用户的使用体验。其中最典型的就是流媒体加速(如抖音、优酷等),流媒体加速包含直播和点播两种,其方式是通过将流媒体内容推送到离用户最近的边缘节点,使得用户可以就近获取内容,从而提高视频传输质量,缩短访问时间,节省骨干网络的流量。此类模式适用于各类音视频网站和应用。

2.文件下载加速

文件下载加速是CDN的一项重要功能,常见的场景有软件补丁包发布、镜像文件获取等,这类文件容量大,下载的过程中容易给目的网站带来性能和带宽压力。通过CDN的方式,可以有效分担这些压力,并提高客户端的下载效率。

3.全站加速

读到这里,读者可能会有疑问:CDN加速的本质是缓存加速。将您服务器上存储的静态内容(视频、图片、压缩包)缓存在CDN节点上,当您访问这些静态内容时,无需访问服务器目的网站,就近访问CDN节点即可获取相同内容,从而达到加速的效果,同时减轻服务器目的网站的压力。那诸如“数据库交互请求、读取API接口”动态网站资源怎么办呢?的确,传统的CDN无法缓存实时变化的动态内容。对于动态内容请求,传统CDN节点只能转发回您的服务器目的网站,没有加速效果。如果您的网站或App应用有较多动态内容,如需要对各种API接口进行加速,Web2.0互动等各种服务加速,则需要使用CDN厂商提供的全站加速DCDN(Dynamic Route for Content Delivery Network)。全站加速能同时加速动态和静态内容,加速方式如下:传统的静态内容使用CDN加速;以应用和服务为主的动态内容通过CDN厂商平台在传统的CDN技术上又增加了压缩、流量整形、智能路由和协议优化等动态加速技术,提升客户端到目的网站的网络效率,便于快速获取动态资源,从而达到全站加速的效果。

● CDN带来的收益

1.节约成本投入

CDN通过广泛部署的节点对流量进行分摊处理,对于资源内容的命中率通常达到90%以上,这极大地减少了目的网站的带宽及服务器资源需求,可较大地降低使用单位的业务成本投入。另外,对于互联网类型的单位而言,业务流量往往会有较大的波动性,如学校会在新冠疫情期间较频繁地开展远程教学,而平时使用度会下降;电商企业在做活动的时候,当天流量可能达到平时的数倍,而在活动过后则会下降较多。在不使用CDN的场景下,往往需要准备足够应付流量波峰的资源来应对,这样会造成资源的较大浪费。而CDN使用按量付费的模式,可有效降低这种资源浪费的情况。基于此,各大运营商和内容提供商都已经开始积极探索和部署各自的CDN网络。

2.提升用户访问体验

互联网有一个著名的8秒原则,用户在访问网页时,如果时间超过8秒就会感到不耐烦,如果下载需要太长时间,他们就会放弃访问。随着网民数量的日益增长,以及网页服务和网络固有的延迟,网络宽带面临着巨大的压力,大大影响了用户的体验度。如何缩减网页访问延迟、改善WWW服务质量已经成为改善Internet应用环境的主要目标。而CDN技术的出现,及时解决了网络响应速度的问题。

CDN服务解决了跨区域、跨运营商等造成的网络阻碍等常见问题,通过智能分配、就近接入的模式,可以有效提升用户对相关资源的下载效率,从而极大地提升用户访问体验。

3.增加安全性

当前,在互联网上的黑客攻击并不少见,如最常见的DDoS攻击,DDoS代表分布式拒绝服务,攻击者将很多台电脑集中起来,发出指令,让很多台电脑对同一个网站进行请求,一旦这些电脑数量众多,就很容易将目的网站的资源耗尽:服务器上行带宽占满;服务器CPU、内存占满;服务器忙于处理攻击源的请求,对其他正常用户的请求无暇顾及。CDN通过Cname的方式,屏蔽了目的网站的IP信息,这使得攻击者无法对目的网站地址进行直接攻击,不同地域发起攻击的电脑会就近读取CDN节点上的缓存数据,不会实时回源,所以目的网站压力得到缓解,此时攻击流量就分散掉了,而且CDN有着广泛分布的节点,可以有效减少攻击的危害性。但由于CDN本质上还是基于IP网络,我们还是要从网络层、系统层、应用层和管理层等方面考虑,采用分层的安全防护策略,为CDN系统构建多层安全防线。不同的安全防线采用不同的安全策略,当网络中某个安全防线被攻破后,其他网络节点依然能够对该安全威胁实施有效的防护机制,确保网络的安全运行。

4.降低运维复杂性

CDN厂商通常会提供一站式的服务,主要代表厂家就是阿里云、腾讯云等,提供了配套的监控告警、服务分析、软件工具等。除了CDN服务以外,还包括域名注册、网站开发、IDC、云通信、移动服务、云安全、监控与管理等综合化一站式服务,可以让用户较好地降低运维的复杂性,便于把更多精力投入到自身专业业务中。

● 体验使用CDN的静态资源内容的范例

可能有的读者会说我们学校网站的访问量和数据量不会达到诸如在线视频点播网站的访问级别,为什么要考虑CDN呢?其实学校在开发一些小应用时,前端页面常直接使用到一些类似JS、CSS、image、swf等公共库资源,我们完全可以引用一些CDN公共库以达到快速开发目的。同时,在有了CDN概念后,我们会注意通过不同的CDN供应商,比较读取静态资源内容公共库速度来筛选不同的CDN。目前,开发者经常引用的CDN公共库有百度(http://cdn.code.baidu.com/)、360(http://libs.useso.com)、七牛云(https://www.staticfile.org)等。下面笔者以所在学校一个小应用“读取钉钉运动API来个性定制的教师钉钉运动步数排行”为例,用加载两个不同的JS/CSS CDN加速公共库的URL来体验一下访问速度。

http://ding.ourschool.cn/dingsport/weeklist(加载“七牛云”的JS/CSS CDN公共库)和http://ding.ourschool.cn/dingsport/testweeklist (加载一个读取速度一般的JS/CSS CDN公共库)。读者可以参照如图9所示的代码),使用CDN公共库加载JS、CSS资源。

然后测试一下,从不同的CDN读取资源的速度,方法很简单,在Chrome浏览器上按F12打开开发者工具,监控“全部”,在清除浏览器缓存的前提下,分别读取两个URL,可以发现读取静态资源内容速度从“十毫秒”级(如图10)到“百毫秒”级(如图11),相差非常大。

读者也可以访问以上两个测试URL,分别右键单击查看浏览器解析后源代码来验证,可以看到JS和CSS是来自不同的JS/CSS CDN提供商(如图12)。

通过以上简单有效的实验可以发现,在开发单位网站时,选择好的JS/CSS CDN加速公共库会让访问者访问网站的体验更好,这是日常开发要注意的。

● CDN与云技术相融合

在信息化高速发展的背景下,互联网行业一直在进行重大技术革新,并且相关技术不断融合,以满足人们日益增长的需求。现在很多云计算和云存储平台在对外提供服务时不可避免地会与CDN相融合,如Iass类型的云计算平台可以把基础资源虚拟化为共享的资源池,提供给CDN使用;Paas类型的云计算平台提供了开发环境和开放的应用服务环境,使得CDN可以在云计算平台上直接发布自己的应用和策略。云存储平台可以提供透明的服务和弹性的存储资源,用戶在使用云存储平台时可以不考虑设备的型号、传输协议、接口等细节,同时云存储平台提供优于普通存储方案和数据安全性,并且使用云存储的容量扩展非常方便,当CDN容量需要扩充时,只需在新增的服务器节点上部署分布式中间件并进行必要的网络配置,即可快速将该节点加入CDN存储集群的管理体系中。所以,云技术平台和CDN是相辅相成、密不可分的,随着未来网络对资源存储和加速服务的需求越来越大,可以相信CDN在云技术的支持和相互融合下,其贡献值与发展潜力是可以期待的。

猜你喜欢
域名IP地址节点
基于移动汇聚节点和分簇的改进节能路由算法
《江苏教育研究》官方网站域名变更公告
《江苏教育研究》官方网站域名变更公告
CAE软件操作小百科(48)
基于点权的混合K-shell关键节点识别方法
《IP地址及其管理》教学设计
计算机的网络身份IP地址
轻松明白网络IP地址以及子网划分问题
浅谈基于P2P的网络教学系统节点信息收集算法