开题报告模板 ----- 关于开发OJ系统

一、立论依据

课题来源及研究的目的和意义

1.1 选题背景

目前大多线上教学的方式只是单纯地把线下学习模式下的课表、教材搬上互联网,缺乏对学生的反馈[1]。尤其在计算机课程的学习中,编程实践是其重要的一环,通过代码在线评测(OnlineJudge,OJ)系统[2],学生可以在学习课程的理论知识后进行实践,在系统中选择题目并编程,提交代码至评测系统,实时获取结果,教师可以布置题目和查看各个学生的完成情况,以及给不同学生做出评价。代码在线评测系统可以完善在线教育中的教学反馈的过程,另一方面代码在线评测系统还可用于日常教学,免去传统人工评测的负担。代码在线评测系统是一种采用黑盒测试方法,对用户程序输出结果的正确性进行判断的自动化程序[3],传统的代码在线评测系统采用单体架构,在处理大量并发提交时会出现响应慢,请求失败等问题,而且在集中式架构中系统各模块耦合度高,导致开发维护困难[4][5]。

微服务架构是一种将一个单一应用程序开发为一组小型服务的方法,每个服务运行在自己的进程中,服务间通信采用轻量级通信机制[6]。由微服务架构开发的系统是由众多独立的服务组成,这些独立的服务只负责提供单个业务的功能。微服务采用分布式部署,可以实现流量分担,解决并发问题,并且降低了系统中各模块之间的耦合,易于扩展和维护。

针对现有的代码在基于单体架构的评测系统存在的并发问题和维护问题等,本文将设计与实现一种基于微服务架构的代码在线评测系统 

1.2研究意义

随着计算机编程教育的普及,越来越多的学生需要进行编程题目的练习与评测。在线评测系统可以提供一个方便、高效的平台,让学生能够在线提交自己的编程代码并得到及时的评测结果和反馈。这可以帮助学生更好地理解和掌握编程知识,提高编程技能。编程题目在线评测系统也对教师和教育机构具有重要意义。它可以帮助教师更好地管理学生的作业和考试,减少人工批改的工作量,并提供针对性的反馈和建议。学校可以基于在线评测系统进行编程能力的评估和排名,以更科学的方式选拔人才。教师可以根据自己的教学需要将所需题目进行多种多样的组合,提取合适的知识的表达方式。再者,在线评测系统主要是为学校竞赛服务,以提高竞赛信息管理效率,促进学生竞赛全面发展,具有非常大的现实意义和广阔的应用场景

该系统还可以为编程竞赛和招聘面试等活动提供支持。对于招聘面试来说,可以帮助面试官快速评估候选人的编程水平和解题能力

二、文献综述

课题研究领域的发展现状及可能的应用领域

2.1发展现状

OnlineJudge系统是一个在线判题系统,能够对用户提交的多种程序源代码进行编译执行,并根据预先存储的结果进行校验后得到源程序的正确性。OnlineJudge系统最初使用于ACM比赛中[7],随着国内计算机行业的不断发展,许多高校开发了属于自己的OnlineJudge系统,同时计算机行业也开发了OnlineJudge系统服务于个人或他人。现在OnlineJudge系统不仅在比赛中使用,还在教学、考试、程序上机实践中使用,极大提高了教学工作效率和方便了各类编程人员。

随着竞赛的发展,出现了越来越多的在线判题系统用于训练和内部比赛,与此同时,在C语言程序设计、JAVA语言程序设计、Python语言程序设计的教学过程中也进行了应用。目前应用比较广泛的在线判题系统有:浙江大学在线评测系统(ZOJ)[8]和北京交通大学在线评测系统(BOJ)[9]。

2012年,张浩斌提出了基于开放式云平台的开源在线评测系统[10],对HUSTOJ系统进行了大量改进,包括改写和重构判题核心程序,对多核处理器有更好的支持,提高多线程判题的性能,扩充原有的沙箱技术等,并增加了Python、PHP等多种语言的支持,有效地解决了系统代码获取和平台搭建这两大难题。

现阶段的在线评测系统在保证程序执行安全上都采用了C语言编写沙盒的方案,沙盒系统虽然技术较为完备,但是其功能繁琐,实现复杂,李芙玲和何灏贤提出了基于Docker实现在线评测系统的安全性[11],利用Docker的高隔离特性,规避了使用Docker面临的root权限、资源耗尽等风险,并对Docker容器占用的资源做了合理限制,实现应用系统和评测系统分离。

2.2应用领域

在线评测系统可以广泛应用于学校、大学和在线教育平台中,为编程教育提供支持。它可以用于作业的批改和反馈,课程的自动化评估,以及编程能力的培养和提升。许多编程竞赛,如ACM国际大学生程序设计竞赛、GoogleCodeJam等,都依赖于在线评测系统进行参赛者代码的评测和排名。在线评测系统可以提供公正、客观的评测平台,为竞赛活动提供技术支持。在技术类岗位的招聘中,面试官通常需要评估候选人的编程能力和解题能力。在线评测系统可以提供一个便捷的评测工具,帮助面试官快速评估候选人的编程水平,并作为面试结果的参考。

