论文部分内容阅读
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导致答题完毕却提交不了试卷。实施O-Session方案后,考试时间、Session等消耗内存的因素自然消失,从而提高了服务器的并发性能;考试时,只需要求下载试卷和提交答卷时保持网络畅通;至于考生答题期间,不需要与服务器有任何交互,断网或服务器中途重启都不会对考试产生任何影响。O-Session方案本质上是适当牺牲系统的响应速度来提高并发性能、用时间换空间的策略。Session机制是基于服务器内存的,其读写速度要优于O-Session的消息传递方案。O-Session的消息传递方式需要把含有通行证的消息通过网络存储到关系数据库或者NoSQL库中,具有一定的响应时间和网络开销。但这些开销,在高并发系统中,与需要长时间在内存中保持Session的方案来比较,是值得的。单台Web服务器的响应能力毕竟有限,在第二层选择Web服务器集群是缓解系统高并发访问的一个很重要的方法。集群(Cluster)把多台计算机系统通过网络联接构成一个松耦合的系统,各机器之间的进程可以相互通信。负载均衡(Load Balance)将关键任务分解成若干子任务,然后按一定的策略分摊到多个操作节点上执行,协同完成工作任务。通过负载均衡来扩展服务器的带宽、增加整个系统的吞吐量,是一种廉价有效的方法。网络数据处理能力得以倍增,灵活性和可用性获得大幅度提升[25],[26]。常用的负载均衡技术主要有三类:基于DNS的负载均衡、基于反向代理(Reverse Proxy)的负载均衡(以JK2、NGINX为代表)和基于网络地址转换技术(NAT:Network Address Translation)的负载均衡[27],[28]。基于DNS的负载均衡是使用同一个域名对应多台服务器,每台服务器使用不同的IP地址,服务器之间无主次之分,是完全平等的个体,任意一台服务器都能处理客户端的请求;基于反向代理的负载均衡是由一台特殊的计算机(一般称为请求分配器)集中接收来自网络的所有对应HTTP请求,然后依据一定的原则把它们分配到内部网络的各台服务器上去进行处理;基于网络地址转换技术的负载均衡是通过修改网络层TCP/IP协议栈来实现的,它接受来自Internet的合法地址的客户端请求,通过网络地址转换技术,把本次的请求依据特定的负载均衡策略转发到其内部网络地址中去。负载均衡目前常用的请求分配算法主要有转轮法、最少连接法和最快连接法等。所有这些负载均衡的实施,其中会话(Session)管理是每一种解决方案中必须考虑的难题,方案不同,实施技术也千差万别。采用O-Session模型,则可以适用于每一种负载均衡方案。本文在第二层中引入NGINX实现基于反向代理的负载均衡。数据库技术基本上每10年都出现一次大的变革,历经网状数据库、层次数据库和关系数据库、对象数据库。数据库技术的变革促进了信息系统特别是Web信息系统的快速发展。Web信息系统在数据积累到一定的程度时候,海量(massive data)数据、大规模数据(VLDBvery large data)的概念相继出现,数据积累从量变到质变的飞跃过程,反过来作用于数据库技术,对数据库技术提出更高的期望。当人们的注意力从事务处理技术ACID转向Eric Brewer教授的CAP理论时,大数据(Big Data)时代终于拉开帷幕。在高并发的系统中、单纯的关系数据库存储解决方案面临不可逾越的数据库连接池[24]里的连接数的限制。为了增强数据存取能力,人们提出了基于CAP116理论的NoSQL数据库技术,针对不同的大数据应用模型,人们会选择不同的NoSQL数据库方案或者NoSQL数据库与关系数据库联合存储的方案。基于联合存储的方案,先要厘清各类数据存储的具体位置。本文依据高并发的试验结果,提出了大数据高并发系统联合储存策略解决大数据存储问题的四原则:原则1、构建核心业务主表以数据库表分区的模式存入数据生产库。原则2、与核心业务主表相关联的所有业务数据存入NoSQL数据库。原则3、用户数庞大的系统,特别是高并发的用户子系统,其涉及的与核心业务主表没有直接联系的只读业务数据部分存放在NoSQL库里,数据生产库里也应保持一份拷贝。原则4、需要统计分析与核心业务主表相关联的业务数据时,要建立独立的数据统计库。在Web多层体系结构中,用户角色权限模型属于第五层的安全认证层。传统的用户角色权限系统,需要给每一个用户指定一个角色。这使得对当前动辄数百万用户的系统管理变得不可忍受。另外,现代访问控制模型也需要新的技术实现来验证基于条件授权、过程可控的权限管理模型。针对第一个问题,本文采用用户分类的方式将其中某一个大类的用户抽取出来,作为一个用户集合来整体看待,系统统一赋予对应的角色,不再将这些用户作为系统用户进行管理。如本文研究的在线学习系统中,教师和学生类型的用户,他们不再出现在系统的用户管理中去给他们分配角色和权限。这类用户分别定义为教师集合类用户和学生集合类用户,单个教师或学生也就天然地继承了对应用户集合的所有角色和功能;同时,再根据用户类的某些具体属性值,构建基于用户类某个属性值的用户集合子系统。对基于属性值的用户集合子系统赋予角色,对应属性值的用户,自然就继承了该属性值的用户集合子系统的所有角色和功能。针对第二个问题,在原来基于RBAC权限控制的基础上,增加了权限的condition模型,实现了现代访问控制模型UCONabc[10]中可演变的权限方案。综合这两个元素,本文在Web多层体系结构的第五层安全认证层中提出了面向系统的现代访问控制模型S-UCONabc。依据我国现代远程与继续教育当前需求与长远的发展相结合的理念,在传统的多层(B/S/DB/S)体系结构基础上,通过调整系统层次内部元素、调度策略和增加新元素等手段,构建的高并发大数据支持的在线学习系统体系架构为:第一、三层结构中引入O-Session模型,第二层中采用NGINX做负载均衡,在第五层中引入面向系统的现代访问控制模型S-UCONabc;在第四层结合关系数据库与NoSQL数据库的优势,设计并构造了一个拥有17亿用户(数据库主表达TB数据量级)的在线学习系统的原型系统。在线学习的原型系统采用关系型数据库和NoSQL数据库联合存储的方案,实现思路如下:遵照原则1,将17亿用户基本信息,放入关系数据库oracle的分区表中;遵照原则2,学生选课、学生登录信息、学生认证信息、日志等信息存放在NoSQL数据库中。因为这些数据直接与核心业务主表相关联,产生出比核心主表多数倍或者几十倍的海量数据。遵照原则3,课程代码、教学计划、课程资源、系统的角色权限列表由管理员在生产库中维护,系统自动同步到NoSQL数据库中去,主要是为大量高并发的“读”操作业务服务。当这些数据在生产库中变动时,程序会保证NoSQL库中的数据与之保持一致;而针对系统的部分树状目录数据,因为其操作一般是按树形目录异步展开的,在设计时由用户第一次登录或者第一次操作时把数据生产库的数据同步到NoSQL中去。管理员如果对该部分数据进行维护引起变动,系统自动同步NoSQL对应树形目录的数据。遵照原则4,针对学习行为记录进行业务统计分析,另外建立一个供统计分析用的统计库,包含生产库中的所有表模式,数据则根据具体的统计分析业务选择该业务感兴趣的部分即可。如针对南京市的学生对数据库设计这门课的学习兴趣进行分析。从生产库中导出南京市的所有学生到统计库中;在riak服务器(属NoSQL数据库里一种典型的键值对数据库)上配置并启动solr搜索引擎,利用Map/reduce模式查找南京市学生的所有选课记录和点击资源的学习过程记录,插入到统计库。最后利用weka联机分析统计库中的数据。在线学习的原型系统的核心业务主表采用列表分区策略,以身份证号前6位为分区键值,将17亿数据均分到3479个分区中,每个分区约40万条记录,实现在单个分区上检索任意记录的速度保持在数十毫秒级,从而不影响用户体验。系统测试数据依据身份证编码规则,自动生成17亿多身份证号;身份证号对应的姓名,则依据百家姓随机生成。该测试数据,总量达到1TB。该原型系统实现了公民身份证号登录、教学计划、师生互动、选课、课件学习、课程答疑、课程作业、课程论坛、学习进度、考试安排、成绩查询、毕业论文等功能。本文创新点在于:1、提出了面向系统的现代访问控制模型S-UCONabc,能有效降低用户管理的难度,并提高了系统设计的灵活性。2、提出并建立了O-Session模型,大幅提高了单节点服务器的并发支持能力。