王 瑜,侯整风
(1.合肥工业大;2.安徽广播电视大学)
缓存技术在在线考试系统中的应用
王 瑜1,2,侯整风1
(1.合肥工业大;2.安徽广播电视大学)
在线考试系统的稳定性至关重要,过多的并发量给系统服务器带来的超负载是导致系统性能下降的一个重要原因,为了解决此问题,提出在在线考试系统中应用缓存技术.设计一套在线考试系统,介绍系统的体系结构、需求和功能模块,阐述缓存技术在系统中的应用方法和实现方法,并通过负载测试检验缓存技术的效果,对测试结果加以分析,分析表明缓存技术能在一定程度上提高系统的性能.
在线考试系统;缓存技术;WAS
随着计算机技术的发展,现代远程教育已经成为建设我国现代化教育事业的重要着力点,基于Internet的在线考试是远程教育的重要组成部分之一.系统的稳定运行至关重要,同一时间段过多人多参加考试的、大量并发操作会给服务器带来的过大负载,致使服务器运行非常缓慢甚至瘫痪.为解决这个问题,笔者引入了缓存技术到在线考试系统中.缓存技术是将最近访问过的数据和资源存储在内存中,以便随后的请求能够重新使用它们.在Web应用程序中使用数据缓存技术有三个方面的用途:一是减少交互的通讯量,降低网络的数据流量;二是降低服务器系统的处理量;三是降低磁盘访问次数.
该系统采用B/S体系结构,通过一套服务器体系运行数据库和应用程序,分布在网络上的客户端通过浏览器运行软件.用户通过浏览器向服务器发出请求,客户端只负责输入和输出数据,对数据库的访问、应用程序的执行都将由服务器来承担,简化了客户端工作量.层与层之间相互独立,系统改进也容易.该系统的体系结构如图1所示.
图1 平台的体系结构图
系统根据参数设置自动组卷,题目类型为客观题:包括单选、多选、判断,题目有难度系数设定;考生必须在规定时间内进行考试,系统对学员提交的试卷可自动评分.该系统主要涉及考生、辅导教师以及管理员等实体.
教师:维护试题库、安排考试、查看总体成绩;
考生:参加考试、查看个人成绩;
管理员:用户管理.
系统包涵用户登录模块、维护试题模块、安排考试模块、完成考试模块、自动评分模块、查看总体成绩模块、查看个人成绩模块(如图2所示).
图2 系统功能模块图
该系统采Sql Server 2005作为数据库平台,数据库包涵用户信息表、课程信息表、试题库表、考试信息表、试卷题目表、答卷表,部分核心数据表的结构设计(见表1~3).
表1 试题库表
表2 考试信息表
表3 试卷题目表
考试之前,教师需要做一些准备工作,包括组卷、设置考试的名称和时间.组卷的过程包括设计试卷结构、试题难度系数和分值分配,系统根据这些信息从试题库表中抽取试题,然后在考试信息表中添加一条关于该次考试信息的记录,在试卷表中添加若干条关于抽取的试题的记录.参加考试的考生根据考试信息表和试卷题目表获取该次考试的试题,然后开始答卷.
对于数据库驱动的web应用程序,在数据库中检索数据是web应用程序中执行最慢的操作之一.通过缓存技术可以改善这种情形,缓存是在内存中划定一个区域,用来临时存储最近访问过的数据和资源,系统再次请求它们时能够使用缓存中的内容,不必为这些请求重新生成数据和资源,从内存中返回数据的速度比新提供的数据速度快,因而可以大大提高系统的性能.[2]
在web体系中,一个请求在客户端和服务器端之间进行,缓存可以放在服务器端或客户端,如果存放在客户端,系统请求时,可以不必建立连接,零响应时间,大幅度地减少用户等待时间,同时可以节省带宽;如果存放在服务器端,可实现数据的重用,避免这些数据的重新生成,降低服务器负载,并且服务器内存中的缓存可以被所有用户使用[3〛.
ASP.NET有三种可由web应用程序使用的缓存.(1)页面输出缓存:如果一个页面的更新频率较小,系统把执行页面时得到的输出结果进行缓存,再次访问该页面时系统从缓存区中获取数据;(2)页面片段输出缓存:有的时候根据系统需要,不允许对整个页面的输出进行缓存,只能对其部分的输出结果缓存;(3)数据缓存:如果某个程序的执行需要占用大量服务器资源和时间来生成数据,在第一次执行的时候,对结果进行缓存,再次执行时,系统直接从缓存区中获取数据即可.[3]
当缓存中的数据已经无效,如果继续使用会影响系统的使用效果,需要采用一些策略来清除缓存,常用策略有两类:依赖策略和过期策略.[2]
依赖策略是添加缓存数据时,指定一个它的依赖关系来实现在某些情况下使其失效,常用依赖策略有文件依赖和数据库依赖,文件依赖是让缓存依赖于一个指定的文件,当文件更改时,缓存项自动清除.数据库依赖让缓存的变化依赖数据库,当数据库的内容发生改变时及时通知缓存,缓存项自动清除.
过期策略是添加缓存数据时,设定一个时间来控制缓存的过期,过期时间分为绝对过期时间和弹性过期时间这两种计法,绝对过期时间是一个确切的日期和时间,这个时间一到缓存项自动清除;弹性过期时间是一个时间间隔,指明缓存项在最后一次访问之后还可以存在的时间.
该系统是一个高并发系统,为了保证在线考试顺利进行,系统稳定运行,在系统中加入了缓存技术,以减少数据库的查询次数和磁盘I/O的读写量.
在线考试活动是集中进行的,考生登录后获取试题,将对试卷题目表和试题库表中的数据做并发访问,将当前考试的试题数据缓存到web服务器内存中,考试开始后第一个考生用户登录并进入考试时实施缓存,后来再进入相同考试的其他考生就直接从web服务器中获取试题数据,无需再通过查询数据库获取试题.
页面输出缓存需要在内存中存储页面中的所有对象,其占用内存空间比数据缓存大得多,在多项在线考试同时进行的情况下,如果采用页面输出缓存,会致使相当大一部分内存被缓存占用,反而可能降低系统性能.采用数据缓存,只需要一部分很小内存空间用来缓存程序执行的数据结果即可.
该系统缓存的对象是考试的试题数据,考试时间截止后缓存数据就失去作用了,缓存的生存期不依赖于任何对象,应该通过绝对时间过期策略控制缓存的生存期,缓存的生存期不应该超过考试的最大时间跨度.
用户登录系统后,进入相应的考试,系统查看缓存区中是否存在对应的试题数据,如果不存在就需要执行程序,根据试卷题目表和试题库表生成考试数据,并且将新生成的数据放在缓存区中,用于随后的请求;如果存在就返回这部分数据,无论这两个表的记录有多大,对于缓存来说它们都是透明的.
缓存区中可以同时容纳多个缓存项,不同的缓存项通过缓存键来标识.该系统的开发采用Visual Studio.NET 2005环境,用C#语言实现.NET中的system.Web.Caching是用来管理缓存的命名空间,Cache是 system.Web.Caching中管理缓存项的一个类.Cache类中添加缓存的方法有Add方法和Insert方法,Add方法用于添加新的缓存项,要求缓存中没有相同的缓存键;若要改写现有的缓存项,要通过Insert方法修改指定缓存键的缓存项中的内容.该系统中的试卷题目数据一旦生成就不会在修改,因此这里仅仅需要用add方法添加缓存,并且使用DateTime.Now.AddMinutes方法指定过期时间为建立缓存后的12 h.
下面是实施数据缓存和获取缓存中数据的代码片段:
为了检验缓存技术的效果,分别对使用缓存技术的系统和未使用缓存技术的系统进行压力测试,通过对两种情况下系统响应延时和服务器中的CPU和内存使用情况的比较,判断缓存技术是否改善了系统性能.
测试结果包括
·TTFB Avg:接收到响应的第一个字节前花费的平均毫秒数;
·TTLB Avg:接收到响应的最后一个字节前花费的平均毫秒数;
·数据库服务器CPU、内存使用率;
·Web服务器CPU、内存使用率;
使用Microsoft Web Application Stress Tool(简称WAS)软件对系统进行负载测试,WAS是微软公司开发的专门用来进行实际网站负载测试的一套工具.通过WAS可以使用少量的客户端计算机仿真大量用户上线,提前预知系统在一定数量用户使用下的承受能力.
使用WAS分别对未使用缓存技术和已使用缓存技术的在线考试系统进行负载测试,分析、比较测试结果.模拟300个考生用户同时参加在线考试,具体步骤包括创建测试脚本、设置测试参数、执行测试、分析测试结果.
(1)创建测试脚本
通过记录浏览器活动的方式来创建测试脚本,在创建脚本之前需要清除你的浏览器的缓冲.根据WAS记录浏览器向导提示录制脚本,录制完毕后再设置相关脚本项,如图3所示.
(2)设置测试参数
图3 WAS测试脚本
WAS中的Setting设置,Stress Level和Stress multiplier这两项分别设为100和3,它们共同决定了对访问服务器的并发连接的数量为300(100×3);Test run time设为15min,表示测试时长为5 min.按照图4所示设置测试参数
图4 WAS测试参数
(3)执行测试
测试过程中时刻监控数据库服务器和web服务器上的CPU和内存的使用情况,并作记录.
(4)分析测试结果
①在没有使用缓存技术的情况下的测试结果:
系统负载测试的REPORT如图5所示:
数据库服务器CPU利用率60% ~75%,内存占用24.3~30.2G;web服务器 CPU利用率10% ~15%,内存占用 4.2 -5.1G.TTFB Aug 1665.09 ms,TTLB Avg 25165.16 ms.
②在应用缓存技术的情况下的测试结果.
WAS负载测试的REPORT如图6所示.
数据库服务器CPU利用率38% ~42%,内存占用33.4~38.5G;web服务器 CPU利用率8% ~11%,内存占用 5~5.7G.TTFB Avg 1257.34 ms,TTLB Avg 17976.32 ms.
图5 没有使用缓存技术的情况下REPORT
图6 使用缓存技术的情况下REPORT
(4)分析测试结果
通过以上表格中显示的测试数据,可以判断在使用缓存技术和未使用缓存技术的情况下系统的性能是有差别的,突出表现在TTFB Avg、TTLB Avg、数据库服务器CPU利用率、数据库服务器内存占用、web服务器CPU利用率这几个数据.
直接体现平台的访问速度上,TTFB Avg和TTLB Avg这两个数据上的差别说明使用缓存技术时系统响应延时比未使用缓存技术小1/4左右,从用户的体验来说,平台访问速度快1/4左右.
将一部分频繁使用的数据缓存在客户端和web服务器的内存中,因此系统无需反复向数据库服务器提取这部分数据,数据库服务器内存中省去了这些等待处理的请求,因此内存占用和CPU利用率较小;对于web服务器而言,则需要划出部分内存来存放缓存,因此其内存占用会多一些.
通过缓存技术的运用,一定程度上缓解了在线考试系统的访问量和响应时间之间的矛盾.缓存技术是一项复杂且针对性很强的技术,对它的应用需要在全面的系统分析和测试的基础上进行.目前缓存技术还没有形成一套完整的理论体系,下一步的工作将对缓存进一步深入研究,使其能够得到更准确、更广泛地应用.
[1]郑纬民,汤志忠.计算机系统结构:第2版[M].北京:清华大学出版社,1998.
[2]焦锋,刘群,邢文建.客户机/服务器下的数据缓存技术[J].辽宁工程技术大学学报,2005(24):226-228
[3]Jason Bell.ASP.NET 程序员参考手册[M].北京:清华大学出版社,2002.
[4]陈良洲,鲍璐,张根度.公共cache在www中的应用[J].计算机工程与应用,1997(2):15-19.
The Application of Cache Technology to On-Line Examination System
Wang Yu1,2,Hou Zhengfeng1
(1.Hefei University of Technology;2.Anhui Radio & TV University)
The stability of on -line examination system is very important.Excess load which produced by too much concurrency on server is a important reason of the decline of system’s performance.In this paper,cache technology to on-line examination system is applied,a online test system is designed,the system’s architecture,demands and function modules is introduced,the application and realization method are elaborated are elaborated,the effect of cache technology is surveyed by way of load test,the results are analyzed.The analysis result indicates that cache technology can boost the system's performance to a certain extent.
On-Line Examination System;Cache technology;WAS
2010-10-07
(责任编辑:李佳云)