肖双林 彭瑞琪 段明秀 田杰
摘要:通过分析程序设计类课程实践教学的需求和特点,在研究市场上现有在线评判系统使用技术和架构的基础之上,设计了一种符合教学需求、可自由切换多种模式、适用范围更加广泛的新型在线评判系统。系统成功运用在教学和程序竞赛培训中。
关键词:在线评测;新型架构;技术体系;运行流程
中图分类号:TP311 文献标识码:A
文章编号:1009-3044(2021)31-0095-02
Design and Implementation of a New Architecture of Online Judge System
XIAO Shuang-lin, PENG Rui-qi, DUAN Ming-xiu, TIAN Jie
(College of Information Science and Engineering, Jishou University, Jishou 416000, China)
Abstract: Based on the analysis of the requirements and characteristics of the practical teaching of program design courses and the study of the technology and structure of the existing Online Judge in the market, a new Online Judge is designed, which meets the needs of teaching and training, can switch freely between multiple modes and has a wider application range. The system has been successfully used in teaching and program contest training.
Key words: Online Judge; new architecture; technical system; running process
1 背景
程序設计能力是信息类专业学生需要熟练掌握的基本能力。特别是在国家大力发展人工智能、大数据及云计算的战略背景下,各高校更加注重学生程序设计能力的培养。为此,各高校针对自己的培养目标开设了相应的程序设计课程,如C、C++、Java等。
早期,程序设计类课程大多注重对语法的教学,实践教学所占比重较轻。而且实践教学通常由老师布置题目,学生编程实现后再提交给老师进行人工评判[1]。这种方式不能及时反馈学生学习情况并且主观性强,很难真正提高学生的实践能力,同时也增加了教师的工作强度。经过多年的教学探索,许多高校开始实施以培养程序设计思想与方法为主,注重实践能力培养的新型教学方法。近年来,在线程序实践作为一种新颖的程序设计实践形式逐渐被引入到程序设计类课程教学中[2-3]。学生通过使用在线评判系统完成教师布置的题目,并能够及时在平台上得到结果反馈,有利于教师实时掌握学生的学习状态。
此外,随着各类程序设计竞赛在高校的推广,竞赛的规模和影响力越来越大。这些竞赛的出现不仅提高了学生的实践能力,也给高校培养电子、信息专业人才提供了一种新的思路。因此,高校迫切需要一种适合教学和竞赛培训的新型在线评判系统[4]。
2 Online Judge系统现状分析
目前,各赛事举办方和高校为满足需求均设计了在线评判系统。南阳理工学院、厦门大学等都设计了适合本校教学的在线评判系统。CodeForces、Oxcoder和Imagine Cup等程序设计竞赛举办方也陆续创建了相应的竞赛判题系统。在线评判系统适用于教学练习还是竞赛培训,不只由系统收录题目决定,还要看系统架构和评判模式。
1)常见的系统架构有两种:一种是C/S架构是一种较早的软件架构,主要用于区域网内,也叫客户机/服务器模式。这种架构的页面和操作十分丰富,因其只有两层传输,安全性能够得到保证。但因使用这种架构开发的系统需要安装才能使用,导致用户较为固定并且维护成本较高。这种系统使用户不能在系统上获知题目信息以及自己的代码通过了多少个测试点,只能知道自己的答案是否正确。另一种是B/S架构,这种架构无需安装相应的App,极少部分事务逻辑在前端实现,使得系统更加可靠。
2)目前有单数据测试用例、多数据测试用例、带权重多数据测试用例三种评判模式。单数据测试用例模式要求每道题的测试数据存放在一个数据文件中,必须通过所有测试数据才被判对,要求较为严苛。多数据测试用例模式要求每道题提供多个数据集,每个数据集存放在一个数据文件中,通过相应的数据集就可得到对应的分数,设计较为合理并且可以帮助学生找到解题思维上的漏洞。带权重多数据测试用例模式要求根据题目难度高低对不同数据集分配不同权重,难度较低的题目数据集分配较低权重,系统分配较短时间去评判,从而合理安排不同题目的评判时间,提高判题效率。
3 系统的架构设计
为解决目前市场上在线评判系统大多由一台服务器完成所有任务而导致系统并发量不大的问题,本系统整体采用分布式架构。数据库、评判核心和web用户界面分别部署到不同的服务器上[5]。同时为缩短系统的开发周期、减少开发难度,进行异步设计与开发。系统的架构如图1所示:
前端页面部分采用VUE框架,实现数据的双向绑定,后端包括采用Spring-Boot框架实现的web服务器、任务调度服务器(分发任务)、结果写回服务器(保存结果)和使用C++实现的判题机。判题机与上位机之间使用boost库实现同步连接[6],判题机与Web服务器之间使用Linux的网络文件系统(NFS)进行测试用例文件共享,使用strace跟踪器监控判题进程安全。
4 系统的实现
4.1 系统技术体系
在web服务器中采用SpringSecurity来实现用户认证和权限控制。系统采用Nginx实现分布式部署,做到负载均衡,同时使得占有的内存更少,并发能力更强。
前端使用AJAX技术,通过异步方式加载数据,并在页面呈现出来,在得到更快的前端响应的同时减轻了服务器负荷[7]。由于AJAX请求的是json数据而不是html文档,可以有效地减少网络数据的传输量,节省网络带宽,提高用户的操作体验。
4.2 系统运行流程
用户在做题界面提交代码以JSON格式交由后端web中對应的接口。接口在接收到相应的数据后,先判断该题目是否超过了规定的答题时间,如果在题目允许的时间内则将前端提交的信息和题目信息包装成“任务”保存到数据库再下发给任务调度服务器。任务调度服务器接收到判题任务后,先将任务存储到暂存内存中,再根据判题机发送的任务申请信息、判题任务的权重和数量按照平均处理时间将任务发送到判题机。每台判题机可以同时存储和处理多个判题任务。在处理任务时服务器还会根据自身状态动态地向任务调度服务器发送任务申请信息,保证了判题效率的最大化。
判题机在接收到判题任务后,先将用户提交的代码本地化,再由判题机内部的分发线程将判题任务分发到判题线程。判题线程在获取任务后先将任务代码复制到对应的工作目录中,再根据任务语言类型进行编译。编译正确则取对应题目的测试用例进行运行和答案比对[8]。
编译时间不会算入任务的时间限制,且无论编译是否正确都会将编译信息重定向到标准输入文件并保存在结果中。运行过程会受到任务信息中时间、内存、栈的限制和系统自定义的安全限制。根据代码的运行情况返回任务结果,主要包括运行时间、运行内存和测试点结果。在答案比对后,判题线程会将所有测试用例的结果收集并组装成一个任务结果存储到对应的存储队列,再由判题收集线程将结果发送给结果写回服务器。
结果写回服务器接收到任务结果信息后,将信息写入数据库,并返回确认存储信息给任务调度服务器,确保每个判题任务不会丢失。之后,web端可以根据任务流水号在数据库中查询任务结果信息并将其组装返回前端页面进行渲染和显示。
4.3 系统优点
本系统的web层分层设计使得不同任务会有相应的处理流程。普通业务只需在web层就可进行业务处理。而判题任务则由web层下发到任务调度服务器,任务调度服务器再将判题任务分发到多个判题机,判题机处理后得到的结果再转发给写回服务器,进行数据持久化。
这样做使本该由web层实现的分发和并发转移到了任务调度服务器上,减轻了web服务器的压力并解决了容灾。使得web服务器对结果的读取、结果写回服务器对结果的写入分离以及任务调度服务器任务分发这三个任务实现了负载均衡。
web服务器和判题机进行NFS连接使测试用例可以在每台判题机同步、使网络的压力减少(因为测试用例文件很大,通过网络层传递耗费大量时间,也使其他任务无法进行)。
目前,大多数的在线评判系统大多只有一个服务器来执行多项任务使得整个系统的承载数量有限并极易崩溃。本系统高并发、分布式设计将任务合理有效地分离执行,同时为数目可观的用户提供稳定的在线服务。
5 结束语
本系统不同于市场上现有的OJ系统,整体采用分布式架构,拥有多个服务器,并发量更高,系统运行更加稳定。系统为学生的实践培养提供一个良好的平台,可以有效地提升教学质量[9]。
参考文献:
[1] 王桂平,刘君,罗宪,等.一个基于多种评判模式的在线评判系统[J].计算机科学,2020,47(S2):657-661.
[2] 王桂平,冯睿.突出实践能力培养的程序设计课程教学方法[J].实验室科学,2009,12(1):81-84.
[3] Wang G P,Chen S Y,Yang X,et al.OJPOT:online judge & practice oriented teaching idea in programming courses[J].European Journal of Engineering Education,2016,41(3):304-319.
[4] 蔡崇超.基于Web的在线判题系统设计与实现[J].软件导刊,2016,15(3):107-109.
[5] 黄晓华,沈健,常晋义,等.基于Online Judge与HTML批注技术的实验教学平台设计[J].计算机与现代化,2014(11):117-121.
[6] 黄金春,杜娟娇.超小型在线评测系统的设计与实现[J].现代计算机(专业版),2018(13):83-86.
[7] 庄奇东,王键闻,张楠,等.Online Judge系统的优化[J].计算机系统应用,2011,20(8):115-121.
[8] 钟耀章,桂琼.ACM竞赛在线测评系统设计与实现[J].无线互联科技,2020,17(18):42-44.
[9] 黄龙军,范立新.面向Online Judge的查询方法及其实现[J].计算机系统应用,2013,22(8):79-82.
【通联编辑:谢媛媛】
收稿日期:2021-06-20
基金项目:湖南省大学生创新创业项目(项目编号:湘教通[2020]191号)
作者简介:段明秀(1975—),女,湖南茶陵人,副教授,硕士,主要从事数据挖掘和人工智能研究。