WWW缓存机制的研究与应用
李琳琳,熊前兴,赵玉伟
武汉理工大学计算机学院,湖北武汉(430063)
摘 要:针对现有 www 系统请求响应方式的局限性,提出了一种基于动态页面静态化的缓
存解决方案,该方案在实现动态页面静态化时,其引擎的触发策略采用即时触发机制和基于
时间的周期性触发机制,特别适用更新较少的实体以及只读型的数据库实体。文章首先介绍
了 www系统请求响应所存在的问题,接着分析了新方案设计中的一些关键技术,最后探讨
了该方案的实现。
关键字:WWW响应 缓存 Web
近年来,Internet的高速发展,给人们的生活带来了极大的便利,同时人们对 Internet访问速
度的要求也越来越高。但随着服务器软硬件的升级、网络带宽的不断增加,用户感受到的系统响
应速度却没有相应的增加,甚至还越来越慢。
为提高 WWW 系统的响应速度,人们想出了很多办法。缓存技术是在不增加成本的前
提下对WWW系统访问加速的最有效的解决方案之一。
1. 当前WWW系统请求响应方式
基于B/S架构的信息系统一般由静态页面和动态页面组成。静态页面存储在诸如 IIS,Apache
等的Web服务器上,由Web服务器对用户的请求进行响应;动态页面存储在诸如Tomcat,Resin
等应用服务器上[1],由应用服务器对用户的动态请求进行解析、计算和响应。其中,动态业务计
算逻辑大多是基于对数据库系统的操作,包括对数据库实体的插入、删除、更新、搜索等操作。
其典型的工作流程如下图 1所示。
静态请求
响应
动态请求
响应 应用服务器
数据库
系 统
Web服务器
浏览器
图 1 WWW系统请求响应图
根据图 1,用户对于动态页面请求的工作流程如下:
用户对动态页面发出请求;
如果应用服务器第一次收到该请求,则对该动态页面进行编译,编译的结果是 Class 文件,
然后把Class文件装入类装载器进行实例化,执行Servlet的 Init方法[2],然后调用Servlet的Dopost
或者Doget方法对用户的请求做出响应;
Dopost方法或Doget方法中一般包含企业业务计算逻辑,这些业务逻辑大多是对数据库系统
的访问操作,包括对数据库实体的插入、删除、修改、统计、查询等操作。应用服务器生成要发
送给数据库的指令后,和数据库建立数据库连接并把形成的 SQL语句提交给数据库服务器;
数据库服务器收到 SQL语句后进行执行,如果该 SQL语句是查询的 SQL语句,则把结果集
返回给应用服务器,如果是更新类型的语句,则把更新所影响的行数返回给应用服务器,最后关
闭数据库连接;
-1-
应用服务器收到数据库返回的结果集,根据该结果集对用户进行响应形成HTML代码,把这
些HTML代码返回给用户;
应用服务器关闭和用户浏览器之间的连接。
由以上过程可以看出,对动态页面的响应时间主要包括应用服务器容器引擎对 JSP页面的编
译、初始化、调用 Init方法所需的时间 t1、应用服务器和数据库服务器建立连接以及交互数据的
时间 t2、数据库服务器执行 SQL语句命令的时间 t3,应用服务器执行Dopost以及Doget方法的
时间 t4,应用服务器把执行结果输出的时间以及该数据在网上传输的时间 t5。其中 t1时间只能通
过提高服务器的硬件以及提升应用服务器的版本来解决。t5的降低要依赖于应用服务器版本的升
级以及网络带款的增加。这两项都是我们所无法左右的。
t2、t3、t4 在响应时间中占有绝对的比重,因此降低对动态内容的响应时间主要体现在降低
对数据库连接的建立和释放的时间、数据库执行 SQL命令的时间、应用服务器执行计算的时间上。
2. 当前WWW系统所存在的性能问题
对于用户的每一个查询请求,均需要和数据库交互一次,首先生成到数据库的连接,把
形成的 sql 语句提交给数据库服务器,数据库服务器根据 sql 语句进行查询,把该查询结果
返回给应用服务器;应用服务器根据返回结果产生了大量的临时对象,然后把生成的临时对
象在显示逻辑中传递,显示逻辑对该对象进行显示,显示完毕,系统销毁该对象。临时对象
的创建和销毁过程,占用了应用服务器的大量计算时间;
在以上过程中,对于用户的每个查询请求,要牺牲掉许多时间:
1. 建立数据库连接的时间.
2. 关闭数据库连接的时间.
3. 数据库服务器进行 sql语句查询的时间.
4. 应用服务器根据 sql语句查询结果进行临时对象创建的时间.
5. 应用服务器对临时创建的对象进行销毁的时间.
以上时间组成了应用服务器响应时间的绝大部分,也是造成系统响应性能低下的主要原
因,如果能降低这 5部分的时间。则达到了提升性能的目的。为实现这一目的,本文将提出
一种有效的解决方案。
3. 基于动态页面静态化的WWW系统请求响应方案
方案设计:
鉴于以上研究和分析结果,提出一种基于动态页面静态化的 WWW 系统请求响应方案,
如图 2所示:
静态请求
响应
缓存
生成
动态请求
应用服务器
数据库
系 统
Web服务器
浏览器 Html文件
图 2 基于动态页面静态化的WWW系统请求响应图
-2-
由于数据库实体的更新频率有差异,对于相对静止的实体的查询和显示请求,应用服务
器产生的动态响应在一个相当长的时间段内也是静止不变的。因此可以把对该类实体的查询
请求的响应作为一个静态 HTML 文件保存起来,待后续用户进行同样的请求时,应用服务
器就把用户请求重定向到该静态页面上,此时对用户的响应就转为由Web服务器进行。
静态化动态页面的缓存方案工作过程如下:
1) 用户对相对静止的对象 P发出查询请求。
2) 系统判断以P作为参数的查询请求是否存在对应的静态化页面,如果存在,则转发
请求到Web服务器上相对应的静态文件上,否则应用服务器对用户进行动态响应,同时根据
响应内容生成一静态页面并把该文件推入Web服务器上的相应发布目录中[3]。
3) 如果 P在数据库中被更新,则删除或者更新Web服务器上 P所对应的静态文件。
通过以上工作过程,我们完成了动态页面静态化的过程。
.方案实现
动态页面变静态页面引擎工作流程如图 4-3所示。
(2)
步骤 A:向数据库
提交 sql 语句查询
实体列表中每个实
体的详细属性
(1)
(2)
(3)
步骤 C:向数据库
提交 sql 语句查询
实体列表
步骤 D:将返回结果按分页生成静态页面,页
面之间的链接用列表页面的文件名标示,根据
实体的详细属性静态页面,实体列表静态为每
个实体建立到实体属性静态页面之间的链接。
步骤 B:根据查询结果,生成各实体属性的
静态页面,并将其保存到 web服务器的发布
目录上,同时利用数据库的临时表机制建立
数据库实体和生成的静态页面的对应关系
图 3 动态页面变静态页面引擎工作流程图
在步骤(D)完成后,用户可以通过访问静态页面来达到访问实体列表功能的目的,可
以点击列表页面中到详细属性页面的链接来访问每个实体的详细信息。通过访问静态列表页
面中的“上一页”、“下一页”到静态页面的链接,可以访问任意一页列表页面。
与此同时,我们要给被动态页面变静态页面引擎处理的页面增加一个处理标示,来区分
某个数据库记录是否已经被引擎静态化过。
由于在动态页面变静态页面引擎定时触发后,触发后新插入数据库系统的实体不能在列
表中显示出来,我门可以对以上算法做出改进:对数据库实体的列表页面采用“动态”和“静
态”相结合的办法,对实体的详细属性进行显示的页面也采用“动态”和“静态”相结合的办法:
对引擎触发后新插入的数据库实体采用“动态”的方法,对于没有被引擎静态化的数据库记
录,可以采用实时查询数据库的方法,查询的 SQL 语句形如“select * from tablea where
flag!=1”,同时对于新增实体的详细属性页面也采用向数据库服务器发送 SQL语句“select *
from tablea where id=n”来获取实体的详细属性。此种方法保证了数据库实体列表的完整性以
及实时性。
-3-
. 所用缓存替换以及同步策略
对于动态页面变静态页面引擎的触发策略可以采用即时触发机制和基于时间的周期性
触发机制以及基于策略的触发机制。
由于数据库实体的插入、删除、更新导致动态页面变静态页面引擎需要被触发。触发目
的就是生成新的静态列表页面以及实体的详细属性页面来反映数据库的真实内容,使用户得
到准确的响应。该引擎触发一次,对于实体详细属性显示页面,仅仅当该实体被更新时才需
要重新实体详细属性页面;对于实体列表页面需要重新搜索实体的列表,并对列表数据分页
[4],当实体有很多记录时,对实体分页所耗费的资源是比较大的,可能需要较长的时间。所
以该引擎不应该时时被触发。
在动态页面变静态页面引擎对数据库实体静态化完毕后,数据库的内容发生了变更。对
此,依据变更类型,我们对每种变更做出不同的处理:
1)对于数据库实体的更新。由于数据库实体的更新不会影响到数据库实体列表页面,
因此仅仅更新实体详细属性静态文件的内容即可,更新该文件后,用户即可访问到更新后的
内容。原实体详细属性静态文件的文件名保持不变,该文件在列表页面内的链接保持不变。
此时宜采取即时更新策略,即时重新生成实体的详细属性静态文件的内容。如果不采用即时
更新策略,用户可能访问到错误的内容。
2)对于数据库实体的删除。此时,需要从列表页面中删除该实体的列表显示,同时删
除该实体的详细属性静态文件。由于从列表页面中删除某个实体的列表记录较为困难,一般
采用重新生成实体列表页面的做法。此时必须采取即时更新策略,即时重新生成实体的列表
页面静态文件的内容。如果不采用即时更新策略,用户可能访问到错误的内容。
3)数据库实体的插入。当数据库实体被插入数据库时,动态页面变静态页面引擎需要
作两件事:第一生成新插入实体的详细属性静态文件;第二把新插入实体加入到实体列表页
面中合适的位置。
对于数据库实体的插入,引擎应该采用即时触发或者周期性触发机制或者基于策略的触
发机制均可。采用即时触发时,用户可以浏览到最新的数据,采用周期性触发机制,用户浏
览不到新插入的数据,但在某些场合,用户在短时间内没有必要浏览到最新的数据,用户对
这些新数据并非非常的敏感。
4. 总结
本文在对 WWW 系统请求响应研究基础上,提出了一种动态页面静态化缓存方案并给
出相应的实现方法,该方案与其他的动态页面缓存技术相比,优点主要有:
1)静态页面对于搜索引擎的友好性是毋庸置疑的,一般来说,搜索引擎对静态页面的
处理能力比对动态页面的处理能力要成熟的多,对搜索引擎来说,静态页面比动态页面更容
易被缓存。
2)可以和静态内容缓存技术结合起来使用,共同提高缓存的效果。总体上可以提高到
不使用缓存前的系统并发量的 2倍左右。
但应用该技术也有一定的缺点,由于变为了静态内容,静态页面中完全没有了动态内容,
因此不利于访问权限的控制、对页面浏览次数的计数以及它不适合频繁更新的数据库实体,
仅仅适应于更新较少的实体以及只读型的数据库实体,这也是以后的研究工作中要力求解决
的问题。
-4-
参考文献
[1] 李浩松,朱欣焰,李京伟,陈军.WebGIS空间数据分布式缓存技术研究[J].武汉大学学报, 2005,12
[2] 周敬利,李福寿,余胜生 基于 J2EE平台集群服务的分布式缓存队列模型[J], 计算机工程,
[3] 许艳美 基于透明Web Cache的访问控制系统设计与实现[D],山东大学硕士学位论文,
[4] 张红娟 Web Service及高速缓存在SIS中的应用解决方案[J],
RESEARCH AND APPLICATION OF WWW CACHE
MECHANISM
Li Linlin,Xiong Qianxing,Zhao Yuwei
Wuhan University of Technology, Wuhan,Hubei(430063)
Abstract
In view of the limitation of existing www system requested response way, proposes a cache design
based on turning the dynamic page into static . In realization process, the engine triggering strategies
used are the immediate triggering mechanism and periodic triggering mechanism based on time. This
design is suitable for he renewal few entities as well as the read-only database entity specially. The
thesis firstly introduces the existing problems of www system requested response way, then some
important issues in the design are analyzed, At the end, implementation of the system is discussed.
Keywords:www response cache web
-5-
WWW缓存机制的研究与应用
RESEARCH AND APPLICATION OF WWW CACHE MECHANISM
Wuhan University of Technology, Wuhan,Hubei(430063)
Abstract