基于高并发处理模式的在线考试系统设计与实现

2022-07-06 14:23王玲
现代信息科技 2022年3期

摘  要:随着Web技术的飞速发展,考试方式逐渐向在线考试方向倾斜,其间所面临的高并发处理情况越来越多。文章研究了常见的高并发处理技术,探索采用Node.js技术处理高并发请求的在线考试系统。该系统采用B/S架构,融合了Node.js、Redis、mongodb等技术,可以满足高并发请求。其已成功应用于近几年广西教育厅的高校网络知识竞赛中,满足了面向全区高校学生开展网络知识竞赛的需求,提高了主管部门和学校统计分析的效率,得到主管部门和参赛学校的一致好评。

关键词:在线考试系统;Node.js;高并发处理模式

中图分类号:TP311       文献标识码:A文章编号:2096-4706(2022)03-0018-04

Design and Implementation of Online Exam System Based on High-Concurrency Processing Mode

WANG Ling

(School of Artificial Intelligence, Nanning College for Vocational Technology, Nanning  530008, China)

Abstract: With the rapid development of the Web technology, the examination method has gradually turned to the direction of online examination, and there are more and more situations of high-concurrency processing. This paper studies common high-concurrency processing technologies, and explores an online exam system that uses Node.js technology to process high-concurrency requests. The system uses B/S architecture and integrates technologies such as Node.js, Redis, and mongodb to meet high-concurrency requests. It has been successfully applied in the college network knowledge competition held by the Guangxi Department of Education in recent years, which meets the needs of network knowledge competition for college students in the whole region, improves the efficiency of statistical analysis of competent departments and schools, and has been highly praised by the competent departments and participating schools.

Keyword: online exam system; Node.js; high-concurrency processing mode

0  引  言

隨着Web技术的迅速发展,多媒体资源、互联网、5G、融媒体技术等新兴科技陆续应用于教育教学之中,随之涌现出不少新的教学应用。

在教育教学中,考试是评估教学质量的重要手段,考试结果可以反映学生对知识的掌握程度,方便学生查漏补缺。同时也能帮助教师了解学生情况,以便及时调整教学进度。采用纸质考试,教师需要耗费大量的时间对试卷进行批改,统计成绩。特别是大型考试的时候,人力资源的消耗就越发明显。因此,开发一个可在互联网上开展在线考试的系统是一个极富价值的研究课题。

随着5G等新一代通信技术的不断发展,Web应用系统服务的用户也越来越多,其面临着高用户并发量的问题,同时要求其能安全存储大量的用户数据。本文的应用场景是面向全区高校在校生开展的在线知识竞赛,有近70万的考生,会面临高并发的用户请求。因此在面临高并发用户访问量的情况下,如何确保在线考试平台能够稳定高效运行是一个值得深入研究和探讨的课题。

1  Node.js技术基础

Node.js是当下最流行的服务器端技术之一。Node.js是一个基于Chrome V8引擎的JavaScript运行环境。Node.js运用了一个事件驱动、异步I/O的模型,使其轻量又高效。相较于常见的Apache等HTTP服务器,异步I/O模式可以极大地提高并发性能。

1.1  异步非阻塞I/O模型

消息通信机制是异步I/O与同步I/O最主要的区别。在同步模型下,消息的发送方等待消息的接受方进行处理。而异步模型是指由消息发送方通知消息接受方,然后“调用”就返回了,待消息接受方处理完后会通知消息发送方。通常,Web服务器采用的是同步调用模式,在大量用户并发访问下,Web服务器需要启动大量线程,由于线程会抢占资源,造成线程阻塞。阻塞线程的频繁切换会给CPU造成极大的资源浪费。因此,Node.js的异步非阻塞模式能够有效实现多用户的并发,有效避免线程阻塞和线程切换的开销。

1.2  事件驱动模型

Node.js采用的是事件驱动模型,Node.js所实现的库函数API都是采用事件异步调用的方式。服务器的磁盘I/O、数据库查询、网络通信、客户端的请求均采用非阻塞的方法,提交的请求会被压入事件处理队列,返回的结果由事件处理队列循环处理。Node.js在某一时刻只处理一个事件,完成该事件后再进入事件处理队列处理后续的事件。这样可以保证CPU和内存每次都集中处理一个事件,而耗时的磁盘I/O操作没有进行阻塞,就可以尽可能地并行操作。

1.3  单线程模型

