您的位置:首页 >资讯列表 > 正文
发布时间:2020-04-18 16:45
HTTP实现代理服务器及缓存替换算法的研究

  随着计算机技术的发展和Internet的普及,人们对网络的依赖已深入到日常生活中的各个领域,网上购物、视频聊天、搜寻信息等网络活动使人们可以随时随地地与网络保持紧密的联系,不仅给人们的生活带来了许多便利,而且使人们的生活变得丰富多彩。然而,在网络迅猛发展的同时,网络管理给人们带来了新的课题,网络安全问题[1-2]、IP地址受限、网络流量和网页访问延迟等成为人们关注的焦点,因为它影响着网络的持续发展。


  在解决上述问题的过程中,人们普遍采用两种解决思路,即:提高Web服务器的处理能力,增加网络带宽和提高现有系统的利用率。具体方法有:


  (1)完善HTTP协议。该方法的主要依据和出发点是:不完善的网络协议将消耗部分带宽,从而加剧了带宽的不足。因此,我们可以通过完善协议来解决问题。


  (2)使用镜像技术。该方法能够提高网络速度,应用比较广泛。但是,存在着一定的缺陷,例如:成本和费用以及一致性问题。


  (3)集群技术。集群技术是将客户端的请求按照一定的算法分配到一台或者多台服务器上,然后由这一台或多台服务器共同响应客户端的请求,从而达到提高网络访问速度的目的。群集系统在一定限度上提高了Web系统的可用性和处理能力,但是集群系统无法解决Internet带宽存在的限制。


  (4)对传输的文档进行压缩。通过对传输的文档进行压缩后,不仅可以减少网上数据的传输量,而且可以改善用户的检索延迟。


  (5)使用Web缓存技术。Web缓存的基本依据和出发点是:如果一个文档可能被使用两次或者两次以上,那么可以在这个文档第一次被使用时将其保存在客户机或者本地服务器中,因此,在后续的访问中,我们可以直接从客户机或本地服务器直接获得该文档,而不必再访问Web服务器。这种技术不仅可以大大缩短访问距离,减少信息的传输时间,而且还可以减轻网络和Web服务器的负担。


  (6)使用Web预取技术。该技术利用浏览器会话中连续两个页面的下载之间存在的空闲时间,提前把使用者不久将要使用的文档取回并保存到缓存中,使用该方法可以减少实际访问的等待时间。


  在解决上述问题的方法中,代理缓存技术[3-12]被公认为是一种行之有效的方法,它也是目前人们常采用的方法,成为众多研究者们研究的热点。代理服务器[13-16]是介于客户端和Web服务器之间,当网络用户访问Internet上的信息时,代理用户获取网络信息的一个服务器。在传统的Web通信中,当客户端向服务器发送请求时,服务器响应该请求,并将数据传递给客户端。引入代理服务器后,它成为客户端与服务器的中介,当客户端向服务器发送请求时,该请求首先被送到代理服务器,代理服务器对接收到的请求进行分析,并在代理缓存中查看是否有该请求数据,若有,代理服务器直接将其传递给客户端;否则,以客户端相同的请求方式向服务器发出请求,并将从服务器获取的数据传递给客户端,同时在代理缓存中保留该数据的拷贝,以便客户端发送相同的数据请求时,可以直接从代理服务器中获取数据,而不必再向服务器发送请求。


  本文在上述背景下,以HTTP协议为基础,用JAVA实现了一个简单的代理服务器,


  并对缓存替换算法进行了系统的学习与研究,设计了一个仿真程序,以此来研究替换算法的性能参数,并对传统的替换算法进行了改进,提出了一种性能较好的算法。


  1.2研究意义


  软件代理技术的研究起源于70年代初期,到今天已经有30多年的历史了。随着计算机硬件技术的不断发展,它给软件技术的发展带来了更广阔的空间。而随着软件代理技术的发展,他将给企业的组织形式和行为方式带来巨大的变化,并且伴随其技术的不断成熟,将会给软件技术行业带来革命性的影响。


  伴随着网络规模的不断扩大,开放的网络信息不时受到各种威胁,网络安全问题受到越来越多的关注,相关研究人员在网络安全技术开发方面也取得了一定的成果,防火墙技术的开发便是其中之一。而代理技术的产生,使得所有内部网的用户可以通过代理服务器对外界进行访问时,只映射为一个IP地址,将外界与网络内部进行隔离,因此外界不能直接对内部网进行访问。同时,通过设置相应的访问规则,代理服务器可以用来限制内部网对外部的访问权限,从而在一定程度上阻止了外界不安全信息入侵现象的发生。


  另一方面,代理技术的出现,使所有内部网的用户对外界访问时只占用一个IP,因此,在一定程度上节省了IP开销。同时也减少了上网费用,降低了用于维护网络的成本。另外,代理服务器在信息传递的过程中,起到了网络缓冲的作用,不但可以节约网络带宽,而且提高了访问速度。


  目前,代理技术已成为众多网络应用研究人员研究的热门领域,并且成为解决


  Internet共享问题的关键。因此,代理技术的研究具有重大的现实意义。


  1.3本文内容与组织结构


  本课题的研究即是在上述背景下展开的,通过对代理技术的学习与研究,本文以HTTP协议为基础,用JAVA实现了一个简单的代理服务器,并对缓存替换算法进行了系统的学习与研究,设计了一个仿真程序,以此来研究替换算法的性能参数,并对传统的替换算法进行了改进,提出了一种性能较好的算法。主要工作如下:


  (1)对代理服务器及缓存替换算法中所涉及的相关理论知识进行了系统的学习与研究。


  (2)以HTTP协议为基础,用JAVA实现了一个简单的代理服务器。


  (3)通过对几种典型的缓存替换算法的研究与分析,在Hybrid算法的基础上进行了一次和二次改进,并设计了一个仿真程序,从URL命中率、字节命中率以及延迟率上,将其与几种典型的替换算法进行了分析比较。本文的组织结构如下:


  第一章绪论。介绍了本文的研究背景,研究意义以及本文的主要工作及论文组织结构。


  第二章相关技术与现状。对代理技术以及缓存技术分别进行了介绍,其中代理技术部分,主要从网络层次体系结构、代理的按层分类和代理的应用和发展三个方面进行介绍,缓存部分,介绍了缓存的分类和缓存的组织结构。


  第三章代理服务器设计。首先介绍了WEB服务器原理、代理服务器原理和HTTP协议,然后在此基础上,给出了本文的代理服务器设计。


  第四章缓存替换算法设计。首先对几种典型的替换算法和算法的评价标准进行了介绍,然后在Hybrid算法的基础上,给出了一次和二次改进,并从URL命中率、字节命中率以及延迟率上,给出了各替换算法的比较结果。


  第五章总结与展望。给出了本文的结论,总结本文所做工作,并给出了系统中


  存在的不足,提出了今后的研究方向。


  第2章相关技术与现状


  2.1代理技术概述


  2.1.1网络层次体系结构


  (1)OSI参考模型


  OSI参考模型是由国际标准化组织制定的一个开放系统互联标准。它对联网标准的框架结构进行了定义,备受计算机通信行业的关注。OSI参考模型采用分层描述的方法,将整个通信网络功能划分为7层,即按照由低层到高层的顺序分别为:物理层、数据链路层、网络层、传输层、会话层、表示层和应用层[17-21]。


  (2)TCP/IP参考模型


  TCP/IP参考模型不同于OSI参考模型,它不是人为制定的,而是在对Internet的研究和应用实践中产生的。该参考模型也采用分层描述的方法,但与OSI参考模型相比,更为简单一些。在TCP/IP参考模型中,只有四层,即子网层、网络层、运输层、应用层。TCP/IP协议[22-23]与OSI模型的关系如图2.1所示:


  图2.1 TCP/IP协议与OSI模型的关系


  2.1.2代理按层分类


  在TCP/IP分层模型中,可将代理技术分为网络接口层代理技术、IP层代理技术、


  运输层代理技术以及应用层代理技术这四种技术。SOCKS5代理技术是在防火墙技术的不断发展中而产生的,该技术主要是运用在应用层和运输层之间的“隔离层”上的一种技术。


  (1)网络接口层代理技术


  网络接口层代理技术主要运行在TCP/IP分层模型中的子网层,该技术在TCP/IP分层模型中的数据流向,如图2.2所示:


  图2.2网络接口层代理


  (2)IP层代理技术


  IP层代理技术主要运行在TCP/IP分层模型中的IP层,该技术在TCP/IP分层模型中的数据流向,如图2.3所示:


  (3)运输层代理技术


  运输层代理技术主要运行在TCP/IP分层模型中的运输层,该技术在TCP/IP分层模型中的数据流向,如图2.4所示:


  (4)应用层代理技术


  应用层代理技术主要运行在TCP/IP分层模型中的应用层,该技术在TCP/IP分层模型中的数据流向,如图2.5所示:


  (5)SOCKS5代理技术


  SOCKS5代理技术主要是运用在应用层和运输层之间的“隔离层”上的一种技术。


  2.2缓存概述


  高速缓存的设计思想在计算机系统中有很多应用场合,比如为了提高文件系统的访问速度以及主存的访问速度而使用的高速缓存等,我们称这些缓存为传统缓存。虽然在Web中使用的缓存思想与传统缓存相同,但是由于Web的自身特点,使得Web缓存和传统缓存之间存在着一些差别。这些差别主要表现在以下四个方面:


  (1)传统缓存所缓存的对象以数据块为单位,大小固定。而Web缓存所缓存的对象是以文件为单位的,因此缓存的对象大小不一。这是由于HTTP协议所支持的是整个文件的传输,同时,Web文件在长度上的变化显著,小到几个字节大到几百字节,这与文件所携带的信息类型有关。


  (2)传统缓存中,获取不同缓存对象的成本主要是由机器的性能决定的,因此不同对象的成本基本相同。而Web缓存中获取不同缓存对象的成本可能相差很大。这是因为缓存对象是从Web服务器上下载的,它的获取受服务器的性能、文档大小、网络带宽等许多因素的影响,所以下载不同的文档花费的时间一般也不相同。


  (3)传统缓存一般只有很少的程序访问,而Web缓存被很多客户访问,访问的用户可能有几个也可能有成千上万个。


  (4)Web缓存需要解决一致性的问题,如果由于Web服务器修改了对象导致Web


  缓存中缓存的对象与Web服务器中的对象不一致,那么Web缓存就失去了存在的意义。


  因此,Web缓存必需解决多级缓存对象一致性的问题。


  2.2.1缓存的分类


  通常,按照Web缓存在WWW服务器中所处的位置,可以把Web缓存分为客户端缓存、服务器端缓存以及代理服务器缓存。


  (1)客户端缓存


  客户端缓存通常是捆绑在Web浏览器上的,客户端缓存为浏览器开辟出一定的存储器或磁盘空间,作为浏览器的高速缓存。而早期的浏览器并没有提供Web缓存的功能,随着人们认识水平的提高,目前的浏览器都提供了这一功能。客户端的缓存分为非永久性缓存和永久性缓存,其模型如图2.6所示。


  (2)服务器端缓存


  服务器端缓存是和Web服务器软件捆绑在一起的,通常在Web服务器上实现二级或三级cache作为缓存,它比存放网页的磁盘具有更高的访问速度。服务器端缓存分为两类,即:主存Web缓存和Web加速器。主存Web缓存和Web加速器的模型分别如图2.7和图2.8所示。


  图2.6客户端缓存


  图2.7主存Web缓存


  图2.8 Web加速器


  (3)代理服务器缓存


  代理服务器缓存位于客户机和服务器之间的通路上,充当它们的媒介物,它的


  基本的功能就是与处于防火墙内部的用户访问Internet。当用户的请求到达代理服务器时,如可满足,则代理直接把请求文档返回给用户,否则重新定向请求到Web服务器。代理服务器缓存的模型如图2.9所示:


  图2.9代理服务器缓存


  2.2.2缓存的组织结构


  缓存的组织结构主要有层次缓存结构、共享缓存结构、虚拟缓存结构和分区缓存结构,下面分别对这四种组织结构做简单介绍。


  (1)层次缓存结构


  此结构将不同位置的缓存按照层次加以组织,客户端发送请求时,会被发送至低层的缓存,如果该缓存不能满足时,请求会被送到更高层的缓存,直到后如果还没有被命中,就被送到Web服务器。层次缓存结构如图2.10所示:


  图2.10层次缓存结构


  (2)共享缓存结构


  此结构将不同层次或相同层次的缓存放在一起,客户端向缓存发送请求时,如果该缓存不能满足时,他会向所有与它相邻的缓存发出请求,如果还是不能命中,向Web服务器发送请求。共享缓存结构如图2.11所示:


  (3)虚拟缓存结构


  在虚拟缓存结构中,将缓存划分为n个虚拟缓存,它们的替换算法可以不同,开始时,Web文档都被保存在虚拟缓存1中,对于替换算法,缓存i中被替换的文档被替换至缓存i+1中,缓存n中的被替换出缓存。虚拟缓存结构如图2.12所示:


  (4)分区缓存结构


  与虚拟缓存结构相类似,分区缓存结构也将缓存划分为n个虚拟缓存,它们拥有自己的替换算法,不同的是,各缓存是相互独立的。分区缓存结构如图2.13所示:


  图2.13分区缓存结构


  第3章代理服务器设计


  3.1 WEB服务器原理


  WWW(WORLD WIDE WEB)即环球信息网,可简写为Web,采用开放式的Client/Server结构作为基本框架,是由Web服务器(Web Server)和Web客户机(Web Client)组成的分布在整个Internet上的大型分布式系统。


  Web服务器[24-25]也称为WWW服务器,它是运行于计算机上的一个应用程序,其目的是为用户提供网上信息浏览服务。Web服务器既是存储信息的仓库,同时也是信息的提供者,它规定了服务器的传输设定、信息的传输格式以及服务器本身的基本开放结构。Web服务器软件主要负责处理客户端的请求,并利用网络将HTML文档和原始数据等有关数据返回给Web客户机。Web客户机设计出适当的接收格式以创建适当的信息接收工具,它与用户之间以交互的方式运行。当用户需要某个文档时,客户机软件即通常为我们所熟悉的WWW浏览器,负责初始化用户的请求,然后将其提交给WWW服务器,并对服务器返回的数据进行处理和显示。在某些情况下,有时还需要例如FLASH插件等相关的软件进行协助处理。目前,有关Web服务器和Web浏览器软件有很多,比较著名的Web服务器软件有Apache,Microsoft IIS等。浏览器有微软公司的


  Internet Explorer,NCSA的Mosaic等。


  Web服务器中包含大量的文本、图像、视频、音频等原始数据和用于组织管理这


  些数据的超文本文档,这些信息在存放方式、数据格式以及访问模式等方面各不相同。


  WWW通过HTML文档来组织管理各类原始数据。该文档内可包含经MIME定义的各种数据类型的数据和一些数据文件的超级链接指针。这些超级链接指针分别指向存放在不同地方的不同类型的文档。所有的Web文档或Web节点用唯一的地址来标识,称为统一资源定位符,简称URL。


  Web服务器与客户机之间采用HTTP超文本链接协议作为通信协议,HTTP协议的


  具体介绍本文将在后面章节中给出。Web的工作机制如图3.1所示:


  形


  页


  图3.1 Web工作机制


  3.2代理服务器原理


  在TCP/IP协议下,整个网络的数据通讯活动是按照统一的寻址方案来进行的。由于IP地址空间的局限性,无法满足用户对IP地址的需求,而代理技术的产生,成为解决这一问题的有效方法。


  关于代理服务器,HTTP1.1中有明确的定义,即:代理服务器是一个中介程序,它充当客户端和服务器之间的中介,具有服务器和客户机双重功能。从功能上来说,代理服务器属于防火墙的一种;从位置上来看,它处于Web客户机和Web服务器之间。对于客户机而言,它是服务器;而对于服务器而言,它同时又是客户机。通常,代理服务器具备如下四项基本功能:


  (1)接收从客户端发出的连接请求,并对其进行解释;


  (2)向服务器发出新的连接请求;


  (3)对服务器端发回的响应进行接收;


  (4)对服务器发回的响应进行解释,并将该响应发送给客户端。


  图3.2给出了代理服务器的模型,如下所示:


  图3.2代理服务器模型


  3.3 HTTP协议


  HTTP协议[26]是一种网络协议,用于支持WWW浏览功能,同时也是互联网上应用


  为广泛的客户机服务器访问协议。HTTP协议是建立在请求/响应范式下的,客户机/服务器完成一个会话通常要经过以下步骤:


  (1)建立连接


  该步骤的实现需要申请套接字,客户通过打开一个套接字并将其约束在一个端口


  来建立一个虚拟文件,在该文件上可以进行写数据操作,并通过网络向外进行传送。


  (2)客户端发送请求


  客户程序可以向服务器发送不同类型的请求,例如HTTP1.0中定义的GET、POST和HEAD请求,以及HTTP1.1中定义的PUT请求和DELETE请求等。服务器会根据不同类型的请求进行不同的处理。若服务器对客户发送的请求方法不予支持,将会返回错误提示并立即关闭连接。


  (3)服务器响应


  服务器在处理完用户的请求后,会对用户发出响应消息,其响应消息是由状态行和应答头组成的,其中应答头包括:服务程序名通知客户请求需要认证,请求的资源什么时候能使用等。状态行的结构如下:


  (4)关闭连接


  使用代理的情况下,每个成功的会话都应包括以下五个步骤:


  (1)侦听端口,等待客户端(Web浏览器)发送来的Web请求信息。


  (2)接收到客户端发送的Web请求信息后,解析出目标Web服务器的地址,并创建一个Socket实例,并依此实例连接Web服务器上。


  (3)通过创建的Socket实例将客户端Web请求信息传送到Web服务器80端口。


  (4)接受Web服务器返回的页面数据。


  (5)把接收的数据传送到客户端。


  HTTP协议的会话过程如图3.3所示:


  3.4代理服务器设计


  3.4.1代理服务器的设计目标


  Http代理代理服务器虽然是一个比较成熟的问题,各种解决方法也层出不穷,但在网络迅速发展的时代,问题依然不断出现。常见的问题有:


  (1)出现“基础连接已关闭,无法解析的远程名称”的问题。如果网络环境路由通信通过HTTP代理服务器和客户端应用程序不能在代理服务器设置自动从注册表读取,通常会发生此错误。问题是因为Web应用程序通常不执行的交互式用户帐户上运行Web服务客户端是ASP.NET.Web应用程序如果发生的可能性更大。Web应用程序在注册表中。因此,不会始终具有对浏览器的代理设置的访问。


  (2)出现“请求失败,与HTTP状态502:代理错误”的问提。如果代理服务器或防火墙的强制执行对SOAP数据包的大小限制或有一个超时值,该值是更少的大请求返回的时间后,可能会发生此错误。例如对代理服务器的调用以呈现具有大量图钉映射会导致较大的SOAP数据包来返回,并导致超过超时值的过程要花费更长的时间的请求允许。这可能会导致该请求,具体取决于代理和防火墙配置为在网络出现故障。


  (3)“请求失败,与HTTP状态407:要求代理身份验证。描述:在当前Web请求的执行过程中发生了未处理的异常。请查看堆栈跟踪以确定有关错误以及来源于代码中的详细信息。”的问题。如果代理服务器需要从一个域用户账户的身份验证,就会发生此错误。如果代理服务器客户端是ASP.NET应用程序,通常会发证此错误。


  ASP.NET应用程序通常在不在网络和代理服务器具有权限的本地用户账户的安全上下文中运行。


  所以在对一个代理服务器进行设计时,需要考虑许多方面的因素,因为在现代网络中代理服务器的作用是多方面的。尽管由于网络环境的差别很大,以及使用代理服务器的目的的不同,导致实现代理服务器的方案可能有很多,但不论采用何种代理服务器设计方案,要设计出高性能的代理服务器,都需要解决一些带有共性的问题。一般说来,在设计代理服务器时,都要从以下几个方面进行考虑:


  (l)代理服务的多样性:也就是通用协议的覆盖率,客户通过网络代理服务系统应该得到全面的信息服务,这要求网络代理服务系统覆盖相对较多的常用协议。代理协议的多少往往是衡量代理服务器性能的一个重要指标


  (2)代理服务的安全性:作为防火墙的一种解决方案,其提供的安全性显然也是一个重要指标


  (3)管理功能的全面性:这对于代理服务系统的整体性能有着较大的影响。作为一个多用户网络应用系统,对用户以及用户使用的平台进行全面的管理是其不可缺少的一个组成部分


  (4)代理服务的高效性:客户通过网络代理服务系统访问Internet应该尽可能的减少延时,提高客户的访问质量


  (5)己获取信息的共享性:Internet与局域网(LAN)的传输速率存在数量级上的差异,Internet与局域网的使用费也存在巨大的差异,使得用户对已获取信息的共享性提出了较高的要求,代理服务器的缓存机制正日益受到重视。


  要开发出具有一定通用性的代理服务器产品,在形成设计目标时应该充分考虑这些因素,并结合自身的需求进行综合分析。


  3.4.2代理服务器的设计的需求分析


  代理服务器的主要作用是为用户提供访问代理服务它的工作过程是这样的:代理服务器被启动后,它首先在管理员指定的端口进行监听,当有客户要求进行Internet访问时,这个请求会发送到代理服务器,此时,代理服务器会审查这个请求,并启动相应的代理服务程序将客户的请求发送到Internet上去;当收到返回的内容时,代理服务器能够识别这是哪个客户请求的内容,并将这个内容发送给这个客户,这样就完成了一次代理服务的过程。由于对不同的Internet访问请求必须建立相应的代理服务程序,所以,要想为用户提供完善的代理服务,必须有尽可能多的、对应于不同网络服务的代理应用程序,特别是常用的网络访问服务,如HTTP、FTP、Telnet以及SMTP和POP协议等。


  在使用代理服务器的工作模式下,内部网所有Internet访问都是通过代理服务器进行的,这就意味着可以通过代理服务器进行Internet访问管理和网络安全控制。在访问管理方面,代理服务器可以提供用户级的身份认证,当用户向代理服务器提出访问代理请求时,代理服务器可以要求用户提供身份证明,这样代理服务器可以根据用户的身份以及相应的权限,为用户提供代理服务,这样可以保证用户的Internet访问活动在权限允许的范围内进行,要做到这一点,代理服务器必须维护一个包含用户身份和访问权限的资料库,并制定相应的访问控制策略。所以,代理服务器还必须为系统管理员提供管理网络用户资料和制定访问控制策略的管理界面。在网络安全方面,由于代理服务器屏蔽了内部网络,所有进入内部网的外界信息都要经过代理服务器进行转发,所以代理服务器可以对内部网进行保护,防止有害或无用的外界信息进入内部网,或者禁止未经授权的外部用户访问内部网的某些主机或敏感信息。要达到这个目的,代理服务器必须能够对收到的信息按某种安全策略进行检查,以决定是否转发该信息,当代理服务器发现安全问题时应该能够用某种方式通知系统管理员,并采取相应的措施提升内部网的安全保护等级。


  由于网络所有的Internet访问活动都是通过代理服务器完成,因此,所有的Internet访问活动在代理服务器上都是可见的,所以,在代理服务器上系统管理员可以监视内部网的Internet访问活动。要做到这一点,代理服务器应该能够根据管理员的要求,显示当前用户访问Internet的活动,或对用户的访问活动进行记录,形成日志,供系统管理员查阅和分析。同时,日志也可以作为其它管理活动的依据,比如访问流量和费用的管理、访问时间的管理等,所以,代理服务器应该维护一个日志文件,以便系统管理员对网络的访问活动进行管理。


  代理服务器应该能够处理内部网用户的并发请求,以提高响应速度。代理服务器一般是采用多线程的方法来处理用户的并发请求的,即代理服务器的主进程主要是在系统管理员指定的端口上侦听用户的请求,当有用户的请求到达时,代理服务器启动一个新的线程处理用户的请求,而代理服务器主进程仍然在指定端口上侦听其他用户的请求;当一个用户的请求处理结束后,为该用户服务的线程也就结束了,并释放系统资源。这样在一个代理服务器进程中可以有多个线程同时运行,为不同的用户提供不同的代理服务。另外,采用多线程的方法,程序在运行的同时,可以对系统管理员发出的指令进行响应,以便系统管理员进行在线管理,而不影响程序的正常运行。


  代理服务器还必须维护一个内容缓存区,用来存放从Internet上收到的内容,当用户请求的内容在这个缓存区中可以找到时,就直接将缓存区中相应的内容返回给用户,而不用再次将用户的请求提交到Internet上去,这样不仅降低了网络的通信流量,节省了网络的通信费用,而且提高了代理服务器的响应速度。代理服务器的内容缓存区满了以后,代理服务器应该能够根据系统管理员配置的某种策略对缓存区中的内容进行更新,通常是首先淘汰那些重复使用率低的内容,所以代理服务器还需要一个管理缓存区的机制。


  3.4.3代理服务器的设计实现


  在本设计系统中,代理服务器部分的实现是在上述相关知识背景下,采用Java语言设计实现的。Java语言是由SUN公司于1995年推出的类似于C++的编程语言。它具有面向对象、跨平台等特性,主要用来开发可以运行在异构网络环境下的软件。具体说来,Java语言具有如下主要特性[27-32]:


  (1)面向对象。Java语言中提供了类、接口和继承等原语,是一个纯的面向对象的程序设计语言。除了数值型、布尔型和字符型三种简单的类型外,Java语言中引入了对象。


  (2)平台无关性。在各种操作系统上,Java语言只有同一个版本,其制订不针对任何底层平台。为保证JAVA程序能在不同的平台上运行,JAVA语言采取了解释执行的方式。另外,Java虚拟机对底层操作系统的差异进行了屏蔽,使得经一次编译成字节码后的Java程序能够在任何具有Java虚拟机的操作平台上运行,真正做到了“编写一次,到处运行”。


  (3)安全性。Java语言作为一门可在网络中移植执行的编程语言,安全性显得格外重要。Java语言采用了三种措施来保证其安全性,即:Java语言本身的设计、对Bytecode的检查以及程序执行系统(Runtime System),也就是Java解释器的把关。


  (4)可移植性。在任何操作系统下只要安装了Java平台,就可以运行完全相同的Java程序。因此,用Java语言编写的CORBA客户方程序可以在任何平台上被用户操作,这在一定程度上简化了客户端软件的开发和维护。


  本文中实现的代理服务器是一个简单的代理服务器,属于演示程序,只具有转发的功能。其设计思想如下:


  采用一个线程对应于每一个客户端的请求,该请求包含两个连接,一个是代理服务器到客户端的连接,另一个是代理服务器到Web服务器的连接。首先,由accept()接受客户端的请求,建立连接。这里accept()一直阻塞,直到有新的请求。接收到客户端发送的Web请求信息后,解析出目标Web服务器的地址,创建另一个连接,然后接收Web服务器发来的数据,并将之转发给客户端。


  设计的代理服务器的工作流程如图所示:


  图3.4设计的代理服务器工作流程图从代理服务器的工作流程可以看出,进入工作线程后,首先是接收侦听套接字侦听到的连接,如果有新的客户连接到来,就建立一个新的套接字和客户连接,然后,要启动一个新的工作线程继续等待接收侦听套接字侦听到的客户连接,这样,在为当前客户服务的同时,还有一个线程继续等待后续客户的请求。采用这样多线程的工作方式,使得代理服务器可以随时为客户提供代理服务,满足用户的需要。但是,这里需要注意一个问题,即大量客户的请求同时到达时,会使代理服务器产生大量的线程来处理这些请求,同时产生的线程超过一定的数量的话,有可能耗尽系统的资源,导致阻塞。为了避免这种情况,可以设置一个信号量来管理代理服务器创建线程的数量,当线程的数量达到一定值时,就拒绝启动新的线程,直到有线程结束并己释放了系统资源为止。


  在收到客户请求之后,如何解析协议的内容进而为客户提供相应的服务的问题,随协议的不同则处理的方式不同;另外,用户的访问权限可能随协议的不同而不同。为了解决这个问题,可以将这个代理服务器的工作类作为基类,对于具体代理的协议,可以从这个基类中继承一个协议代理类,根据相应的协议处理标准对基类的协议解析函数进行重载,另外在处理访问权限时,要和当前的协议种类相联系,以确定用户的具体权限。采用这样的方法,可以对每个需要代理的协议生成一个新的代理工作类,处理相应的协议解析和一些具体的问题,不仅可以实现代码重用,而且为以后增加新的协议代理提供了方便,可以很容易地实现程序的扩展。


  对于HTTP协议,在收到客户请求的信息头之后,将这个内容放入一个数据缓冲区内,然后调用协议解析函数,在缓冲区内找到客户请求的目的地址和身份认证等一些重要的信息,并进行相应的处理,如果客户有访问该目的地址的权限,则创建一个新的套接字,将该套接字连接到目的地址上去;当收到返回的内容时,也要先接收该内容的信息头进行相应的检查和处理,如果通过了检查则将收到的内容发送给客户。


  该代理服务器的设计实现有以下几方面优点:


  (1)代理服务器可以随协议的不同对客户请求处理的方式不同,使之更加灵活。


  (2)多线程的工作方式使得代理服务器可以随时为客户提供代理服务,提高了响应速度。


  (3)采用了基于角色的访问控制思想,用户的访问权限可随协议的不同而不同。


  (4)本设计可实现代码重用,对以后增加新的协议代理提供了方便,并可实现程序的扩展。


  第4章缓存替换算法设计


  4.1替换算法概述


  考虑到代理服务器缓存空间的有限性,因而引入了替换概念。即在代理缓存空间不足的情况下,对新存入缓存的文档采取一定的策略进行替换操作。


  通常,理想的替换算法应满足以下两个条件,即:


  (1)在执行替换操作时,消耗的时间少;


  (2)每一个被替换出缓存的文档在后续的访问中都不会被访问到。


  然而,替换算法在实际应用中,需要从多方面的因素进行考虑。通常,替换函数的定义如式(4.1)所示:


  F=f t t(c,L,Size Cd,d)…………………………….(4.1)


  其中:tc表示当前时间;tL代表从Web服务器获取文档的时间;Sized代表文档d的大小;Cd表示文档进入缓存后被访问的次数。


  在替换过程中,每次将替换函数值大的文件替换出存储空间,直到空间足够保存要进入缓存的文档为止。对替换算法而言,很重要的一个评价参数是命中率。对于一个好的替换算法,一方面既要保证有较高的命中率,也就是说从缓存中取得的文件字节数占总共收到的文件字节数的百分比;另一方面,要保证实现起来比较简单。替换函数可以简单也可以很复杂。简单的替换函数,比如对于LRU算法,替换函数只是文档的近一次访问时间的函数;对于LFU算法,替换函数只是文档访问次数的函数,一般实现起来都比较简单。但是由于这种替换函数考虑的因素较少,因此性能较差,而较复杂的替换函数由于综合考虑了各种因素,因此性能较好但是实现起来比较困难。因此,一个好的替换函数应当满足性能较好,而且实现起来比较容易这两个条件。


  有关替换算法这方面的研究很多,包括较早的针对代理缓存替换算法的研究。目前已经有很多关于代理缓存替换算法的研究[33-40]。从访问时间间隔、访问次数、文档大小以及保存价值等方面进行考虑,主要有以下几种典型的替换算法。


  4.1.1基于访问时间间隔的替换算法


  在该替换算法中,典型的代表算法是LRU算法,即近少使用算法。该算法的基本思想是:将代理缓存中近一段时间内访问次数少的Web文档进行替换。当文档被移入缓存或者命中时,将当前时间设置为Web文档的近访问时间T,在需要发生替换操作时,用当前时间t减去T,这时t-T值大的文档将被替换出缓存。


  LRU算法是一种非常流行的算法,被广泛用于CPU缓存及虚拟内存的应用中,它也是目前大部分代理缓存系统采用的替换算法之一,其优点是实现起来比较简单。LRU算法的缺点是没有考虑文档的大小和获取文档的延迟。如果将被移入缓存的文档很大时,就有可能需要将多个小的Web文档替换出缓存,这样会严重影响命中率性能。虽然LRU算法常被应用于传统的CPU缓存和虚拟缓存中,但是对于Web缓存它并不是一种很好的算法。


  4.1.2基于访问次数的替换算法


  在该替换算法中,典型的代表算法是LFU算法,即少频率使用算法。该算法的基本思想是:将代理缓存中被访问到的次数少的文档替换出缓存。在该算法的实现中,为每个Web文档设置了一个用来记录该文档被访问次数的计数器C,若缓存命中时,相应文档的计数器值加1;若缓存失败,并且缓存空间不足时,将访问次数C值小的文档替换出缓存。


  LFU算法中只设置了用来记录每个文档被访问次数的计数器,因而实现起来比较简单。但该算法没有对文档的长度和获取文档的访问延迟进行考虑。若缺乏强制失效机制,可能会出现影响缓存效率的“缓存污染”这种情况,即缓存中的一些被访问次数值大的文档一直占用缓存空间。针对这种情况,Robison等人提出了LFU Aging算法,该算法中引入了衰老策略。算法的基本思想是:计算每个缓存文档的平均访问次数,当其大于给定的门限参数时,采取一定的方式来减少每个缓存对象的引用次数,同时,对文档所能达到的大访问次数进行限制。在该算法中,用到了M和A这两个参数。参数M代表文档所能达到的大访问次数值,用来对文档的访问次数进行限制。


  参数A用于对缓存中文档的访问次数进行老化,它是一个整数。


  4.1.3基于文档大小的替换算法


  在该替换算法中,典型的代表算法是由William等人设计的SZIE算法。该算法主要应用于Web代理服务器的缓存替换中。算法的基本思想是:将缓存中大的文档替换出缓存。在替换时,即可根据文档大小的精确值进行替换,也可根据大约值(log2(Size))来进行替换。Web请求文档的大小服从Zipf原理,因此大文档的请求量极少,大部分集中在中小文档特别是小文档。SZIE算法比较简单,能够容纳很多小文档,因而命中率较高。但同时也存在一定的缺陷,该算法可能导致多个以后不再会被访问的小文档存在。


  4.1.4基于保存价值的替换算法


  该类替换算法的基本思想是:比较文档的保存价值,将价值较低的、对命中率贡献低的文档替换出缓存。通常,该类算法首先会分析文档的访问历史记录,然后对这些文档将来的访问趋势进行预测。该类算法对文档的多种访问属性进行了综合考虑,因此具有较好的性能。目前,这类替换算法的典型代表是Hybrid算法,其基本思想是:对每个文档的保存价值进行计算,将具有小保存价值的文档替换出缓存。


  文档d的保存价值fd的定义如式(4.2)所示:


  C1)


  (Cs+


  f bws*(C)C………………………………(4.2)


  d=d 2


  Sized


  式中:Cs代表连接Web服务器的时间;bws代表Web服务器到代理服务器的带宽;


  Sized表示文档d的大小;Cd表示文档进入缓存后被访问的次数。其中,Cs和bws都是描述网络延迟的;C1,C2为常数。


  Hybrid算法中对Web服务器的延迟和吞吐量等多种访问属性进行了考虑,但需要进行大量的计算,另外,该算法中没有对文档的近访问时间进行考虑。


  通过对以上四种替换策略的介绍和分析,它们都各有优缺点。LRU、LFU、SIZE一类算法的实现都比较简单,只要对缓存空间上的每个文档维持一个计数器,通过比较就可以决定要替换出的文档。但是,单纯使用这些算法中的任何一种,都会造成缓存空间的浪费或影响命中率的提高。由于没有考虑到Web请求流的特点,采用这些算法的代理缓存系统的命中率不可能很高。而基于文档保存价值的替换算法考虑了文档长度、访问延迟以及Web网络流量等因素,因此替换的效果好。但是,由于参与计算价值的参数选择不同,后的结果可能相差较大,而且计算也比较复杂,会带来一定的时间延迟。解决这些问题的办法通常是修正和简化模型。


  4.2替换算法的评价标准


  任何技术的研究,都存在性能评价的问题。采用哪些参数作为评价的标准,是性能评价指标的研究内容。在对存储体系结构缓存系统的性能评价模型的研究中,常以命中率、空间利用率作为性能评价的主要参数。对代理缓存系统的性能评价也采用了这几个参数。但是由于代理缓存系统本身具有的一些特点,单纯利用这些参数来评价系统的性能还是不够的。因此,在后续的研究中,新的性能参数被陆续提出。考虑到缓存系统本身的特点,请求命中率和字节命中率的计算只能靠模拟和事后的跟踪记录文件,对于代理缓存系统,其针对的是Web的网络流量具有和传统的存储块访问不同的分布特性,而跟踪记录文件的获取则与提供记录的代理服务器的关系很大,因此存在着比较大的差异。这些都造成了对代理缓存系统评价的困难。下面介绍替换策略的几种主要评价指标。


  4.2.1 URL命中率


  请求文档的总数为m,σi用来表示请求是否被命中,如果命中,σi=1;否则σi=0。


  则URL命中率H的定义如式(4.3)所示:


  m


  ∑σi


  H=i=1………………………………………(4.3)m


  在传统的存储体系结构的缓存系统中,命中率的计算是事后计算的。缓存系统运行的同时,记录下用户的访问请求序列,当记录达到一定的时间时,统计其中有多少个访问请求在缓存空间中获得了有效的存储块副本,以此来计算命中率。由于存储块的长度是相等的,每次命中也就是相等的,它们对缓存系统的性能影响也就是相同的。


  4.2.2字节命中率


  对代理缓存系统而言,由于缓存的对象是文档,且文档的大小是不等的,而缓存系统的一个目标是减少Internet上的Web网络流量,不同大小的文档的命中对缓存系统的性能影响是不同的。因此,命中率并不能真正反映出Web缓存的性能。由此引入了字节命中率这一评价指标。字节命中率定义为命中的文档的文件总字节长度占所有请求文档长度总和的比例。字节命中率就是用来比较不同代理缓存系统在所有文档命中率中减少了多少网络流量的,很多研究都采用了字节命中率来衡量代理缓存系统的性能,认为字节命中率可以更好地评价系统的性能。


  请求文档的总数为m,σi用来表示请求i是否被命中,如果命中,σi=1;否则σi=0。


  si是以字节表示文档i的大小,则字节命中率HB的定义如式(4.4)所示:


  m


  ∑σi is


  HB=i=1m………………………………………(4.4)


  ∑si i=1


  4.2.3访问延迟率


  评价代理缓存系统性能的另外一个指标是访问延迟率。传统存储体系结构的缓存系统的目标是为了加速进程对存储块的访问,减少访问辅助存储器的次数,以此降低访问延迟。代理缓存系统的目标同样也要求降低访问延迟。因此,可以用访问延迟这个性能指标对代理缓存系统进行评价。代理缓存系统的访问延迟是从用户的角度来看的,通常是忽略网络阻塞因素,考虑从代理服务器上获得响应的时间。一般来说,代理服务器到客户机的延迟,相对于代理服务器到Web服务器的延迟要小得多,因此可以忽略代理服务器到客户的延迟。由于代理服务器可能从缓存空间获得文档作为响应,也可能将请求转发到Web服务器以获得响应,因此,访问延迟就应当是这两种情况的平均值。


  在本文中,由于客户从代理服务器获得文档的时间与从Web服务器获得文档所需


  的时间相比十分的小,所以客户从代理服务器获得文档的时间可忽略不计。延迟率hDelay的定义如式(4.5)所示:


  m


  ∑t _ delayi(1−σi)


  hDelay=i=1 m……………………………….(4.5)


  ∑t _ delayi i=1


  其中,σi用来表示请求i是否被命中,如果命中,σi=1;否则σi=0。t _ delayi表


  示客户从Web服务器获取文档i所需的时间。从延迟率的计算公式可以看出,延迟率越低,则替换算法的性能越好。


  4.3典型替换算法的实现与结果对比分析


  4.3.1 LFU、LRU、Size和Value算法结果对比分析


  通过前面对LFU、LRU、Size和Value几种典型的缓存替换算法的介绍,本文对其进行了实现,并从URL命中率、字节命中率、延迟率等方面对这几种典型的算法进行了分析比较,具体分析如下表所示。


  比较小的文档,相对的数量就比较多,命中率就高。但是它的字节命中率是低的,很简单,这也是因为它缓存的都是比较小的文档。


  对于Value算法是基于保留价值的算法,该算法比较简单,不过它正确地反映了文档的价值,即:访问的次数越多、文档越小、网络延迟越大、近访问时间越靠近,保存价值就越大;相反,访问的次数越少、文档越大、网络延迟越小、近访问时间越远,则保存价值就越小。


  由于Value算法综合考虑访问次数、文档的大小、网络延迟等因素,所以它的延迟率比较低,是个比较好的算法。文档d的保存价值fd的定义如式(4.6)所示:


  C1)


  (Cs+


  bws*Cd*Tlast_visit…………………………..(4.6)fd=


  Sized


  这里,Cs表示连接Web服务器的时间;bws表示Web服务器到代理服务器的带宽;


  Sized表示文档d的大小;Cd代表文档进入缓存后被访问的次数;Tlast_visit表示文档d后一次被访问的时间。其中,Cs和bws都是描述网络延迟的,C1为常数。


  下面分别给出了Value算法与其它算法在URL命中率、字节命中率以及延迟率上的分析比较。具体比较结果如下图所示:


  缓存百分比


  图4.1 Value与其它算法的URL命中率比较


  缓存百分比


  图4.2 Value与其它算法的字节命中率比较


  缓存百分比


  图4.3 Value与其它算法的延迟率比较


  4.3.2 Hybrid算法结果对比分析


  经过上面的分析比较,Value算法的替换效果要优于其它算法,且正向地反映了文档的保存价值以及调整参数的重要性。因此,在Value算法的基础上,下面给出了


  Hybrid算法,其定义如式(4.7)所示:


  C1)


  (Cs+


  f bws*(C)C……………………………….(4.7)


  d=d 2


  Sized


  式中:Cs代表连接Web服务器的时间;bws代表Web服务器到代理服务器的带宽;


  Sized表示文档d的大小;Cd表示文档进入缓存后被访问的次数。其中,Cs和bws都是描述网络延迟的;C1,C2为常数。


  Hybrid算法比较正确的反映了文档的保存价值,不但具有较高的URL命中率和字节命中率,而且延迟率是低的。


  下面给出Hybrid算法在URL命中率、字节命中率和延迟命中率上的统计结果,如表4.7和表4.8所示:


  图4.4 Hybrid与其它算法的URL命中率比较


  缓存百分比


  图4.5 Hybrid与其它算法的字节命中率比较


  缓存百分比


  图4.6 Hybrid与其它算法的延迟率比较


  4.4 Hybrid算法的一次改进


  在替换算法的评价标准中,字节命中率通常被认为是替换算法好的标志。因为若字节命中率提高,网络流量、Web服务器负载都会大幅度减少。从上一节的hybrid算法的研究中我们可以看到文档块的尺寸越大被替换的可能性就越大。当在缓存比较小的时候,尽管Hybrid算法的缓存命中率比较高,而字节命中率却较低。我们发现导致这一点的主要原因在于,Hybrid算法的公式中,参数Sized应用的是文档的原始数据大小,从而使得算法对文档大小有比较大的依赖性。这样,较大的文档被替换出去的可能性就比较大,从而导致了字节命中率的降低。为了降低算法对文档大小的依赖性,对Hybrid算法公式中的Sized改为log(Sized)。


  考虑到Hybrid算法对因子的重要程度不是准确无误的,而且,根据Zifp定律,即:个别文档的访问率极高,而大多数访问率极低,且服从对数规律。因此,在Hybrid算法的基础上,多次调整函数的幂数可得到更好的算法,其定义如式(4.8)所示:


  C1)


  (Cs+


  bws*(Cd)C2…………………………(4.8)fd=


  log(Sized)


  该方法相对于Hybrid算法,具有更高的字节命中率。Hybrid的一次改进算法在


  URL命中率、字节命中率和延迟命中率上的统计结果,如表4.9和表4.10所示:


  表4.9 Hybrid一次改进算法的数据(原始)


  命中率、字节命中率以及延迟率上的分析比较。具体比较结果如下所示:


  图4.7 algorithm1与其它算法的URL命中率比较


  图4.8 algorithm1与其它算法的字节命中率比较


  图4.9 algorithm1与其它算法的延迟率比较


  4.5 Hybrid算法的二次改进


  Hybrid算法尽管考虑了访问次数、服务器的性能以及文档的大小等综合因素,但是有一类情况未考虑,就是当一个文档的保留价值很大并且访问次数也比较大,然而在近期中它却没有被用户访问到。这样就存在了相应的问题,根据文档请求的时间局部性的性质可知,在未来短时间内或者比较长的时间内该文档可能不会被访问。这就会使得它在缓存中阻止其它文档的进入。为了解决这个问题,改进算法中考虑进了在计算文档的保存价值时的文档后一次的访问时间。基于这一点我们对原有的Hybrid算法进行二次改进。改进后的算法的公式如式(4.9)所示:


  C1)


  (Cs+


  bws*(C)C*f T(


  fd=d 2 system−Tlast _visit)…………………………(4.9)log(Sized)


  在改进的式子中,Cs,Sized,C1,C2,bws和Cd与Hybrid算法中的含义相同。而新增加的f T(system−Tlast visit_)代表文档的后一次的访问时间对函数值的影响。其中,


  Tsystem代表在进行缓存替换时刻的系统时间,Tlast_visit代表文档d后一次被访问的时间。设T=Tsystem−Tlast visit_,则已经存在于缓存中的文件,T≠0;未在缓存中的文件,


  T=0。由文档请求的性质,即时间局部性可知,f T(system−Tlast_visit)随着T的增大而减少。


  本文中,我们采用下面较简单的形式:


  ⎧A T T≠0


  f T(system−Tlast _visit)=f T()=⎨(4.10)


  ⎩B T=0


  其中,A,B为常数,并且其取值很重要。若取值不恰当,则可能把fd中的第一


  项的影响给淹没了。根据信息请求的时间局部性的研究,我们得到下面的结论:再度访问出现在上一次的访问时间的大概一小时之内的是三分之一;大概24小时之内的大概是三分之二。针对这一结论,改进算法中我们分三种情况考虑:0≤≤T 3600,


  3600<T≤86400,T>86400(T的单位是秒)。fd可变为:


  C1)⎧f T1()0≤≤T 3600


  (Cs+


  bws*(C)C*⎪


  fd=d 2⎨f T2()3600<T≤86400(4.11)log(Sized)⎪⎩f T3()T>86400


  其中,0≤≤T 3600代表后一次访问文档的时间是一小时之内,3600<T≤86400代表后一次访问文档的时间在24小时之内,T>86400代表后一次访问文档的时间在24小时之前。


  根据式子(4.11),需要确定函数f1()T,f2()T,f3()T与T的关系,其值必须适


  当的选择。若它们的值太小,后一次访问文档的时间就不会对函数值起到影响;若它们的值太大,则就会使前一项的值的影响被淹没,这样就类似于LRU算法了。当0≤≤T 3600时,此改进算法会把该文档在近期内还会被访问来处理,在这种情况下的后一次的访问时间对函数值的影响是比较大的,设其造成的影响值是0.5;当3600<T≤86400以及T>86400时,考虑到T的取值在这两个区间内的取值的差值比较大,所以为了减小差值,我们对T取对数,令f2=1/log()T,f3=1/2log()T,则fd变为:


  C1)⎧0.5 0≤≤T 3600


  (Cs+


  fd=bws*(Cd)C2*1⎪⎨/log()3600T<T≤86400 log(Sized)⎪⎩1/2log()T T>86400


  经过此改进后的算法相对于Hybrid算法,具有更高的字节命中率,并且考虑进了文档的后一次访问时间,性能指标都有明显的提高。仿真实验中将给出具体的测试数据与性能分析。


  Hybrid的二次改进算法在URL命中率、字节命中率和延迟命中率上的统计结果,如表4.11和表4.12所示:表4.11 Hybrid二次改进算法的数据(原始)


  表4.12 Hybrid二次改进算法的数据(差值)


  图4.10 algorithm2与其它算法的URL命中率比较


  图4.11 algorithm2与其它算法的字节命中率比较


  图4.12 algorithm2与其它算法的延迟率比较


  从比较结果中可以看出:在URL命中率,延迟率基本不变的情况下,字节命中率有了更大的提高。


  4.6本章小结


  随着缓存容量的增大,URL命中率,字节命中率不断增大,延迟率不断减少,这


  符合事实,而且它们之间的差距不断减少,这恰恰与真实的服务器上的统计数据相符,证明了程序理论上的正确性。


  后面的算法具有反馈的特性,即:访问的次数越多,保存价值越大,同时又会以更大的几率被访问。


  将本文中的数据与真实的数据相比较,我们会发现各种算法统计的数据的变化趋势基本与代理服务器上的数据相符。由于本文中是仿真实验,因而,只是彼此间大小的比较。


  替换算法被广泛的应用于各个领域,比如OS中的文件管理系统,在那里的应用


  似乎更重要。所以,替换算法的研究具有实际意义。


  第5章总结与展望


  5.1工作总结


  随着计算机技术的发展和Internet的普及,人们对网络的依赖已深入到日常生活中的各个领域,网上购物、视频聊天、搜寻信息等网络活动使人们可以随时随地地与网络保持紧密的联系,不仅给人们的生活带来了许多便利,而且使人们的生活变得丰富多彩。然而,在网络迅猛发展的同时,网络管理给人们带来了新的课题,网络安全问题、IP地址受限、网络流量和网页访问延迟等成为人们关注的焦点,因为它影响着网络的持续发展。代理服务器被公认为是解决上述问题的一种行之有效的方法,它也是目前人们常采用的方法,成为众多研究者们研究的热点。


  代理服务器是介于客户端和Web服务器之间,当网络用户访问Internet上的信息时,代理用户获取网络信息的一个服务器。在传统的Web通信中,当客户端向服务器发送请求时,服务器响应该请求,并将数据传递给客户端。引入代理服务器后,它成为客户端与服务器的中介,当客户端向服务器发送请求时,该请求首先被送到代理服务器,代理服务器对接收到的请求进行分析,并在代理缓存中查看是否有该请求数据,若有,代理服务器直接将其传递给客户端;否则,代理服务器以客户端相同的请求方式向服务器发出请求,并将从服务器获取的数据传递给客户端,同时在代理缓存中保留该数据的拷贝,以便客户端发送相同的数据请求时,可以直接从代理服务器中获取数据,而不必再向服务器发送请求。


  本文在上述背景下,以HTTP协议为基础,用JAVA实现了一个简单的代理服务器,


  并对缓存替换算法进行了系统的学习与研究,设计了一个仿真程序,以此来研究替换算法的性能参数,并对传统的替换算法进行了改进,提出了一种性能较好的算法。


  在对本系统的研究设计过程中,本文主要做了如下工作:


  (1)对代理服务器及缓存替换算法中所涉及的相关理论知识进行了系统的学习与研究。


  (2)以HTTP协议为基础,用JAVA实现了一个简单的代理服务器。


  (3)通过对几种典型的缓存替换算法的研究与分析,在Hybrid算法的基础上进行了一次和二次改进,并设计了一个仿真程序,从URL命中率、字节命中率以及延迟率上,将其与几种典型的替换算法进行了分析比较。


  通过实验证明,在相同的仿真URL字符串输入流下,改进后的算法在保持有相对比较低的延迟率以及比较高的URL命中率的情况下,字节命中率有很大的提高,减少了网络流量,对改善网络状况有一定的意义。


  5.2研究展望


  代理缓存技术是一个应用和研究都十分广泛的领域,除了本文研究的之外,代理还可以用于实现网络安全、信息管理等功能,缓存可以应用于文件系统,并且代理缓存技术与其它领域的技术有着紧密的联系。


  尽管本文完成了预期的目标,对本系统的研究与设计也已经取得了一定的收获,但是,由于时间和能力方面的限制,还有很多工作有待于我们进一步去完成。


  (1)当前只能缓存静态网页,而大量的动态网页仍然无法缓存,因此,下一步工作就是考虑对动态网页的缓存研究。


  (2)考虑缓存与预取的组合,这样会使命中率大幅度提高。


  考虑到将实现的代理服务器放到网络中进行实验,会对参数的调整十分不便,因此本文没有实现一个具有缓存功能的代理服务器,还需进一步的完善。


上一篇 NginxHTTP代理服务器的设计与实现 下一篇 HTTP代理IP的两种代理模式