当前位置:首页 期刊杂志

缓存技术在Web中的应用研究*

时间:2024-06-19

王 鑫

(潍坊学院,山东 潍坊 261061)

Internet的快速发展使Web服务器必须面对访问者数量快速增加的局面,这就要求网络服务器需要具备提供大量并发访问服务的能力。因此,对于提供大负载Web服务的服务器来讲,CPU、I/O处理能力很快会成为瓶颈,用户访问的速度会下降,等待网络反应的时间将加长。调查证明,用户愿意等待网站反应的平均时间不足10秒。所以,许多运营商和服务提供商正在斥巨资来提高网络带宽。

然而,仅仅依靠额外的带宽还不能解决网络等待时间或加速响应缓慢的源服务器的问题。研究发现, H TTP协议在等待建立连接方面花费了比传输数据更多的时间,如果能够减少等待的时间,也就可以加速网络的反应速度。我们再看一下Web服务器方从接收到一个用户的请求到将用户所要的数据传输给对方的过程,对每一个请求,服务器都要先在硬盘上找到相应的对象,某些请求还要访问数据库,然后将数据读出,放入内存中,再传输给用户。所以,可以通过减少建立网络连接的次数和加快服务器端的处理速度来提高整个网络的反应速度。

缓存技术有效地缩短了网络用户取回文档的时间,加快了Web服务器的反应速度。它通过将内容移到距离用户更近的地方解决了这些问题。缓存技术不仅有利于终端用户,而且也有利于互联网服务提供商和内容提供商。由于未来所有企业都将实现电子商务,都要面临峰值负载下快速响应用户的问题,因此缓存技术的合理应用将为所有的电子商务网站提供重要的竞争优势。

1 Web中缓存技术的应用

1.1 客户端的缓存技术

在浏览器中使用缓存技术的思路很简单,把用户以前访问的文档都缓存起来,在用户以后访问同样的文档时,就可以从浏览器的缓存中取出,而不需要重新建立一次H TTP连接。

现今的浏览器对一些高级功能如XML、DH TML、Java小程序和远程数据服务提供支持,使用相应的功能可以执行客户机验证数据缓存,免去了到Web服务器的往返。可以降低Web服务器上的负载,并能减少网络通信量以及服务器访问的任何后台资源。所以,如果可能,则应该在浏览器里扩大缓存容量。

1.2 代理端的缓存技术

建立一个缓存代理可以使分布的用户访问网络时都经过这个代理。这样能加快使用该代理用户的网络反应速度,因为一个用户访问一个文档时,由于该文档在早些时候被另一个该局域网的用户访问过而在缓存中,对这个用户来说,文档就可以直接从代理的缓存中获得,而不必到原始的Web服务器中去取了。所以,如果客户的Web浏览器配置Proxy代理服务器的IP地址及TCP端口号,这样客户的所有Web请求都经过缓存的代理访问Internet。在缓存服务器代理用户请求访问Internet之前,它先检查自身是否已经缓存了用户请求访问的Web对象,如果已经缓存并且没有过期,那么就用本地缓存的Web对象响应客户的请求,从而加快了用户的访问时间,并且节省了宝贵的广域网链路带宽资源。此种类型称为Forward -Proxy正向代理。

另一种类型称为 Transparent-cache透明缓存,与Fo rw ard-Proxy正向代理类型的唯一区别在于,无需在客户的Web浏览器中配置任何信息,现在有多种设备能与缓存服务器配合可实现代理功能。

1.3 服务器端的缓存技术

服务器端缓存的目的是缩短服务器对用户请求的反应时间、增加服务器的吞吐量。

1.3.1 内容缓存

当用户访问Web服务器存取H TML页面时,一般Web服务器需要从硬盘上读取H TM L文件,然后传输给用户。每次用户访问,Web服务器都重复相同的处理过程。

内容缓存则将用户经常访问的H TML页面或者Web处理结果存储在服务器的内存当中,在用户请求某一服务时,服务器首先从内存中检索是否有相同的结果,如果存在,则不必重新处理,而直接将结果返给用户。由于内存的存取速度远比硬盘的存取速度快,所以服务器系统的响应时间可以缩短。

1.3.2 数据库连接缓存

我们知道,通常用户通过Web服务器访问数据库时,Web上的应用程序和数据库服务器之间需要首先建立连接,然后才能存取数据,在处理结束后,这种连接被关闭。每次用户访问都需要重复这样的步骤。由于数据库连接过程比较消耗系统资源,而且时间开销也比较大,尤其是利用公共网关接口CGI(Common Gateway Interface)进行连接时,效率尤其低,通常情况下,连接过程对系统响应时间的影响是很大的。

