不懂?!我就知道很多人都看不懂,不过如果把整个过程,比作网购,我相信就算是不懂技术的妹纸们也会醍醐灌顶!!!
话说从前有一个大仓库(源站服务器)存放着很多好吃的(数据)如薯片、巧克力、话梅等等(音频、视频、文件等),仓库下属会有很多网店超市(代理缓存的各个节点)大仓库的东西会下放到各个超市存储(缓存)、售卖(调度) 你(用户)在北京,想吃话梅(数据)那么就会就近北京的店(节点)将话梅发给你(用户请求数据) 而这个过程就是CDN的运行过程,相信吃货一定看得懂!!
就是这么简单...
CDN的全称是Content Delivery Network,即内容分发网络。其目的是使用户可就近取得所需内容,解决 Internet网络拥挤的状况,提高用户访问网站的响应速度。类似分布各地的物流仓储网络,CDN网络可以将源站的内容缓存到分布全球的CDN节点,根据用户的访问IP,就近连接CDN,提高网站响应速度。
今天我们看到的网站系统基本上都是基于B/S架构的。B/S架构,即Browser-Server(浏览器 服务器)架构,是对传统C/S架构的一种变化或者改进架构。在这种架构下,用户只需使用通用浏览器,主要业务逻辑在服务器端实现。B/S架构,主要是利用了不断成熟的WWW浏览器技术,结合浏览器的多种Script语言(VBScript、JavaScript等)和ActiveX等技术,在通用浏览器上实现了C/S架构下需要复杂的软件才能实现的强大功能。
互联网用户服务访问流程:
①用户在自己的浏览器中输入要访问的网站域名。
②浏览器向本地DNS服务器请求对该域名的解析。
③本地DNS服务器中如果缓存有这个域名的解析结果,则直接响应用户的解析请求。
④本地DNS服务器中如果没有关于这个域名的解析结果的缓存,则以递归方式向整个DNS系统请求解析,获得应答后将结果反馈给浏览器。
⑤浏览器得到域名解析结果,就是该域名相应的服务设备的IP地址。
⑥浏览器向服务器请求内容。
⑦服务器将用户请求内容传送给浏览器。
CDN的设计是为了降低时延——用户请求网页到网页最终呈现的时间差。用户满意的网页打开时间是在2秒以下,用户能够忍受的极限等待时间是8秒,超过8秒大部分用户会选择离开网页。
时延是由多种因素造成的,其中普遍存在的因素是用户和网站服务器的物理距离。而CDN的任务就缩短用户和访问内容的距离。具体做法就是将网站的内容——比如图片、文字、视频——存在不同地理位置的服务器上,称为CDN节点。举例来说,某网站的主机在北京市的机房内,如网站不使用CDN,那么广东的用户访问该网站的时延就是数据包从广东到北京来回的时间。如果该网站使用了CDN,并且这家CDN在广州架设了节点,那么广东的用户去访问被缓存的内容时只要等待数据包在广东内传输的时间即可,以此达到加速的效果。
①用户向 www.test.com 下的某图片资源,如 test.jpg 发起请求,先要向 Local DNS 发起域名解析请求;
②当 Local DNS 无对应解析纪录时,会递归查询,此时由于业务已经接入了 CDN,则解析请求会发送至 Tencent DNS(GSLB),GSLB 为腾讯云自主研发的调度体系,会为请求分配最佳节点IP;
③Local DNS 获取Tencent DNS返回的解析 IP;
④用户测获取解析 IP;
⑤用户向获取的 IP 发起对资源 test.jpg 的访问请求;
⑥若该 IP 对应的节点缓存有 test.jpg,则会将数据直接返回给用户(10),此时请求结束。若该节点未缓存 test.jpg,则节点会向业务源站发起对 test.jpg 的请求(6、7、8),获取资源后,结合用户自定义配置的缓存策略(可参考用户指南中缓存时间设置章节内容),将资源存储(9),并返回给用户(10),此时请求结束。
CDN的关键技术主要有内容路由技术、内容分发技术、内容存储技术、内容管理技术等。
内容路由技术:上面的一张图,首先是调度这一部分,如何选择最佳节点?负载均衡系统是整个CDN的核心,负载均衡的准确性和效率直接决定了整个CDN的效率和性能。腾讯用的是GSLB,也称全局负载均衡。 通常负载均衡可以分为两个层次:全局负载均衡(GSLB)和本地负载均衡(SLB)。全局负载均衡(GSLB)主要的目的是在整个网络范围内将用户的请求定向到最近的节点(或者区域)。因此,就近性判断是全局负载均衡的主要功能。本地负载均衡一般局限于一定的区域范围内,其目标是在特定的区域范围内寻找一台最适合的节点提供服务,因此,CDN节点的健康性、负载情况、支持的媒体格式等运行状态是本地负载均衡进行决策的主要依据。
常见的有三种方案:
一是根据用户的LocalDNS来调度,也是比较常见的做法,所有CDN厂商几乎都是这样做的。关键的问题是LocalDNS有时本身就不准确,调度也就会出问题。另外,有一部分客户不用LocalDNS,自己会手动配置publicDNS,比如google提供的8.8.8.8,南京信风提供的114.114.114.114,腾讯自己其实也有一个119.29.29.29。这些情况都可能影响CDN调度。
二是对于google的8.8.8.8这里采用anycast技术的publicDNS,可以在DNS迭代查询的时候根据DNS服务源IP来判断地域,返回对应地域的CDN节点IP来调度。
三是EDNS的方案,通过扩展的DNS协议,在客户端发起DNS解析请求的时候就带上客户端的IP,这样就可以通过IP库来定位客户的地域,腾讯的IP库经过多年的运营,准确率已经很高了。
静态CDN的访问流程是标准的域名访问过程,用户在发起下载请求时,首先访问DNS解析域名,然后根据解析结果访问下载服务器。静态CDN的调度系统将调度策略映射为域名-IP解析关系表,配置到公司GSLB系统,GSLB系统对外作为DNS权威服务器提供解析。
内容分发技术:包含从内容源到CDN边缘的Cache的过程。从实现上看,有两种主流的内容分发技术:PUSH和PULL。
PUSH是一种主动分发的技术。通常,PUSH由内容管理系统发起,将内容从源或者中心媒体资源库分发到各边缘的Cache节点。分发的协议可以采用 HTTP/FTP等。通过PUSH分发的内容一般是比较热点的内容,这些内容通过PUSH方式预分发(Preload)到边缘Cache,可以实现有针对的内容提供。对于PUSH分发需要考虑的主要问题是分发策略,即在什么时候分发什么内容。一般来说,内容分发可以由CP(内容提供商)或者CDN内容管理员人工确定,也可以通过智能的方式决定,即所谓的智能分发。它根据用户访问的统计信息,以及预定义的内容分发的规则,确定内容分发的过程。
PULL是一种被动的分发技术,PULL分发通常由用户请求驱动。当用户请求的内容在本地的边缘Cache上不存在(未命中)时,Cache启动PULL方法从内容源或者其他CDN节点实时获取内容。在PULL方式下,内容的分发是按需的。
在实际的CDN系统中,一般两种分发方式都支持,但是根据内容的类型和业务模式的不同,在选择主要的内容分发方式时会有所不同。通常,PUSH的方式适合内容访问比较集中的情况,如热点的影视流媒体内容;PULL方式比较适合内容访问分散的情况。
在内容分发的过程中,对于Cache设备而言,关键的是需要建立内容源URL、内容发布的URL、用户访问的URL,以及内容在Cache中存储的位置之间的映射关系。
内容存储技术:对于CDN系统而言,需要考虑两个方面的内容存储问题。一个是内容源的存储,一个是内容在Cache节点中的存储。
对于内容源的存储,由于内容的规模比较大(通常可以达到几个甚至几十个TB),而且内容的吞吐量较大,因此,通常采用海量存储架构。如NAS和SON。
对于在Cache节点中的存储,是Cache设计的一个关键问题。需要考虑的因素包括功能和性能两个方面:在功能上包括对各种内容格式的支持、对部分缓存的支持,在性能上包括支持的容量、多文件吞吐率、可靠性、稳定性。
Cache存储的另一个重要因素是存储的可靠性,目前,多数存储系统都采用了RAID技术进行可靠存储。但是不同设备使用的RAID方式各有不同。
内容管理技术:内容管理重点强调内容进入Cache点后的内容管理,我们称为本地内容管理。
本地内容管理主要针对一个CDN节点(由多个CDN Cache设备和一个SLB设备构成)进行。本地内容管理的主要目标是提高内容服务的效率,提高本地节点的存储利用率。通过本地内容管理,可以在CDN节点实现基于内容感知的调度,通过内容感知的调度,可以避免将用户重定向到没有该内容的Cache设备上,从而提高负载均衡的效率。通过本地内容管理还可以有效地实现在CDN节点内容的存储共享,提高存储空间的利用率。
在实现上,本地内容管理主要包括如下几个方面。
一是本地内容索引。本地内容管理首先依赖于对本地内容的了解。包括每个Cache设备上内容的名称、URL、更新时间、内容信息等。本地内容索引是实现基于内容感知的调度的关键。
二是本地内容拷贝。通常,为了提高存储效率,同一个内容在一个CDN节点中仅存储一份,即仅存储在某个特定的Cache上。但是一旦对该内容的访问超过该Cache的服务提供能力,就需要在本地(而不是通过PUSL的方式)实现内容的分发。这样可以大大提高效率。
三是本地内容访问状态信息收集。搜集各个Cache设备上各个内容访问的统计信息,Cache设备的可用服务提供能力及内容变化的情况。
由于篇幅过长,影响阅读效果,下一节我们再继续总结分析。感兴趣得可以关注我的专栏哈,后续不定期更新相关云上服务各类姿势。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。