简述回源原理和CDN缓存

简述回源原理和CDN缓存,第1张

网上查了下资料,回源大致是指浏览器在发送请求报文时,响应该请求报文的是源站点的服务器,而不是各节点上的缓存服务器,那么这个过程相对于通过各节点上的缓存服务器来响应的话就称作为回源。回源的请求或流量太多的话,有可能会让源站点的服务器承载着过大的访问压力,进而影响服务的正常访问。

其实回源比和缓存的命中率正好相反,回源比高,说明缓存系统的缓存命中率低。回源比分为回源请求数比例和回源流量比例两种。

回源请求数比例 :收集所有边缘节点上的请求记录,没有缓存或缓存过期的请求以及不可缓存的请求均被作为回源请求,发往源站点服务器响应。其他的请求则由缓存系统直接使用缓存响应。其计算公式为: 回源请求数/(回源请求数+用户发送的请求数) 。

回源流量比 :即用户所产生的流量当中,有多少流量是直接有源站点服务器响应的,其计算公式为: 回源流量/(回源流量+用户请求访问的流量)

CDN,即Content Delivery Network,内容分发网络,其搭建的思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,尽量使内容传输的更快更稳定。CDN通过在网络边缘部署边缘服务器,依靠CDN中心平台的负载均衡、内容分发及调度等功能,使用户就近获取所需的内容,降低网络拥堵,提高用户访问响应速度和命中率。所以基本上CDN就是广泛采用各种缓存服务器,使得用户的请求直接由这些缓存服务器响应,加快了响应速度;只有在用户请求的资源在缓存服务器上没有找到或者请求访问的资源在源站点服务器上已经修改过的情况下,缓存服务器才会去访问源站点服务器以获取最新的资源。

下图为常见的CDN架构:

在CDN环境下,web访问数据通常会经历客户端本地缓存和CDN边缘节点缓存两个阶段。如果这两个阶段均无法响应客户的请求的话,那么最后会由CDN节点向源站点发起回源请求,进而从源站点获取最新的数据,更新CDN节点的本地缓存,最后将最新的数据返回给客户端。

CDN节点的缓存机制也是遵循http协议,因此也会受到Cache-Control等字段的影响。与此同时,CDN上的缓存时间的长短会对回源率产生直接的影响。若CDN缓存时间较短,CDN边缘节点上的数据会经常失效,导致频繁回源,增加了源站的负载,同时也增大的访问延时;若CDN缓存时间太长,会带来数据更新时间慢的问题。因此开发者需要增对特定的业务,来做特定的数据缓存时间管理。

一条缓存规则,该规则表示html后缀的文件会缓存5分钟。

不管访问多少次,X-Cache 始终是 MISS,X-Swift-CacheTime 也一直为 0。

X-Cache 为 MISS,X-Swift-CacheTime 为 0,CDN不缓存。

X-Cache 为 MISS,X-Swift-CacheTime 为 0,CDN不缓存。

X-Cache 为 MISS,X-Swift-CacheTime 为 0,CDN不缓存。

试下能否正常被CDN缓存。

X-Cache 变成了 HIT,X-Swift-CacheTime 变成了 300,也就是CDN缓存5分钟。

缓存规则权重不同,有两条缓存规则,其中 /static/ 目录类型的权重最大,意味着优先级最高。

请求 /static/ 目录下 html 后缀的文件,看下匹配到哪条规则?

X-Swift-CacheTime: 120,这是匹配到了 /static/ 目录类型的规则。

缓存规则权重相同, html 文件后缀名的规则创建时间最早,正常情况应该是匹配到该条规则。

X-Swift-CacheTime: 300,确实匹配到了 html 文件后缀名规则。

CDN不要设置缓存规则,然后nginx配置内容如下,Cache-Control设置为60秒,Expires设置为120秒。

源站响应头部有 Cache-Control 、 Expires 、 Last-Modified 、 ETag ,测试看看哪个优先级最高。

X-Swift-CacheTime: 60,Cache-Control 的优先级高一些。