三、研究内容

功能需求及设计框架

3.1功能需求

(用户界面)的功能需求:

用户注册和登录:提供用户注册和登录功能,允许用户创建账户并登录系统。

题目列表和搜索:展示可用的题目列表,并提供搜索和筛选功能,让用户可以按关键字或标签找到感兴趣的题目。

题目详情和描述:显示题目的详细信息和描述,包括题目的目的、要求和注意事项等。

响应提交和保存:允许用户提交题目的响应,并提供保存为草稿的选项,以便用户稍后回来完成或修改。

题目结果展示:在用户完成题目后,展示题目结果,可能是得分或详细的解释。

题目讨论和评论:用户可以参与题目的讨论和评论,与其他用户交流和分享经验。

(管理员界面)的功能需求:

      用户管理和权限控制:允许管理员管理用户账户、权限和个人信息。

题目创建和编辑:管理员可以创建新的题目,包括问题、得分规则等,并提供编辑功能来修改题目的内容。

题目数据管理:管理员可以访问和管理题目的响应数据,进行统计、分析和导出。

分类和标签管理:允许管理员管理题目的分类和标签,以便用户能够方便地进行筛选和浏览。

     

3.2设计框架

   系统分为前端、后端,前端负责向用户展示图形界面,方便用户与后端进行数据交互。后端为6个部分:API网关、微服务实例、服务注册中心、远程调用、负载均衡和配置中心。API网关是系统的统一入口,提供最基本的路由服务,负载将前端请求转发到上游服务,另外API网关还要具备容错限流机制,实现对上游服务的保护。微服务实例负责接受API网关的调用,处理具体的业务,对于较复杂的业务需要在多个微服务实例之间通过远程调用协调完成,每一种类型的微服务可以部署多台机器上组成集群对外提供服务,如果是对集群发起的远程调用就需要负载均衡机制来从集群中选择一台机器作为目标,每个微服务实例可以被单独的配置。

用户在前端进行操作时会发起请求,请求首先到达网关,网关会解析请求得到统一资源定位符(UniformResourceLocator,URL),根据URL在服务注册中心的注册表中查找对应服务的IP地址,并把请求转发给服务,在服务中处理请求,执行业务的过程中会使用到MySQL,Redis,RabbitMQ和Docker等,当业务较为复杂时还会调用其他服务,请求处理完毕后结果返回至网关,网关再转发给前端通知用户。

包含如下服务:

用户管理服务:包括用户注册、登录、个人信息管理和权限控制等,确保用户身份验证和权限管理。

题库管理服务:提供创建、编辑和删除题目的功能,包括题目描述、输入输出样例、答案等信息的录入和管理。

代码评测服务:实现用户提交代码的功能,包括选择题目、上传代码文件、选择编译器等,并进行代码的编译和执行。

代码管理服务:对用户提交的代码进行评测,包括编译错误、运行错误、时间限制、内存限制等方面的判定,并将评测结果展示给用户。

搜索服务:搜索符合题目,和记录。保存用户的代码提交历史,提供查看历史代码版本的功能,便于用户追溯和分析代码改动。

四、研究基础

所需实验手段、研究条件和实验条件

开发平台

    IDEA+阿里云轻量级服务器

前端开发技术:

Vue3Vue-cli脚手架Ui组件库

ESLint+Prettier+TypeScript

Markdown富文本编辑器

Vue3是一种流行的JavaScript框架,用于构建用户界面。它具有响应式设计、组件化开发和虚拟DOM等特性,使得开发者可以快速构建交互式的Web应用程序。

VueCLI是Vue的官方脚手架工具,用于创建和管理Vue项目。它提供了一些用于项目开发的命令行工具和配置文件,包括项目初始化、开发服务器、构建和部署等功能,简化了Vue应用程序的开发过程。

UI组件库是为了简化用户界面开发而创建的一套组件集合。它包含了常见的UI元素和样式,如按钮、表单、导航栏等,可以提高开发效率和一致性。在Vue开发中,常见的UI组件库有Element-UI、AntDesignVue、Vuetify等。

ESLint是一种用于JavaScript代码检查的工具,它可以帮助开发者捕获错误、保持代码质量和统一的编码风格。Prettier是一种代码格式化工具,用于自动化地调整代码风格和格式。

TypeScript是一种由微软开发的JavaScript的超集,添加了静态类型化和其他高级特性。它可以在编译时检查类型错误,并提供更好的代码提示和重构支持。

Markdown是一种轻量级的标记语言,常用于创建结构化文档和博客文章。富文本编辑器是一种可以直观地编辑和展示Markdown文档的编辑器。

后端开发技术:

SpringCloud

  1. nacos注册中心
  2. GateWay网关
  3. Feign客户端调用

Springboot+Docker+MySql+MyBatis-Plus+Redis+TabbitMQ