Node.js采用单线程模型,单线程可以避免多线程编程需要处理事件状态之间的同步问题,所有的状态变化都在单一线程中处理,不会出现状态死锁,同时也避免了不同线程之间切换带来的资源消耗。但是单线程模式也存在着缺点:首先,单线程每次只能使用多核CPU中的一个独立核心,不能发挥多核CPU的优势;其次,单线程在产生异常而程序未能捕获这个异常的情况下,会导致整个应用程序的退出。因此,我们要在系统设计上,实现Node多核服务器,要做好线程的调度和健壮性处理。

2  Web高并发处理模式研究

本文研究的在线考试系统,主要是满足在某个时间段面向全区高校近70万在校生开展在线考试的需求。这就存在用户访问量巨大的问题,峰值可能达到3000在线人数。为此需要设计能够应对高用户负载量的高并发处理机制,同时具有良好的扩展性,方便维护,从而应对在线考试系统实现的难点问题。

2.1  高并發处理的策略

根据系统遇到的高并发处理的问题关键点,从服务器规划、系统设计、数据库选择、缓存设计等方面进行规划:

(1)搭建服务器集群。使用负载均衡服务器,设计资源均衡分配的算法,将用户请求分配至服务器集群中不同的服务器,保证集群中的每一个服务器都能得到最大限度的利用,实现最佳性能。

(2)前后端分离。核心处理模块遵循前后端完全分离的原则,前后端均使用JavaScript实现,将JavaScript语言的异步回调等优势与nodsjs服务器的优势完美结合。

(3)采用MongoDB数据库。MongoDB数据库采用灵活的设计思路,有助于数据库的设计实现,同时读写速度快。

(4)增加Redis缓存。通过设置缓存层,将访问率高、实时变化不大的数据放入Redis缓存层,提高系统的响应速度。

2.2  高并发处理的思路

本文提出的基于Node.js的高并发处理模式,主要目的是解决在线考试系统的高并发问题。针对使用系统的用户越来越多,如何有效提高系统的响应以及保证系统的扩展便捷是我们亟须解决的关键问题。

根据之前高并发处理的策略,系统将从服务器规划、系统设计、数据库选择、缓存设计等方面提出解决方案:

(1)建立Nginx负载均衡服务器,将用户请求按照负载均衡的模式分配至服务器集群中的服务器,保证服务器集群中服务器的平均利用率得到提升。目前Nginx支持6种方式的负载均衡策略:轮询(默认方式)、ip_hash(根据IP分配方式)、weight(根据权重方式)、fair(根据第三方的响应时间方式)、url_hash(根据第三方的依据URL分配方式)、least_conn(最少连接方式)。本文采用根据IP分配方式,让负载均衡器按照请求端的IP进行服务器分配。session不能存储在不同的服务器上,因此采用根据IP分配方式保证同一的客户端请求都发送到同一的服务器,这样每个访客都固定访问一个后端服务器,可以使session会话能够在同一服务器上留存。

(2)在服务器处理端,通过Node多核服务器高效利用多核CPU的性能,提高系统CPU利用率,提升系统应对高并发的能力。目前常见的Node多核服务器有抢占式、主从式、轮询式等解决方案。本文采用轮询式的解决方案,通过轮询的方式使得每个核心都能得到有效的利用。

(3)在服务器处理前端增加Redis缓存,将访问率高的数据存放在Redis缓存,定时更新缓存区的内容,让请求优先从缓存中读取数据,提高用户的访问速度。常用的数据缓存技术有Redis和Memcached,Redis基于内存采用key-value的方式进行存储,是非关系型数据库。本文采用Redis内存数据库来解决数据缓存的问题。

(4)数据存储选用面向文档型数据库MongoDB(不采用传统的MySQL关系型数据库)。系统建立MongoDB的RepSet(副本集),开展实时热备份,可以提高数据的可靠性和容错能力,使得在线考试系统更加稳定可靠。软件开发中用到的数据库主要有关系型数据库sqlserver、MySQL和非关系型数据库MongoDB。本文之所以采用MongoDB,是因为它易于扩展,在高并发情况下读写速度优于MySQL。

(5)在系统的核心处理模块部分,基于前后端完全分离的原则,以提高系统的可维护性。将前端UI界面与后端服务数据分离,可以将后端服务接口独立出来,服务于不同的前端UI(比如传统PC桌面、移动端H5、APP等),提高了后端服务的可复用性和可维护性,同时也有利于向分布式微服务架构演变。

通过上述解决方案,使各个模块协同合作,能有效提升在线考试系统的高并发处理能力,保证系统高效可靠地运转。

3  系统设计与实现

3.1  系统结构总体设计

系统采用主动MVC架构前后端分离,前端使用MVVM架构的Vue,服务端包括Node.js和MongoDB数据库,整体遵循MVC模式。

