高并发大数据在线学习系统中的关键技术研究
21世纪以来,随着信息技术飞速发展,教育信息化、高等教育大众化的普及,基于互联网的在线远程教育蓬勃发展,形成目前以网上交互式在线学习为主要特点的现代远程与继续教育格局[。自1999年开始现代远程教育试点工作到2014年,我国69所试点高校共计建立了17362个学习资源库,累计超过1932万学生采用网上在线学习形式进行学业学习。在线教育同时也催生了MOOC、微课、翻转课堂等的产生和发展,移动学习也应运而生。但目前的在线学习系统普遍跟不上各类资源建设和教育规模发展的速度。主要是现有系统的并发能力和数据处理能力满足不了当前的需求:为提高教学质量,各高校不约而同地推出了质量管理和监督的相关措施,诸如推出类似学习时长记录等与学习过程、学习者行为有关的考核软指标,促进学生网上学习、互动的热情;推出移动学习方案,满足学生随时随地的学习要求。开办远程教育的学校在籍学生一般都在3万至10万学生,开放大学甚至有200多万在籍生,由于成人业余学习的习惯,考试前、节假日、晚上是学习集中的高峰期,在线学习系统中同时在线学习的人数至少在数千人以上,对系统的并发能力提出了严峻的考验和挑战,每所学校的在线学习平台都崩溃过无数次,严重影响学生的学习热情。同时,各高校现有的在线学习系统基本上都是建立在传统关系型数据库之上、基于Session机制开发的信息系统。这类系统架构有着先天的不足:一是每一个用户要在内存里建立一个Session,在内存一定的情况下单个节点的并发能力大大受限;二是关系型数据库最大连接数受服务器
性能和网络速度制约明显。远程教育经过十几年的发展、各高校格式化的数据在百万、千万条量级的记录,未来随着新的学习平台的推进,会继续攀升至上亿、甚至数十亿条记录的规模,数据量至少在TB级。主表的数据记录一旦达到上亿条,那么与主表关联的数据表记录就是原主表的几十倍、几百倍,数据总量甚至可能达到PB级别。在这样一个高并发、大规模数据的环境需求下,在现有的多层模型上如何构建性能稳定的Web信息系统,是在线学习系统中一个不可回避的难题。解决高并发的传统方案有六种:(1)采用高性能的服务器或者集群:(2)高效率的编程语言(SQL优化、数据库缓冲池技术等);(3)尽可能的采用静态化手段(例如信息发布系统CMS将动态发布的内容预先生成静态页面);(4)内容分离(图片服务器与其它文件服务器分开存放,实现简单分流策略);(5)WEB缓存技术(客户端、服务器端以及代理服务器端缓存机制;(6)库表散列技术(同一张信息表,通过程序将不同功能模块涉及的数据分离到不同的数据库或表中去,分析其数据特征来划分更细粒度的数据库表)。但仅采用这些手段,还是难以满足大数据模式下的高并发访问的需求。因为这些传统方案都没有涉及集群中单个Web服务器节点的Session占用内存问题。相反,传统方案中的各种集群方法需要额外采用自己特有的机制,保持集群中Session一致性。本文探索在不改变系统架构本身的原则前提下,通过调整系统层次内部元素、调度策略和增加新元素,来提高在线学习系统的各项性能指标。论文从Web系统的架构及数据库技术、现代访问控制UCON模型[9]的重构、O-Session的模型设计与应用、构建大数据量
级的压力原型系统等四个方面阐述大数据量下性能稳定的Web系统构造技术。现阶段的Http协议采用的服务是无状态的,但很多Web服务的应用需求是“有状态的”。于是,人们在第三层WEB业务应用容器层构建一个Session元素,与第一层的cookie元素组合,或者通过url重写技术,实现了目前Web信息系统“有状态”的服务,典型应用是在线购物网站的购物篮服务。然而随着用户数的急剧增多,采用Session-cookie或Session/url重写技术首先面临有限内存的问题,每个用户都需要服务器维持一个Session,而且还需要保持一段不短的时间才会释放内存,并发用户越多,所耗内存容量越大,在一段时间内并发数达到一定量,内存将来不及释放而全部占用,造成系统拥塞而拒绝访问。因此,在高并发的系统当中,减少内存消耗尤其重要。本文基于可系列化的消息(Json)及通行证策略的消息传递模型提出了O-Session模型,对需要交换或者需要向后续页面传递的消息,依据通行证策略,将通信证消息存入关系型数据库或者基于健值对的高效NoSQL数据库,需要时直接凭借通行证号从关系数据库或者NoSQL数据库中获取通信证消息,极大地减少了内存消耗。作者将O-Session模型应用于在线学习系统中的在线考试子系统后,系统并发能力随之大幅度提升。学生在线考试时,考试时间统一,人员集中,一场考试长达2个小时。如果这2个小时考试所有Session都处于保持状态,内存消耗巨大。此外,考生与服务器所在的网络环境复杂多变,Session模式必须保证考生考试本地机器与服务器之间的网络2个小时内不能有任何“闪失”,否则,可能会弄丢用户Session导致答题完毕却提