探索服务器端的局域网——使用缓存服务器分担负载

1、如何使用缓存服务器:

缓存服务器是一台通过代理机制对数据进行缓存的服务器。当进行中转时,它可以将Web服务器返回的数据保存在磁盘中,并可以代替Web服务器将磁盘中的数据返回给客户端。这种保存的数据称为缓存,缓存服务器指的也就是这样的功能。

Web服务器需要执行检查网址和访问权限,以及在页面上填充数据等内部操作,因此将页面数据返回客户端所需的时间较长。相对地,缓存服务器只要将保存在磁盘上的数据读取出来发送给客户端就可以了,因此可以比Web服务器更快地返回数据。

不过,如果Web服务器更新了数据,那么缓存的数据就不能用了,因此缓存并不是永久可用的。此外,CGI程序等产生的页面数据每次都不同,这些数据也无法缓存。无论如何,在来自客户端的访问中,总有一部分访问可以无需经过Web服务器,而由缓存服务器直接处理。即便只有一部分操作通过缓存服务器提高了速度,整体性能也可以得到改善。此外,通过让缓存服务器处理一部分请求,也可以减轻Web服务器的负担,从而缩短Web服务器的处理时间。

2、缓存服务器通过更新时间管理内容:

缓存服务器和负载均衡器一样,需要代替Web服务器被注册到DNS服务器中。然后客户端会向缓存服务器发送HTTP请求消息。这时,缓存服务器会接收到请求消息,这个接收操作和Web服务器相同。简单来说就是创建用来等待连接的套接字,当客户端进行连接时执行连接操作,然后接收客户端发送的请求消息。从客户端来看,缓存服务器就相当于Web服务器。接下来,缓存服务器会检查请求消息的内容,看看请求的数据是否已经保存在缓存中。如果不存在缓存数据,缓存服务器会在HTTP头部中添加一个Via字段(例如Via: 1.1 proxy.lab.glasscom.com),表示这个消息经过缓存服务器转发,然后将消息转发给Web服务器。

在这个过程中,缓存服务器会以客户端的身份向目标Web服务器发送请求消息。也就是说,它会先创建套接字,然后连接到Web服务器的套接字,并发送请求消息。从Web服务器来看,缓存服务器就相当于客户端。于是,缓存服务器会收到来自Web服务器的响应消息,接收消息的过程也是以客户端的身份来完成的。

接下来,缓存服务器会在响应消息上加上Via字段(例如Via: 1.1 proxy.lab.glasscom.com),表示这个消息是经过缓存服务器中转的,然后缓存服务器会以Web服务器的身份向客户端发送响应消息。同时,缓存服务器会将响应消息保存到缓存中,并记录保存的时间。随着缓存数据的积累,用户访问的数据命中缓存的几率也会提高。

如果命中缓存,缓存服务器会添加一个If-Modified-Since头部字段并将请求转发给Web服务器,询问Web服务器用户请求的数据是否已经发生变化。然后Web服务器会根据If-Modified-Since的值与服务器上的页面数据的最后更新时间进行比较,如果在指定时间内数据没有变化,就会返回一个表示没有变化的响应消息(如下)。

HTTP/1.1 304 Not Modified------------------------------(表示页面数据没有变化)

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

Server: Apache

Connection: close

ETag: "22f236-3e9-3b7f46d8"

这时,Web服务器只要查询一下数据的最后更新时间就好了,比返回页面数据的负担要小一些。而且返回的响应消息也比较短,能相应地减少负担。接下来,返回消息到达缓存服务器,然后缓存服务器就会知道Web服务器上的数据和本地缓存中的数据是一样的,于是就会将缓存的数据返回给客户端。缓存服务器返回的响应消息的内容和没有命中缓存的情况是一样的(也包含Via字段,例如Via: 1.1 proxy.lab.glasscom.com)。此外,当Web服务器上的数据有变化时,后面的过程和没有命中缓存的情况是一样的。

3、最原始的代理——正向代理:

实际上,缓存服务器使用的代理机制最早就是放在客户端一侧的,这才是代理的原型,称为正向代理(forward proxy)。其实,正向代理并不是一开始就叫这个名字,最早说的“代理”指的就是正向代理,或者也叫“代理服务器”。这是因为最早只有这么一种代理,后来出现了各种其他代理,为了相互区别才起了“xx代理”这样的名字。代理出现于ADSL、FTTH等技术实用化之前,那个时候还没有廉价高速的接入网,因此必须想办法榨干低速接入网的所有能力。代理的缓存功能正是有效利用低速接入网的一种方法。

在使用正向代理时,一般需要在浏览器的设置窗口中的“代理服务器”一栏中填写正向代理的IP地址,浏览器发送请求消息的过程也会发生相应的变化。当设置了正向代理时,浏览器会忽略网址栏的内容,直接将所有请求发送给正向代理。请求消息的内容也会有一些不同。没有正向代理时,浏览器会从网址中提取出Web服务器域名后面的文件名或目录名,然后将其作为请求的URI进行发送;而有正向代理时,浏览器会在请求的URI字段中填写完整的http://...网址(如下)。

GET http://www.lab.glasscom.com/sample3.html HTTP/1.1

Accept: */*

Accept-Language: zh

Accept-Encoding: gzip, deflate

User-Agent: Mozilla/4.0 (compatible;)

Host: www.lab.glasscom.com

Connection: Keep-Alive

正向代理转发消息的过程也和服务器端的缓存服务器有一些不同。使用正向代理时,URI部分为http://...这样的完整网址,因此可以根据这个网址来转发,不需要像服务器端的缓存服务器一样事先设置好转发的Web服务器,而且可以发给任意Web服务器。而服务器端的缓存服务器只能向事先设置好的目标进行转发。

4、正向代理的改良版——反向代理:

使用正向代理需要在浏览器中进行设置,这可以说是识别正向代理的一个特征。但是,设置浏览器非常麻烦,如果设置错误还可能导致浏览器无法正常工作。

于是,我们可以对这种方法进行改良,使得不需要在浏览器中设置代理也可以使用。也就是说,我们可以通过将请求消息中的URI中的目录名与Web服务器进行关联,使得代理能够转发一般的不包含完整网址的请求消息。前面介绍的服务器端的缓存服务器采用的正是这种方式,这种方式称为反向代理(reverse proxy)。

5、透明代理:

缓存服务器判断转发目标的方法还有一种,那就是查看请求消息的包头部。因为包的IP头部中包含接收方IP地址,只要知道了这个地址,就知道用户要访问哪台服务器了(HTTP 1.1 版本增加了一个用于表示访问目标Web服务器的Host字段,因此也可以通过Host字段来判断转发目标)。这种方法称为透明代理(transparent proxy)。

透明代理存在于请求消息从浏览器传输到Web服务器的路径中,当消息经过时进行拦截。因此一般是将网络设计成只有一条路可以走的结构,然后在这一条路径上放置透明代理。连接互联网的接入网就是这样一个关口,因此可以在接入网的入口处放置透明代理。使用透明代理时,用户不会察觉到代理的存在,也不会注意到HTTP消息是如何被转发的,因此大家更倾向于将透明代理说成是缓存。

Guess you like

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