数据库连接缓存是指在Web服务器和数据库服务器之间建立经常性的连接,当用户需要访问数据库时,直接利用这些已经存在的连接,操作结束后,连接仍然保持而不关闭,这样一来,用户访问数据库的步骤被简化,进而提升系统的效率。

2 缓存内容的替换策略

Web访问模式具有较好的时间局部性(最近访问的对象在最近的将来还可能被再次访问),这一点就导致了基于LRU的替换策略应是缓存的首选策略;另外,Web对象的访问频度在短时间内不稳定,但在较长的时间段内相对平稳,因此在缓存替换策略中通常还要考虑到长期访问频度的影响。

基于缓存的上述特点,可用于缓存中的替换算法如下:

(1)FIFO:这是最简单的一种替换策略,就是先进先出。当然这种替换策略的效率也是最低的。

(2)LRU(Least Recently U sed):最近最久未被访问的对象被替换,最先移出最近最少使用的对象,其优点是实现简单(基于时间局部性,过去最久未被访问的在将来最不可能被访问),此策略用在缓存中是很有效的。其缺点是没有考虑对象大小或延迟时间。

(3)Size策略:首先清除大对象,如果一样大,那么最长时间没有被使用的对象被首先替换掉。其优点是移出大文档,可以保留更多的小文档,产生更高的请求命中率。其缺点是可能使小文档永远留在缓存器中,字节命中率偏低,且再次下载大对象时,占用网络资源很多。

(4)GD-Size算法:Greedy-Dual Size算法。这是个基于代价的贪婪算法。缓存器中的每个页面都有相应的价值H,当网页被带进缓存器时,该网页的 H值为1/Size。发生替换时,最小 H的页面(minH)被换出,剩下的页面的H值变为替换前的H值减去minH。如果页面被再次访问,则恢复其原来的价值。该算法的优点是不再被访问的页面会被清除,克服了Size算法的缺点。

但是,在传统的缓存替换算法中的LFU(least frequency used)和LRU(我们已知道LRU是将上一次使用时间最短的数据优先存放在缓存中,LFU则是将过去使用频率高的数据优先保存在缓存中)这两种算法代表了两个极端,LFU使用数据的访问频率,有利于数据的总体优化使用,但不利于数据访问方式的变化和猝发访问。LRU依据最近一次的访问时间,能较好地适应数据访问的变化,但只是在访问时间上的局部优化,没有考虑数据长期的访问特性。有一些算法如LRU的变种LRFU和LRU-K等试图在数据的访问时间和访问频率两方面达到平衡。如LRFU算法给近几次访问时间乘上一个与访问频率有关的权重,以加权值来取得两者之间的平衡。LRU-K算法则是使用最后第 K次访问时间来扩展LRU算法,依靠K值的大小进行平衡。它们都是对访问时间的修正,是对LRU算法的改进,我们在缓存的替换算法中可以采用。还有几种可以利用的改进算法如下:

(1)Log(Size)+LRU(LRU-M IN):先判断大小,先让大对象使用LRU策略,然后再对连续的小对象使用。

(2)LRU-Threshold:在LRU上设置一个上限值,大于它的从不被缓存。当对于不需要发生替换的缓存大小,磁盘大小较小时采用这个策略。可以保证一定缓存空间,并有比LRU-M IN更高的性能。这个策略的缺点是,理想上限的值主要依赖于缓存的工作量和磁盘大小。

(3)先使用LRU-M IN策略,直到缓存大小达到可达磁盘大小的100%,改用LRU-Threshold,设置上限,上限逐渐减小直到缓存大小达到低水准。

(4)Hybrid:目标为减小总延迟。基本的LFU算法总是替换具有最低访问频度的对象,对它的改进也要考虑到不同的对象大小和失效开销。在Hybrid算法中,设计了一个函数,计算缓存里存放的对象的值。函数值最小的对象被替换。例如,在服务器S上的对象P的函数依赖如下参数:Cs,连接服务器S的时间; Bs,到服务器S的带宽;Np,P进入缓存后被访问的次数;Zp,对象P的大小(字节数)。函数定义如下:

W b和W n是常数,Cs和Bs的估算基于最近的过去中从服务器S取得的文档数量。

3 Web中缓存内容的更新

要让用户访问到最新的内容,就要保证在当前缓存中的对象必须是最新的。所以,对已经缓存的内容进行及时更新是缓存能发挥作用的另一关键所在。