在线考试系统包括试题管理、试卷管理、成绩统计、学生管理、教师信息管理等模块。在线考试系统拥有学生、教师、学校和管理员参与者。在线考试系统具体的功能用例如图1所示。学生部分包括学生登录、进行考试、成绩查询等功能。学校部分包括学生信息管理、成绩信息统计等功能。管理员部分包括系统环境配置、用户信息管理、试卷管理、考试管理、试题管理等模块。

3.2  系统需求分析

根据系统功能和用户权限,在线考试系统的用户分为管理员、学校和考生三种角色。根据需求分析,在线考试系统需要实现以下功能。

(1)试题管理功能。表现为题库的基本管理,包括增加、删除、查询和修改试题,以及试题导入功能,能够将试题以Excel格式导入系统。

(2)组卷功能。提供试卷自动生成功能,能够以组卷策略的方式为考生提供试卷,系统可根据题量、题型、难度级别以及总分等组卷相关约束条件,自动生成若干试卷供学生随机抽取测试。

(3)在线考试功能。包括根据场次提供考试服务、考生登录、显示考试状态、存储答案、提交试卷和自动评定成绩等功能。

(4)学校统计功能。学校统计考试人数、未考试人数,各二级学院、专业考试情况、成绩情况等,提供成绩导出功能,能够将指定条件的成绩以Excel格式导出。

3.3  系统实现

3.3.1  负载均衡实现

本平台采用Nginx进行负载均衡。Nginx是由俄罗斯人开发的Web服务器,但也常用来做反向代理服务器。我们在做负载均衡策略分析时,为了保存session信息,采用基于IP路由负载的方式。具体的Nginx配置代碼为:

upstream  ServerPolling{

ip_hash;

server 1; //后端服务器1

server 2; //后端服务器2

server 3; //后端服务器3

}

server {

listen 80;

server_name localhost;

location / {

proxy_pass http://ServerPolling;

index index.html index.htm;

}

}

3.3.2  Redis缓存层实现

根据在线考试系统的具体需求,我们将试卷表和考生考试信息表放入Redis缓存层。例如,我们将考生考试信息中的考生id、考生答题数据、开始考试时间等放入Redis缓存层。考生的id对应key,考生答题数据和开始考试时间等存储在key对应的value中。考生在开始考试时,在Redis中创建新的key-value对。考生在选择每一个考题答案的时候,系统就根据对应考生id修改value里的考题答案,答题过程数据均存储在缓存层,提高了系统的处理速度。value还存储考生开始考试时间,用于校验考试到达时间直接交卷的处理。考试结束后,系统将缓存层的数据写入后端数据库,从缓存层中删除key-value对。Redis缓存层处理过程如图2所示。

4  系统测试

本文选用性能测试工具LoadRunner对在线考试系统进行性能测试,模拟学生登录、提交答案等场景,测试环境为搭建的三台服务器集群,按照3 000人的并发量进行性能测试。系统测试环境配置如表1所示。

从表2的测试结果可以看出,常见的操作均在毫秒级以下,CPU负载、吞吐量也有不错的表现,考试系统平台具有较好的承载高并发的能力,可以达到预期的效果。由此可见,Node.js的异步非阻塞I/O、事件驱动模式的特点,可以有效解决高并发问题。结合传统解决高并发的方法,构建nginx的服务器集群,设计Node.js的高并发处理模式,并在此基础上实现在线考试系统平台,经过实践证明这种方式的效果很明显。

5  结  论

本文采用Node.js、Redis、mongodb等技术构建了可处理高并发请求的在线考试系统,在实际使用中取得良好的效果。随着5G等移动互联网技术的发展,在后续的研究中,可开展在移动互联网环境下提升在线考试系统的高并发处理的研究,确保满足在线考试的未来需求。

参考文献:

[1] 徐浪.基于Node.js的Web应用框架研究与实现 [D].马鞍山:安徽工业大学,2019.

[2] 邢宇明,陈勇,吴勃英.高校在线考试系统的优化方案设计 [J].大学数学,2020,36(3):35-39.

[3] 陈海郎.基于SSM框架的试题库与考试系统设计与实现 [J].电子技术与软件工程,2019(16):50-51.

[4] 陈荣鑫.基于NodeJS+Express框架的学院会议室预定系统设计与开发 [J].信息与电脑(理论版),2021,33(2):95-97.

[5] 张贵强,王美玲.基于NodeJS的企业网站的设计与实现 [J].信息技术与信息化,2019(12):58-60.

作者简介:王玲(1980.12—),女,汉族,黑龙江肇州人,信息系统项目管理师,本科,研究方向:计算机网络。