在nginx配置中将 add_header Cache-Control "max-age=60" 去掉再试试。

X-Swift-CacheTime: 120,缓存规则是用 Expires 的时间了。

去掉nginx配置中的 expires 120s。

X-Swift-CacheTime 会随着时间变化,这是因为缓存过期了,CDN重新去源站拉取,然后重新计算缓存过期时间。

ok,最后一步,将 Last-Modified 响应头部给干掉。

只有 Etag 响应头部,不管访问几次,依旧是 X-Swift-CacheTime: 10。

将4个响应头部都干掉,看下CDN是否会缓存。

多次测试始终是 X-Cache: MISS 和 X-Swift-CacheTime: 0,这说明如果这4个响应头部都没了,CDN是不缓存的。

DN的全称是Content Delivery Network,即内容分发网络。其目的是通过在现有的Internet中增加一层新的网络架构,将网站的内容发布到最接近用户的网络”边缘”,使用户可以就近取得所需的内容,解决Internet网络拥挤的状况,提高用户访问网站的响应速度。从技术上全面解决由于网络带宽小、用户访问量大、网点分布不均等原因所造成的用户访问网站响应速度慢的问题。

实际上,内容分发布网络(CDN)是一种新型的网络构建方式,它是为能在传统的IP网发布宽带丰富媒体而特别优化的网络覆盖层;而从广义的角度, CDN代表了一种基于质量与秩序的网络服务模式。简单地说,内容发布网(CDN)是一个经策略性部署的整体系统,包括分布式存储、负载均衡、网络请求的重定向和内容管理4个要件,而内容管理和全局的网络流量管理(Traffic Management)是CDN的核心所在。通过用户就近性和服务器负载的判断,CDN确保内容以一种极为高效的方式为用户的请求提供服务。总的来说,内容服务基于缓存服务器,也称作代理缓存(Surrogate),它位于网络的边缘,距用户仅有”一跳”(Single Hop)之遥。同时,代理缓存是内容提供商源服务器(通常位于CDN服务提供商的数据中心)的一个透明镜像。这样的架构使得CDN服务提供商能够代表他们客户,即内容供应商,向最终用户提供尽可能好的体验,而这些用户是不能容忍请求响应时间有任何延迟的。据统计,采用CDN技术,能处理整个网站页面的 70%~Array5%的内容访问量,减轻服务器的压力,提升了网站的性能和可扩展性。

与目前现有的内容发布模式相比较,CDN强调了网络在内容发布中的重要性。通过引入主动的内容管理层的和全局负载均衡,CDN从根本上区别于传统的内容发布模式。在传统的内容发布模式中,内容的发布由ICP的应用服务器完成,而网络只表现为一个透明的数据传输通道,这种透明性表现在网络的质量保证仅仅停留在数据包的层面,而不能根据内容对象的不同区分服务质量。此外,由于IP网的”尽力而为”的特性使得其质量保证是依靠在用户和应用服务器之间端到端地提供充分的、远大于实际所需的带宽通量来实现的。在这样的内容发布模式下,不仅大量宝贵的骨干带宽被占用,同时ICP的应用服务器的负载也变得非常重,而且不可预计。当发生一些热点事件和出现浪涌流量时,会产生局部热点效应,从而使应用服务器过载退出服务。这种基于中心的应用服务器的内容发布模式的另外一个缺陷在于个性化服务的缺失和对宽带服务价值链的扭曲,内容提供商承担了他们不该干也干不好的内容发布服务。

