探索服务器端的局域网——内容分发服务

1、利用内容分发服务分担负载:

缓存服务器部署在服务器端还是客户端,其效果是有差别的(如下图所示)。

当缓存服务器放在服务器端时,可以减轻Web服务器的负载,但无法减少互联网中的流量(如上图a)。这一点上,将缓存服务器放在客户端更有效(如上图b)。互联网中会存在一些拥塞点,通过这些地方会比较花时间。如果在客户端部署缓存服务器,就可以不受或者少受这些拥塞点的影响,让网络流量更稳定,特别是当访问内容中含有大图片或视频时效果更明显。不过,客户端的缓存服务器是归客户端网络运营商管理者所有的,Web服务器的运营者无法控制它。

这两种部署方式各有利弊,所以就有了另一种方式能够集合两者的优点(如上图c),Web服务器运营者和网络运营商签约,将可以自己控制的缓存服务器放在客户端的运营商。但这种方式也有问题,对于在互联网上公开的服务器来说,任何地方的人都可以来访问它,因此如果真要实现这个方式,必须在所有的运营商POP中都部署缓存服务器才行,这个数量太大了,非常不现实。

为了解决这个问题,一些专门从事相关服务的厂商出现了,他们来部署缓存服务器,并租借给Web服务器运营者。这种服务称为内部分发服务(CDS Content Delivery Service),现在更常用的名称叫CDN(Content Delivery Network 或 Content Distribution Network)。提供这种服务的厂商称为CDSP(Content Delivery Service Provider,内容分发服务运营商),他们会与主要的供应商签约,并部署很多台缓存服务器。另一方面,CDSP会与Web服务器运营者签约,使得CDSP的缓存服务器配合Web服务器工作。

2、如何找到最近的缓存服务器:

我们可以像正向代理一样在浏览器中进行设置,但是用户那么多,没办法帮所有人去设置浏览器。因此,我们需要一种机制,即便用户不进行任何设置,也能够将请求消息发送到最近的缓存服务器。

第一种方法是像负载均衡一样用DNS服务器来分配访问。这个方法的关键点在于DNS服务器需要判断客户端与缓存服务器的距离,并返回距离客户端最近的缓存服务器IP地址。首先,作为准备,需要事先从缓存服务器部署地点的路由器收集路由信息。接下来,DNS服务器根据路由表查询从本机到DNS查询消息的发送方,也就是客户端DNS服务器的路由信息。通过这样的信息可以大致估算出距离,然后就可以通过比较找出哪台路由器距离客户端DNS服务器最近。实际上,客户端DNS服务器不一定和客户端在同一个位置,因此可能无法得出准确的距离,但依然可以达到相当的精度。

3、通过重定向服务器分配访问目标:

还有另一种方法可以让客户端访问最近的缓存服务器。HTTP规格中有一个头部字段Location,当Web服务器数据转移到其他服务器时可以使用这个字段。这种将客户端访问引导到另一台Web服务器的操作称为重定向,通过这种方法也可以将访问目标分配到最近的缓存服务器(如下)。

HTT/1.1 302 Found

Date: Wed, 21 Feb 2007 13:13:05 GMT

Server: Apache

Location: http://192.0.2.80/sample.html

Connection: close

Transfer-Encoding: chunked

Content-Type: text/html; charset=iso-8859-1

当使用重定向告知客户端最近的缓存服务器时,首先需要将重定向服务器注册到Web服务器端的DNS服务器上。这样一来,客户端会将HTTP请求消息发送到重定向服务器上。重定向服务器和上一种方法中的DNS服务器一样,收集了来自各个路由器的路由信息,并根据这些信息找到最近的缓存服务器,然后将缓存服务器的地址放到Location字段中返回响应。这样,客户端就会重新去访问指定的缓存服务器了。

这种方法的缺点在于增加了HTTP消息的交互次数,相应的开销也比较大,但它也有优点。对DNS服务器进行扩展的方法是估算客户端DNS服务器到缓存服务器之间的距离,因此精度较差;相对而言,重定向的方法是根据客户端发送来的HTTP消息的发送方IP地址来估算距离的,因此精度较高。

此外,重定向服务器还可以返回一个通过网络包往返时间估算到缓存服务器的距离的脚本,通过在客户端运行脚本来找到最优的缓存服务器。这个脚本可以向不同的缓存服务器发送测试包并计算往返时间,然后将请求发送到往返时间最短的一台缓存服务器。

4、缓存的更新方法会影响性能:

缓存内容的更新方法同样也会影响到缓存服务器的效率。缓存本来的思路是将曾经访问过的数据保存下来,然后当再次访问时拿出来用,以提高访问操作的效率。不过,这种方法对于第一次访问是无效的,而且后面的每次访问都需要向原始服务器查询数据有没有发生变化,如果遇到网络拥塞,就会使响应时间恶化。

要改善这一点,有一种方法是让Web服务器在原始数据发生更新时,立即通知缓存服务器,使得缓存服务器上的数据一直保持最新状态。内容分发服务采用的缓存服务器就具备这样的功能。

此外,还有一些数据是在收到请求后由CGI程序生成的动态页面,这种动态页面是不能保存在缓存服务器上的。对于这种情况,我们需要将应用程序生成的部分,与内容不会发生变化的静态部分分开,只将静态部分保存在缓存中。

Guess you like

Origin blog.csdn.net/qq_38386085/article/details/104276583