【摘 要】针对高校进行网上选课时Web应用服务器延迟比较大甚至宕机的现象,采用为Web应用服务器构建分布式多级缓存的办法,可以有效解决Web服务器吞吐量不够和响应时间比较长的问题。
【关键词】分布式 多级缓存技术 选课系统
【中图分类号】 G 【文献标识码】A
【文章编号】0450-9889(2014)02C-0183-03
一、高校选课系统现状分析
高校选课系统大部分都采用B/S三层结构,浏览器、Web应用服务器和数据库服务器,同时为了保证数据的一致性和完整性,数据库服务器一般只有一个,而应用服务器可以设置多个,逻辑结构描述如图1所示。当多个Web应用服务器在大量用户并发提出的请求时,因为操作数据库是串行执行,那么势必导致用户请求很久都得不到回应,延迟时间比较长,甚至出现浏览器页面超时等现象。
图1 高校教务系统的典型逻辑架构
针对选课系统现有的状况,必须进行相应的改进,以提高Web应用服务器的服务质量。缓存技术是其中比较热点的解决办法,它可以缓存数据库中的数据对象,也可以缓存中间处理对象和结果对象。搭建一个缓存服务器显然作用不大,在本文中将采用分布式缓存服务器集群的方式,也就是采用Web应用服务器分布式缓存技术,这样可以极大改善现有服务器所面临的高负载问题,提高Web应用服务器的吞吐量,降低响应时间,解决数据库的伸缩性等问题。
二、选课系统缓存对象分析与设计
在设置缓存之前,首先要弄清楚选课的整个流程,里面所涉及的对象,分析出其中的数据对象、过程对象和结果对象,之后考虑如何对这些对象进行缓存。
(一)选课系统流程分析。在学生进行抢选课的时候,首先进入课程页面找到自己喜欢的课程,如果该课程没有达到限定的选课人数,那么学生选择该课程成功,否则只能选择其他课程;然后当选择的课程通过后,便会进入该课程对应的教师页面,学生抢选自己喜欢的任课教师,如果该任课教师没有达到限定人数,那么该学生选教师成功,也就意味着该课程整体抢选成功,否则该学生只能再选择其他教师。在选课过程中或选课结束后,学生可以随时通过结果页面查看自己选课的总体情况,以便作出调整。通过以上分析,可以得到如图2选课系统流程图。
图2 选课子系统流程图
(二)缓存对象分析。经过分析,在高校选课系统中可以进行缓存的对象包括以下对象:课程信息对象,可以是数据对象,也可以是课程信息所形成的页面对象;课程人数限制信息,这个属于数据对象;课程已选人数信息,这个属于数据对象;教师信息对象,这个可以是数据对象,也可以是教师信息所形成的页面对象;教师人数限制信息,这个属于数据对象;教师已选人数信息,这个属于数据对象;选课结果信息,可以是数据对象,也可以是结果形成的页面对象。因此得出结论,这些信息都可以以数据对象的形式存储。
(三)缓存对象分类。选课系统可缓存的数据对象各有其特点,因此这些数据对象不能全部以统一的方式进行缓存,按照这些数据对象的特点,把这些数据对象分为参考数据对象、活动数据对象和资源数据对象。参考数据对象是指主要用于读取的数据对象,虽然这些数据对象很少有写入操作,却因为读取数据对象的用户数量较大,数据对象检索和列表也会产生巨大的数据对象条目。活动数据对象是指进行读取和写入的数据,这些数据对象是可以调整变化的,而且存在是短暂的。资源数据指的是同时进行读写的数据对象。
按照以上分析,选课系统中的参考数据对象包括课程数据对象、课程人数限制数据对象、教师数据对象和教师人数限制数据对象;活动数据对象包括选课结果数据对象、课程已选人数数据对象和教师已选人数数据对象。
(四)缓存逻辑模型设计。根据选课子系统可缓存对象的分析结果,分为三种不同的数据对象,那么在缓存这些数据对象的时候,需要在内存中建立对应独立的存储结构单元,称之为命名缓存。这些命名缓存之间完全互相隔离,互不干扰,当有多个应用程序共享同一个缓存集群时,可以为每个应用程序分别建立命名缓存。在同一个命名缓存中,对同类型的数据对象,但是内容不通的,需要对命名缓存进行分区,这样即可以解决数据冲突的问题,极大地提高检索效率。这样就得出一种新的缓存服务中数据对象新的逻辑模型,如图3所示。
图3 缓存逻辑模型设计
在本文的选课系统中,将参考数据对象类型命名为MyBasicData,并根据内容不同进行分区,分为课程数据对象分区、课程限制人数数据对象分区、教师数据对象分区和教师人数限制数据对象分区等;活动数据对象类型命名为MyActiveData,划分为选课结果数据对象分区、课程已选人数分区和教师已选人数分区等;资源数据对象类型命名为MySourceData。
三、构建基于JBoss Cache3.0分布式多级缓存
(一)分布式多级缓存逻辑架构设计。根据选课系统的特点,这些可被缓存对象基本上都是数据对象,因此可以在构建分布式缓存的时候,把缓存加到数据库服务器和Web应用服务器之间,用缓存服务器缓存数据库服务器中的数据对象,这样可以有效解决数据库服务器的伸缩性问题,极大缓解数据库服务器的压力。图4展示的便是构建的Web应用服务器分布式缓存架构,主要分为数据层、缓存层、应用服务层和用户层。
当用户访问应用服务内容的时候,Web应用服务器的应用程序查看数据对象是否可以在其对应的缓存服务器中获取,如果该数据对象在该缓存服务器中不存在,则查看分布式缓存其他结点缓存服务器中是否存在,直到找到所需的数据对象为止。如果整个分布式缓存中都不存在,便去操作数据库,获取到所需的数据对象,并尝试将该对象加载到分布式缓存中。
除建立服务器端缓存外,还需要建立应用服务层和本地缓存,以加快用户检索数据。同时保障应用服务层和本地缓存要与服务端对象具有一致性,对象从数据库服务器检索到分布式缓存,缓存再把对象存储到应用服务层和客户端,这样便形成了Web应用服务器分布式多级缓存。当用户发出请求时,服务首先查看本地缓存中是否存在相应对象,如果没有,则到服务端即缓存层查找,如果有则返回对象并同时更新应用服务层和客户端缓存。没有则到数据库查找到数据对象缓存到服务端并同时缓存到应用服务层和客户端。
图4 分布式缓存架构
(二)构建基于JBoss Cache3.0的Web应用服务器分布式多级缓存解决方案。JBoss Cache3.0是一个复制的事务处理缓存,它允缓存企业级应用数据来更好的改善应用服务器的性能。缓存服务器结点构成树形逻辑结构,节点间利用JGroup进行多播通信,节点间缓存数据将被自动复制,形成分布是缓存集群。因此利用JBoss Cache3.0在Web应用服务器和数据数据库之间建立分布式缓存,形成缓存层(如图5所示)以分解数据库服务器的压力是一个可行的解决方案。
图5 基于JBoss Cache3.0分布式缓存配置
1.替换策略设计。JBoss Cache3.0的缓存参数配置。配置是基于XML文档的,其中有两个关键参数是必须进行配置的。WakeUpIntervalSeconds参数定义替换线程多少时间运行一次,PolicyClass参数定义所采用哪种替换策略,如果不进行配置,将采用基于LRU算法的替换策略,也可以替换成其他替换策略。
命名缓存和缓存分区。在建立JBoss Cache3.0分布式缓存的时候,按照2节中的对象类型分析,需要命名多个不同的缓存和分区,分别缓存不同类型的数据,即命名MyBasicData用来存储参考数据,命名MyActiveData用来存储活动数据和命名MySourceData用来存储资源数据等。
2.构建分布式多级缓存。JBoss Cache3.0支持多级缓存,即支持服务层缓存和本地缓存。本地缓存不参与集群,并且也不与集群中其他缓存通信,通过串行化,用户在任意时间修改缓存模式。服务层缓存采用树形结构形成集群,集群节点之间利用JGroup建立可靠的组播通信,缓存更新采用同步或异步模式进行复制。在本案例中,建立一个名为TreeCache.xml的配置文件,在里面设置集群名称、设置缓存复制模式和JGroup通信配置等,然后部署到JBoss应用服务器中。
在基于JBoss Cache3.0分布式缓存中,缓存当用户发出请求时,服务首先查看本地和应用服务缓存中是否存在相应数据,如果没有,则到JBoss Cache3.0服务端即缓存层查找,如果有则返回数据并同时更新应用服务器和客户端缓存。没有则到数据库查找到数据缓存到JBoss Cache3.0服务端并同时更新应用服务器和客户端缓存。
在以上集成架构中,通过利用部署在中间层的JBoss Cache3.0,应用服务的可伸缩性、性能水平和可用性都得到了相当大的提高,更具体地说,提高了服务架构的可扩展性,实现了尽可能减少对数据库资源的争夺,注入更多的灵活性。可扩展性的架构可以根据不同服务节点的资源使用情况,进行动态调节用户到不同的服务节点,从而提高响应时间,降低了延迟。通过JBoss Cache3.0高可用性的集群,可以在某个节点发生故障的时候,降低数据损失。
四、分布式缓存技术在选课系统中的应用实践
广西农业职业技术学院选课系统应用服务器为JBossAS 5.0,在实际应用之前利用LoadRunner8.1针对建立JBoss Cache3.0分布式多级缓存前后进行压力测试。首先利用LoadRunner的VuGen分别录制在建立缓存之前与建立缓存之后两种环境下网上选课系统的脚本,然后利用Controller模拟50虚拟用户、100虚拟用户、150虚拟用户和200虚拟用户、250用户对该系统的访问,然后生成结果分析比较,发现配置缓存后,服务的吞吐量(如图6所示)和点击率(如图7所示)都得到很大提高。
图6 有无缓存吞吐量比较图
图7 有无缓存点击率比较图
通过验证之后,基于JBoss Cache3.0分布式缓存技术已经被用在广西农业职业技术学院选课系统中得到应用,有效解决了几千人同时并发访问Web应用服务器宕机的问题。
因此,在Web应用服务器中构建分布式多级缓存,当缓存层中缓存服务器数量足够多的情况下,可以大大提高Web应用服务器的服务质量。所以Web应用服务器分布式多级缓存是一个切实可行的提高Web应用服务器性能的解决方案。
综上所述,针对广泛应用的选课系统的所面临的高负载问题,为其建立Web应用服务器中构建分布式多级缓存,通过实际应用与模拟验证发现对Web应用服务器的性能有提高作用,为解决高校选课系统延迟大甚至宕机的问题提供了一种切实可行的办法。
【参考文献】
[1]王瑜,侯整风.缓存技术在在线考试系统中的应用[J]. 山东理工大学学报(自然科学版),2011 (5)
[2]王鑫.缓存技术在Web应用中的研究[J].潍坊学院学报,2011(4)
[3]刘妍,古志民.多重请求调度的分布式Web 缓存集群设计[J]. 装备指挥技术学院学报,2006(12)
[4]钟一青. 基于内容分发的cache集群系统[J].电脑与信息技术,2006(3)
[5]莫洪武.基于Velocity CTP3 分布式多级缓存的研究与应用[J].软件导刊.2010(10)
[6]韩英杰,石磊,基于最小延迟代价的Web 缓存替换算法研究[J]. 计算机工程与设计,2008(8)
【基金项目】2012年度广西高等学校立项科研项目(201204LX620)
【作者简介】莫洪武(1980- ),男,黑龙江拜泉人,广西农业职业技术学院讲师,研究领域:软件技术。
(责编 黎 原)