纵观整个宽带服务的价值链,内容提供商和用户位于整个价值链的两端,中间依靠网络服务提供商将其串接起来。随着互联网工业的成熟和商业模式的变革,在这条价值链上的角色越来越多也越来越细分。比如内容/应用的运营商、托管服务提供商、骨干网络服务提供商、接入服务提供商等等。在这一条价值链上的每一个角色都要分工合作、各司其职才能为客户提供良好的服务,从而带来多赢的局面。从内容与网络的结合模式上看,内容的发布已经走过了ICP的内容(应用)服务器和IDC这两个阶段。IDC的热潮也催生了托管服务提供商这一角色。但是,IDC并不能解决内容的有效发布问题。内容位于网络的中心并不能解决骨干带宽的占用和建立IP网络上的流量秩序。因此将内容推到网络的边缘,为用户提供就近性的边缘服务,从而保证服务的质量和整个网络上的访问秩序就成了一种显而易见的选择。而这就是内容发布网(CDN)服务模式。CDN的建立解决了困扰内容运营商的内容”集中与分散”的两难选择,无疑对于构建良好的互联网价值链是有价值的,也是不可或缺的最优网站加速服务。

CDN的应用

目前的CDN服务主要应用于证券、金融保险、ISP、ICP、网上交易、门户网站、大中型公司、网络教学等领域。另外在行业专网、互联网中都可以用到,甚至可以对局域网进行网络优化。利用CDN,这些网站无需投资昂贵的各类服务器、设立分站点,特别是流媒体信息的广泛应用、远程教学课件等消耗带宽资源多的媒体信息,应用CDN网络,把内容复制到网络的最边缘,使内容请求点和交付点之间的距离缩至最小,从而促进Web站点性能的提高,具有重要的意义。CDN 网络的建设主要有企业建设的CDN网络,为企业服务;IDC的CDN网络,主要服务于IDC和增值服务;网络运营上主建的CDN网络,主要提供内容推送服务;CDN网络服务商,专门建设的CDN用于做服务,用户通过与CDN机构进行合作,CDN负责信息传递工作,保证信息正常传输,维护传送网络,而网站只需要内容维护,不再需要考虑流量问题。

CDN能够为网络的快速、安全、稳定、可扩展等方面提供保障。

IDC建立CDN网络,IDC运营商一般需要有分布各地的多个IDC中心,服务对象是托管在IDC中心的客户,利用现有的网络资源,投资较少,容易建设。例如某IDC全国有10个机房,加入IDC的CDN网络,托管在一个节点的Web服务器,相当于有了10个镜像服务器,就近供客户访问。宽带城域网,域内网络速度很快,出城带宽一般就会瓶颈,为了体现城域网的高速体验,解决方案就是将Internet网上内容高速缓存到本地,将Cache部署在城域网各POP点上,这样形成高效有序的网络,用户仅一跳就能访问大部分的内容,这也是一种加速所有网站CDN的应用。

CDN的技术原理

 

在描述CDN的实现原理,让我们先看传统的未加缓存服务的访问过程,以便了解CDN缓存访问方式与未加缓存访问方式的差别:

由上图可见,用户访问未使用CDN缓存网站的过程为:

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

浏览器调用域名解析函数库对域名进行解析,以得到此域名对应的IP地址;

浏览器使用所得到的IP地址,域名的服务主机发出数据访问请求;

浏览器根据域名主机返回的数据显示网页的内容。

通过以上四个步骤,浏览器完成从用户处接收用户要访问的域名到从域名服务主机处获取数据的整个过程。CDN网络是在用户和服务器之间增加Cache 层,如何将用户的请求引导到Cache上获得源服务器的数据,主要是通过接管DNS实现,下面让我们看看访问使用CDN缓存后的网站的过程:

通过上图,我们可以了解到,使用了CDN缓存后的网站的访问过程变为:

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

浏览器调用域名解析库对域名进行解析,由于CDN对域名解析过程进行了调整,所以解析函数库一般得到的是该域名对应的CNAME记录,为了得到实际IP地址,浏览器需要再次对获得的CNAME域名进行解析以得到实际的IP地址;在此过程中,使用的全局负载均衡DNS解析,如根据地理位置信息解析对应的IP 地址,使得用户能就近访问。

此次解析得到CDN缓存服务器的IP地址,浏览器在得到实际的IP地址以后,向缓存服务器发出访问请求;

缓存服务器根据浏览器提供的要访问的域名,通过Cache内部专用DNS解析得到此域名的实际IP地址,再由缓存服务器向此实际IP地址提交访问请求;