SpringBoot是一个快速开发框架,它简化了基于Spring的应用程序的搭建和配置。它提供了开箱即用的功能,包括自动配置、自动部署和监控等,使得开发者能够快速构建可靠的Java应用程序。

Docker是一个开源的容器化平台,它可以将应用程序和其依赖的环境打包为一个可移植的容器。通过使用Docker容器,开发人员可以在不同的环境中轻松部署和运行应用程序,实现了跨平台和一致性的运行环境。

MySQL是一个流行的开源关系型数据库管理系统,它具有可靠性和扩展性,并支持广泛的数据处理需求。

MyBatis-Plus是一个基于MyBatis的增强工具,它简化了与数据库的交互操作。它提供了一些便捷的功能,如自动生成SQL语句、分页查询、性能分析等,可以提高开发效率。

Redis是一个内存数据库,它支持键值对存储,并提供了丰富的数据结构和功能。Redis具有高性能、可扩展和丰富的功能,常用于缓存、队列等场景。

RabbitMQ是一个开源的消息中间件,它实现了高可靠性、可扩展性和灵活性的消息传递模式。RabbitMQ提供了消息队列的功能,可以用于解耦和异步处理各个组件之间的通信。

构建工具与包管理器:

使用npm或Yarn进行前端依赖库的管理和安装。

版本控制:

使用Git等版本控制工具进行代码管理和团队协作。

实现核心

    权限校验:谁能提代码,谁不能提代码

    代码沙箱:防止用户代码藏毒,修改系统权限。需要隔离的、安全的环境,用户的代码不会影响到沙箱之外的系统的运行

    判题规则:题目用例的比对,结果的验证

    任务调度:服务器资源有限,用户要排队,按照顺序去依次执行判题

五、计划进度

第1-2周:按照学院要求,积极准备,完成开题报告和开题PPT,进行开题;

第3-4周:完成文献翻译、系统方案设计及功能设计;

第5-7周:系统详细设计、编码调试

第8周:毕业设计中期检查;

第9-12周:完善系统,完成论文初稿;

第13-14周:代码验收和资格审查,完成毕业设计论文;

第15周:毕业设计论文查重、完善并提交答辩组,毕业答辩与成绩评定,论文修改提交最终稿。

六、参考文献

  1. 郑庆华,董博,钱步月,田锋,魏笔凡,张未展等.智慧教育研究现状与发展趋势.计算机研究与发展,2019,56(01):209-224
  2. SzymonWasik,MaciejAntczak,JanBadura,ArturLaskowski,TomaszSternal.ASurveyonOnlineJudgeSystemsandTheirApplications.ACMComputingSurveys,2019,51(1):34
  3. 苑文会,彭四伟.黑盒测试技术在辅助教学系统中的应用.计算机工程与设计,2006,27(23):4604-4606
  4. MiaoWang,WentaoHan,WenguangChen.MetaOJ:Amassivedistributedonlinejudgesystem.TsinghuaScienceandTechnology,2021,26(4):548-557
  5. 胡星,王泽瑞,李烁,杨楠,张知凡,王巧等.POP:一个基于微服务架构的在线编程系统.计算机科学,2017,44(04):8-11
  6. SillAlan.Thedesignandarchitectureofmicroservices.IEEECloudComputing,2016,3(5):76-8
  7. 茅海军,叶海荣.在线评测在C程序设计实验教学中的研究与评价[J].中国校外教育,2012(36):162-16
  8. 张浩斌.基于开放式云平台的开源在线评测系统设计与实现[J].计算机科学,2012,39(S3):339-343+348.姜开达,Redmine项目管理平台介绍.中国教育网络,2009-06-29.
  9. 刘楠,孙国道,田贤忠.ACM在线评判系统设计与实现[J].计算机时代,2010,(02):34-35+38.
  10. 张浩斌.基于开放式云平台的开源在线评测系统设计与实现.计算机科学,2012
  11. 李芙玲,何灏贤.基于Docker实现在线评测系统的安全性.华北科技学院学报,2018,15(05):95-100
  12. 蔡崇超.基于Web的在线判题系统设计与实现[J].软件导刊,2016,15(03):107-109.
  13. 晏燕.在线编程评测系统设计与实现[D].吉林大学,2017.
  14. 王腾,姚丹霖.OnlineJudge系统的设计开发[J].计算机应用与软件,2006,(12):129-130+137.
  15. 陈湘骥,徐东风,杨秋妹.在线评判在C语言课程设计教学中的应用[J].计算机教育,2010,(03):97-100.DOI:10.16512/j.cnki.jsjjy.2010.03.031
  16. 王硕,郑晓东,张强.基于Linux的沙箱评测系统内核的设计与实现[J].现代信息科技,2022,6(12):67-70.DOI:10.19850/j.cnki.2096-4706.2022.012.017
  17. 张旭.基于微服务的代码在线评测系统设计与实现[D].华中科技大学,2022.DOI:10.27157/d.cnki.ghzku.2022.004858

你可能感兴趣的:(微服务,docker)