• 美文
  • 文章
  • 散文
  • 日记
  • 诗歌
  • 小说
  • 故事
  • 句子
  • 作文
  • 签名
  • 祝福语
  • 情书
  • 范文
  • 读后感
  • 文学百科
  • 当前位置: 柠檬阅读网 > 范文 > 正文

    基于SSM框架和RabbitMQ技术的OJ系统的设计与实现*

    时间:2022-11-05 21:10:01 来源:柠檬阅读网 本文已影响 柠檬阅读网手机站

    戴施伟,周凌珉,郑一泓

    (浙江水利水电学院信息工程学院软件工程系,浙江 温州 325204)

    OJ(Online Judge)系统,是近十几年随着ACM 事业在中国的发展而引入的一种在线练习和比赛系统,最早设计服务于ACM-ICPC 国际大学生程序竞赛的自动判题和排名,使用者可在线提交多种程序的源代码(如C、C++、Java),系统会对源代码进行编译并运行,再通过后台数据库的测试用例来检验代码的正确与否。随着ACM 的发展和我国的信息化教学方式的变革,国内一些高校也开发了属于自己的OJ 系统,其中也不乏有许多主流的OJ,杭州电子科技大学的HDOJ,浙江大学的ZOJ……。通过建立本校的OJ,不仅可以方便平时ACM 队员的训练和竞赛模拟,还可以添加独创的题目,拥有属于本校自己的题库;
    在日常教学方面,OJ系统不仅可以提高计算机专业的学生学习数据结构算法的积极性和学习效率,也为所有想提高自己程序算法能力的学生提供了一个练习的平台。

    1.1 系统总体设计

    结合实际需求,在框架整体的设计中本系统着重考虑了在高并发访问下的效率问题。

    系统使用了Spring Boot 作为开发框架,它对于Spring中存在的重量级配置问题、项目的依赖管理、不支持分布式等问题进行了改善和优化,精简配置的同时方便对外输出各种形式的服务。考虑到安全性以及系统性能,采用判题服务与后台服务分离的架构优化方案,减少服务器负担的同时降低开发人员对系统维护的难度。两者间通信采用RabbitMQ 消息队列,既可以提高并发量,又能降低服务之间的耦合度,且具有更好的时效性。采用MySQL 进行数据持久化存储,其服务灵活,快速稳定。最后前端页面的开发使用Vue.js框架,简洁高效。

    1.2 核心模块设计

    本判题系统划分为三部分:前端交互、判题系统、后台系统(见图1)。在前端页面中,根据功能需要,分别对每个角色进行界面设计。下面主要介绍判题模块与后台服务模块的功能。

    图1 系统思维导图

    1.2.1 判题模块设计

    为了系统的安全性,判题模块应与后台服务模块相分离,使用RabbitMQ 消息队列实现通信,采用心跳机制,定时向后台服务端发送判题端系统信息,用于展示判题端在线情况。为了便于查看管理,判题系统应地向后台系统上报判题系统运作状态(见图2)。当收到用户提交信息时,判题系统应进行数据交互,使后台服务端处理判题请求(见图3)。

    图2 判题系统活动图

    图3 后台处理判题请求活动图

    1.2.2 后台服务模块设计

    后台系统是实现前端页面操作和系统功能的重要模块,本系统将后台系统分为七个模块,以下主要介绍四个功能模块的设计。

    ⑴竞赛模块:当收到判题结果信息后,系统会对竞赛信息进行相关更新(见图4)。管理员和教师能在后台添加新竞赛,并且可以设置竞赛显示时间、开始时间、结束时间、竞赛总时长等。管理员和教师也能对自己权限范围内的竞赛进行修改,进行用户管理。设置测试账号后可以进行竞赛测试。设立排行榜,对竞赛成绩按照编程竞赛规则排名。可以对前台采集的用户数据进行储存、分析、IP 上报,防止用户作弊。提供竞赛加入功能,用户在竞赛过程中可以直接加入开放型竞赛,对于私人竞赛可以通过房间ID 和密钥加入。对于竞赛数据如用户答题情况、用户提交情况、用户竞赛IP 数据、排行榜,可以进行查阅和导出,同时竞赛的提交数据也可以进行重新判题。

    图4 后台系统处理判题结果活动图

    ⑵练习模块:用户可以查阅系统中公共类型的问题内容,并按答题情况差异化展示。设立排行榜,对用户按已解决问题数进行排名。

    ⑶问题模块:管理员或教师能添加新的问题,也对自己权限范围的问题信息进行修改、删除,还可以添加或删除测试数据。

    ⑷讨论模块:管理员可以在系统设置中开启讨论区,用户能在讨论区中发起讨论,可以和其他用户进行评论互动。

    1.3 安全性设计

    本判题系统数据储存使用MySQL。判题系统模块与后台服务模块分离,模块间通信摈弃现有OJ系统普遍采用的直接读取数据库的方案,使用RabbitMQ消息队列实现通信以提高安全性。规范数据库编码设计,防止攻击者通过sql 注入对后台数据库的数据进行读取、删除、篡改。

    本系统采用Spring Boot 自带的定时器定时调用MySQL 自带的mysqldump 命令来实现数据库导出到文件,然后通过SMTP邮件发送服务,将数据库备份文件打包发送给系统预置的管理员邮箱,实现数据库备份操作。设计时引入Docker,将判题服务封装成容器,一方面实现简易部署,另一方面Docker 容器相较于直接在宿主机运行拥有更好的安全性。

    1.4 UI设计

    前端页面基于Vuexy Admin Template模板开发,界面基础辅助色为灰黑紫,简洁大方。页面设计中,为用户每一类型的操作提供明确的反馈,同时也设计了对话框以及错误提示。输入框采用简单的描述文字,并使用左对齐,以符合阅读视线规律,选择恰当的文字颜色给予用户输入反馈,对于错误输入给予红色提示,对于正确输入无提示或者给予绿色提示,对于危险输入给予黄色提示。致力于设计一款用户友好型操作界面。

    用户界面设计为左右布局,左边用于栏目导航,右边用于栏目内容的展示,便捷高效的同时让页面看起来更加活跃(见图5)。

    图5 页面布局概览

    引入插件apexcharts 进行对部分场景数据的图形绘制,用更加直观的数据图展示内容(见图6)。

    图6 个人答题情况扇形图

    对于表格类数据进行数据分级,不同类数据采用不同配色,直观化展示各类信息,使用户在了解信息优先级的同时对信息有更快速更准确的定位(见图7)。

    图7 个人历史答题情况图

    2.1 用户权限验证的实现

    对于用户权限验证的实现,本系统通过客户端对Header(请求头)中的Authorization 字段里携带的token令牌进行用户的权限校验,客户端发出的所有请求都会携带这个令牌,当用户注销,令牌就会在客户端进行销毁,由于token 无状态的特点,服务器不需要保存令牌的状态,可以有效降低服务器进行数据库查询的次数。在用户登录的时候,系统会根据用户的个人信息和登录时间生成一个具有有效时间限制的token(令牌)。

    本系统使用filter(过滤器)和interceptor(拦截器)对部分需要权限的页面进行授权校验,从Header 中获取令牌,对其进行Base64Decode解码后对authorization字段进行验证。验证通过后,修改Header注入用户ID和用户等级信息。当验证的令牌的信息无效或者错误时,拒绝访问当前请求的页面并返回授权错误信息。

    2.2 后台服务与判题服务器通信的实现

    本系统采用RabbitMQ 消息队列实现后台服务与判题服务器之间的通信主要服务内容有:向判题服务器发送判题请求,向后台服务发送判题服务器返回的判题结果,实现心跳机制——定时向后台服务端发送判题端的系统信息。MQ 服务器中的重发机制所带来的因数据量过多导致内存溢出的危险,可以通过调用ChannelAwareMessageListener 接口实现来ack 机制来消除。

    2.3 自动判题的实现

    判题服务器在接收RabbitMQ 消息队列中的判题请求之后,将提交的代码写入临时文件。根据请求者选择使用的语言类型,选择不同的编译器进行编译并生成可执行文件。文件生成完毕即使用题目所对应的测试用例进行测试,执行完的结果保存至.out 后缀的文件中,通过用Ptrace 对进程进行跟踪,执行完毕删除临时文件,并使用题目所对应的样本标准测试结果文件和执行生成的文件进行比对,判断的结果通过RabbitMQ消息队列返回。

    伴随信息化教育的普及,OJ系统的应用场景也顺应增加,本系统在保证原有功能的基础上,增加了对应教学场景的功能,对成绩和代码的导出,反作弊管理的加强。本系统的后期测试结果表明所有功能运行正常,也符合了预期性能要求。本系统正式运行后在日常教学环境中得到了良好应用,不仅能够满足ACM队员的日常训练、模拟比赛、开展竞赛,也能作为教师开展相应程序类设计课程的教学辅助工具,为学校所有计算机类学生和想提高自己算法能力的学生提供了一个便捷有效的平台。

    猜你喜欢 后台页面竞赛 答案动漫界·幼教365(中班)(2021年4期)2021-05-23让Word同时拥有横向页和纵向页电脑爱好者(2020年17期)2020-09-14数学潜能知识竞赛中学生数理化·八年级数学人教版(2019年11期)2019-09-10Wu Fenghua:Yueju Opera Artist文化交流(2019年1期)2019-01-11后台暗恋读者·校园版(2018年3期)2018-01-18创新思维竞赛(3)中学生数理化·高一版(2017年3期)2017-07-08创新思维竞赛(6)中学生数理化·高一版(2016年6期)2016-05-14后台的风景阅读与作文(高中版)(2014年6期)2014-06-28驱动器页面文件大小的总数为何总是07网络与信息(2009年9期)2009-10-30“我爱海洋”知识竞赛小火炬·阅读作文(2009年5期)2009-05-27
    相关热词搜索: 框架 设计 系统

    • 文学百科
    • 故事大全
    • 优美句子
    • 范文
    • 美文
    • 散文
    • 小说文章