概述
为了提升Web服务的性能,简单且兼具协同性的缓存系统被广泛应用于互联网中。一般来说,Web缓存系统由客户端、缓存代理和Web服务器组成。缓存代理置于服务器和客户端之间,它们合作为客户端提供缓存。当客户端请求一个Web页面时,它会先检查自己的缓存情况。如果失败,它将向其中一个缓存代理发送页面请求。如果所请求的页面没有在该代理处找到,它将向其协同代理发送请求。如果在这些代理中部未找到所请求的页面,请求将被发送至远程Web服务器以获得原始页面。Web缓存系统降低了带宽的使用、Web服务器的工作负担和客户端的查询延迟。
Web缓存系统在很大程度上提升了Web服务的性能。但是由MANET的移动性和资源约束,这种方案并不能直接应用于MANET环境中。MANET中的所有节点都是移动的,网络拓扑也随之频繁更换,所以在MANET中建立缓存代理几乎是不可能的。冈此,为实现MANET环境中的协同缓存系统,必须要采用一种不同的方法。近来,学术界已提出一些用于在MANET中应用协同缓存的方法。在这些方法中,每个移动节点都具备一定数量的缓存空间,这些空间可以被自身或相邻节点访问。各个节点不仅能够从自身的缓存空问获得请求数据,还能从其相邻节点的缓存空间中获得。通过这种方法,每个节点就拥有了比它本身更大的缓存空间。1
协同缓存系统中的基本操作协同缓存系统包括以下模块。
信息搜索(或缓存分辨):该模块用于处理客户端寻找请求数据项的操作。返回的数据可能来自数据源的原始数据或移动节点的缓存副本。
缓存管理:包括三个子模块:缓存准入控制,它决定是否缓存所接收的数据项;缓存替换,在缓存空间已满但还有新的数据项必须被缓存时,它决定缓存空间移除哪个缓存项;缓存一致性,它负责缓存数据项与数据源的原始数据项同步。绝大多数方法都是采用基于生存时间(TTL,Time-to-live)的缓存一致性策略,这里给每个数据项指定一个TTL值,该值表示数据项存于缓存空间的时间,缓存数据项在TTL逝去前被视为是有效的。
预取:它负责决定哪个数据项应从数据源中预先取出以备将来使用。1
现有的协作式缓存系统按照缓存信息的保存位置。将协作式缓存系统分为两种:基于分布式管理的合作缓存系统和基于集中式管理的合作缓存系统。
基于分布式管理的合作缓存系统Harvest,Squid是基于分布式管理的合作缓存系统,它们采用ICP协议,通称为ICPS系统,其结构如图所示。其基本思想是如果一个请求在本地代理缓存上得不到满足,那么本地代理服务器就向其兄弟和父亲节点发出查询命令,如果还不能命中。则继续向上级节点查询,直到在指定的有效时间内命中为止。它采用层次结构,简单易行,但有两个致命的缺点:其一,随着相互协作的代理数目的增加,由查询带来的网络流量和时间延迟十分可观;其二,ICP根本没有协调每个代理缓存的内容,在最坏情况下,所有的代理缓存中的缓存内容是一致的,最终使得协同缓存系统没有发挥出任何的优势。
基于集中式管理的合作缓存系统基于集中式管理的合作缓存系统的典型代表是CRISP系统,其结构如图所示。在CRISP中,代理的相互合作是通过地址映射服务器完成的。当请求在一个代理中失效时,代理向地址映射服务器发请求,地址映射服务器根据地址映射表能够确定在代理缓存系统中是否有请求的文件。若有,本地代理则从系统的其他代理中取回并缓存文件,然后返回给用户;如果没有,则直接向Web源服务器发请求。通过使用地址映射服务器,减少了代理之间的通信量,算法简单,容易实现。但是随着系统规模的增加,地址映射服务器可能成为系统的瓶颈,造成网络拥塞,而且一旦其失效,各代理之间就无法合作,大大降低了系统的可用性。2