缓存静态页面后,更新时间间隔可能很长,而缓存的动态页面需根据实际情况动态更新。为了保证客户浏览到最新的动态内容,可以在服务器端利用三种方法决定缓存何时被清除或过期:时间、事件、手动。

3.1 时间

通过在服务器中设置网页的生存时间来自动更新缓存内容。

3.1.1 头标志

使用ASP技术的电子商务网站,可以在服务器上设置Expires头标志,或者通过使用标记来设置到期时间。在服务器端的ASP文件中可以设置Response.Expires或Response.ExpiresA bsolute,要设置页面使其过多长分钟后到期,如15分钟,可以如下设置:

若将Response.Expires的设置为负数或0,则可以禁用缓存。用另外一个属性Response.ExpiresAbsolute将可以设置内容过期的具体时间:

如果使用标记来设置Expires头标志,可以使用下面的语法:

在PHP中,一个可缓存的页面必须包含Last-Modified标记。

一般纯静态页面本身都会有Last-Modified信息,动态页面需要通过函数强制加上:

另外,必须有Expires或Cache-Control:max-age标记设置页面的过期时间。对于静态页面,通过apache的mod_expires根据页面的M IM E类型设置缓存周期。对于动态页面,则可以直接通过写入 H TTP返回的头信息,比如对于新闻首页index.php可以是20分钟,而对于具体的一条新闻页面可能是1天后过期。比如:在php中加入了1个月后过期:

3.1.2 “懒惰”更新

我们知道Internet Exp lo rer 5有一项叫作Lazy Update(“懒惰”更新)的新特性。同样,利用Lazy Update性能可使服务器将一个对象缓存起来,同时又可以计算此对象的被点击数。这对广告图像、首页或搜索页是非常有用的。在这些页面上,用户可以立即看到页面,又可以在某些地方更新内容并且跟踪记录有多少人已看过你的页面。对于一个Lazy Update页面,在它首次被访问时,其上的对象就被下载并被高速缓存起来。接下来,用户看到的是被缓存起来的内容。如果服务器有了新的内容,则该页面将会在后台被下载到高速缓存中。当用户下次访问该页面时,将显示被更新的内容。还可以为某些缓存页面记录更新时间,时间到期后,便立即连接Web服务器,刷新缓存内容,在此,可以利用H TTP头信息使用两种新的时间间隔指示:p re-check和post-check。用p re-check扩展名定义一段时间间隔(以秒记):在这段时间间隔之后,一个对象在显示给用户之前应被选中进行更新。选中对象也可以发生在该对象已经显示给用户之后,但是,要保证在用户下次想要看这个对象时,被高速缓存起来的副本是更新过的。用post -check扩展名定义另一段时间间隔(以秒记):在这段时间之后,在显示给用户之前,该对象被选中进行更新。

3.2 事件

Web服务器还应该能够通过某一事件被触发确保缓存内容是最新的。这些事件可能是来自数据库、客户端访问、内容管理系统,或任何可被追踪的事件。例如,当数据库某个项目的数值被改变时会导致某些缓存内相关的页面实体被清除。服务器如果有外部事件管理功能,就可以让用户能轻易地配置对某一文件的缓存操作。

3.3 手动

根据实际情况,通过发出手动指令,管理员能在任何时间更新页面实体或整个缓存,使之真正成为市场驱动的Web网站,从而能保持产品信息随条件改变而实时更新。

4 结束语

Web中的缓存技术加快了最终用户访问Internet的时间,节省了与宽带接入服务提供商联接的费用,不仅满足了网站最终用户对访问速度的要求,加强了客户的满意度,同时也减轻了网站原始Web服务器的负载,这对网站带来的好处是显而易见的。另外,对缓存内容的进行合理替换和即时更新更是必需的,这也正是缓存能真正发挥作用的关键所在。

[1]Larry L Peterson.Computer Netwo rks A System s App roach[M].北京:机械工业出版社,2004.

[2]Kevin Dow nes.Internetworking Technology Handbook[M].Macmillan Computer Publishing,1999.

[3]Tere Parnell.Guide to Buiidind High-Speed Netwo rks[M].北京:机械工业出版社,1998.

[4]虞春宜.Cache技术在万维网上的应用[J].计算机工程与应用,2002,(2):147-149.

[5]林永旺.Web缓存的一种新的替换算法[C].北京:中国科学院计算机网络信息中心,2001.

[6]范毅波.一“缓”一“急”:Web缓存加速Internet[N].网络世界,2001-01-15.

免责声明

我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!