缓存服务器从实际IP地址得得到内容以后,一方面在本地进行保存,以备以后使用,二方面把获取的数据返回给客户端,完成数据服务过程;

客户端得到由缓存服务器返回的数据以后显示出来并完成整个浏览的数据请求过程。 通过以上的分析我们可以得到,为了实现既要对普通用户透明(即加入缓存以后用户客户端无需进行任何设置,直接使用被加速网站原有的域名即可访问),又要在为指定的网站提供加速服务的同时降低对ICP的影响,只要修改整个访问过程中的域名解析部分,以实现透明的加速服务,下面是CDN网络实现的具体操作过程。

作为ICP,只需要把域名解释权交给CDN运营商,其他方面不需要进行任何的修改;操作时,ICP修改自己域名的解析记录,一般用cname方式指向CDN网络Cache服务器的地址。

作为CDN运营商,首先需要为ICP的域名提供公开的解析,为了实现sortlist,一般是把ICP的域名解释结果指向一个CNAME记录;

当需要进行sorlist时,CDN运营商可以利用DNS对CNAME指向的域名解析过程进行特殊处理,使DNS服务器在接收到客户端请求时可以根据客户端的IP地址,返回相同域名的不同IP地址;

由于从cname获得的IP地址,并且带有hostname信息,请求到达Cache之后,Cache必须知道源服务器的IP地址,所以在CDN运营商内部维护一个内部DNS服务器,用于解释用户所访问的域名的真实IP地址;

在维护内部DNS服务器时,还需要维护一台授权服务器,控制哪些域名可以进行缓存,而哪些又不进行缓存,以免发生开放代理的情况。

CDN的网络架构

CDN网络架构主要由两大部分,分为中心和边缘两部分,中心指CDN网管中心和DNS重定向解析中心,负责全局负载均衡,设备系统安装在管理中心机房,边缘主要指异地节点,CDN分发的载体,主要由Cache和负载均衡器等组成。

当用户访问加入CDN服务的网站时,域名解析请求将最终交给全局负载均衡DNS进行处理。全局负载均衡DNS通过一组预先定义好的策略,将当时最接近用户的节点地址提供给用户,使用户能够得到快速的服务。同时,它还与分布在世界各地的所有CDNC节点保持通信,搜集各节点的通信状态,确保不将用户的请求分配到不可用的CDN节点上,实际上是通过DNS做全局负载均衡。

对于普通的Internet用户来讲,每个CDN节点就相当于一个放置在它周围的WEB。通过全局负载均衡DNS的控制,用户的请求被透明地指向离他最近的节点,节点中CDN服务器会像网站的原始服务器一样,响应用户的请求。由于它离用户更近,因而响应时间必然更快。

每个CDN节点由两部分组成:负载均衡设备和高速缓存服务器

负载均衡设备负责每个节点中各个Cache的负载均衡,保证节点的工作效率;同时,负载均衡设备还负责收集节点与周围环境的信息,保持与全局负载DNS的通信,实现整个系统的负载均衡。

高速缓存服务器(Cache)负责存储客户网站的大量信息,就像一个靠近用户的网站服务器一样响应本地用户的访问请求。

CDN的管理系统是整个系统能够正常运转的保证。它不仅能对系统中的各个子系统和设备进行实时监控,对各种故障产生相应的告警,还可以实时监测到系统中总的流量和各节点的流量,并保存在系统的数据库中,使网管人员能够方便地进行进一步分析。通过完善的网管系统,用户可以对系统配置进行修改。

理论上,最简单的CDN网络有一个负责全局负载均衡的DNS和各节点一台Cache,即可运行。DNS支持根据用户源IP地址解析不同的IP,实现就近访问。为了保证高可用性等,需要监视各节点的流量、健康状况等。一个节点的单台Cache承载数量不够时,才需要多台Cache,多台Cache同时工作,才需要负载均衡器,使Cache群协同工作。


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/23396.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-02-16
下一篇2023-02-16

发表评论

登录后才能评论

评论列表(0条)

    保存