基于微服务架构的编程实践教学平台设计与实现
2024-11-01唐晓刘文彬揭笔雨屠添翼
摘要:在线评判系统提供的实时评测功能大大提高了检验编程水平的工作效率,广泛应用于竞赛、教学、招聘等领域。然而传统的在线评判系统对于管理端来说不够友好,需要根据实际场景定制开发,因此提出了基于微服务架构的解决方案。将实践教学平台划分为多个服务,以判题为核心服务,扩展教学、竞赛、培训等业务服务,通过微服务之间的通信实现各个功能模块的协同工作,使用Docker容器化技术来简化部署和管理过程,可提升平台的灵活性和扩展性。实践结果表明,基于微服务架构的实践教学平台能够为学生提供了一种创新的学习环境,适应多场景,有利于多元化教学。
关键词:微服务实践教学在线评判系统平台设计
DesignandImplementationofProgrammingPracticeTeachingPlatformBasedonMicro-ServiceArchitecture
TANGXiaoLIUWenbinJIEBiyuTUTianyi*
SchoolofComputerand ;ElectricalEngineering,HunanUniversityofArtsandSciences,ChangdeCity,Hu’nanProvince,415000China
Abstract:Thereal-timeevaluationfunctionprovidedbytheonlineevaluationsystemgreatlyimprovestheworkefficiencyoftestingtheprogramminglevel,andiswidelyusedincompetition,teaching,recruitmentandotherfields.However,thetraditionalonlineevaluationsystemisnotfriendlyenoughforthemanagementside,requirescustomizeddevelopmentaccordingtotheactualscenario.Therefore,asolutionbasedonthemicro-servicearchitectureisproposed.Thepracticalteachingplatformisdividedintomultipleservices,withthecorrectionasthecoreservice,thebusinessservicessuchasteaching,competitionandtrainingareexpanded,andthecollaborativeworkofeachfunctionalmoduleisrealizedthroughthecommunicationbetweenmicro-services.Dockercontainerizationtechnologyisusedtosimplifythedeploymentandmanagementprocess,whichcanimprovetheflexibilityandexpansibilityoftheplatform.Thepracticalresultsshowthatthepracticalteachingplatformbasedonmicro-servicearchitecturecanprovidestudentswithaninnovativelearningenvironment,adapttomultiplescenarios,andfacilitatediversifiedteaching.
KeyWords:Micro-service;Practicalteaching;Onlineevaluationsystem;Platformdesign
随着信息技术的快速发展,教育领域也逐渐迎来了数字化转型的时代。传统的教学模式已经无法满足当今社会对教育的需求,学生和教师需要更加灵活和高效的教学方式和工具来支持他们的学习和教学活动。但随着平台功能的不断增加和用户数量的迅速增长,传统的单体应用架构变得越来越庞大和复杂,这种架构存在可靠性低、维护成本高及扩展性差的问题,无法满足快速响应和动态扩展的需求[1]。
微服务架构相较于传统的单体应用具有更高的可扩展性、可维护性等众多优势。为了解决单体架构带来的种种缺陷,选择采用微服务架构来设计和实现一个编程实践教学平台。本文将探讨如何采用微服务架构设计和实现一款高性能、可扩展和易维护的在线实践教学平台,旨在为用户提供更优质、更高效和更便捷的学习体验。
1微服务的简介
1.1微服务的概述
微服务架构是一个软件架构模式[2],它将一个大型应用程序拆分成一组小型和独立的服务,每个服务专注于完成一个特定的业务功能,通过服务之间的协调与通信,完成整个系统的功能需求。
1.2微服务的优点
微服务将系统拆分为多个松耦合的服务,每个服务独立部署,从而实现更高的灵活性、可扩展性和可维护性。微服务架构中,每个服务都是独立运行的,如果一个微服务发生故障,其他微服务仍然可以继续运行,从而减少了单点故障的风险。同时,由于每个服务都可以独立测试、部署和维护,可以单独进行维护和升级,从而降低了维护难度和风险。当需要扩展某个服务时,只需针对该微服务进行水平扩展,而无需对整个应用进行扩展,从而提高整个系统的性能和吞吐量。
2需求分析
实践教学平台的功能性需求分析需要充分考虑教学实践的高效性和多场景性。首先,平台应该提供常规在线评判(OnlineJudge,OJ)系统的主体功能,借助OJ系统在线评测和即时反馈的特点,提升编程训练效率。其次,平台应该满足教学、竞赛等多场景下跟踪学生学习进度和评估学习成果的需求。再次,平台需要具备互动性和即时反馈功能,可以促进学生之间的合作学习和与教师的及时沟通。最后,平台的功能设计应该合理实用,使管理者、教师和学生能够轻松地使用和管理教学资源。
实践教学平台的非功能性需求分析至关重要,因为这些需求直接影响用户体验、系统性能和安全性。选择微服务架构的主要原因在于其提供了可扩展性、敏捷和灵活性、故障隔离、独立开发和部署、集成和互操作性、旧系统重构升级、资源优化及应用可靠性等优势。通过微服务架构,实践教学平台可以更有效地处理大量用户请求,实现快速的开发迭代和部署,确保系统的稳定性和可用性,并为未来的系统扩展和功能增加提供了更大的灵活性和可行性。
3.系统设计
3.1微服务的划分
在服务划分方面,由于不同用户有不同需求和业务功能,没有一个普适规则可以适用于所有情况。为了更好地满足用户体验[3],考虑以下领域划分方案。(1)授权服务:主要职责是管理用户的身份验证和授权过程,实现对不同角色的精细访问控制和权限管理,确保只有经过授权的用户才能访问特定的服务和功能,保护系统的安全性和数据的机密性。(2)题库服务:该服务是实践教学平台的基础,旨在提供高质量且不同题型的题目并进行管理。(3)判题服务:其功能是实践教学平台的核心,被划分出来接收用户提交的代码并对其进行测试和评估,给出准确的判定结果。(4)教学服务:教学服务旨在提供一个平台供教师与学生之间进行教学互动,教师可以在该平台上创建和管理课程,发布作业,并与学生进行在线互动,以提供更好的教学体验。(5)竞赛服务:在计算机相关专业中,学科竞赛是不可或缺的组成部分,竞赛服务可以提供组织和管理竞赛的功能。(6)成长服务:学生在学习时可能会迷茫于选择参加竞赛还是做项目,成长服务可以提供学习路径规划、技能评估和学习资源推荐等支持,以帮助学生成长与发展并做出更好的选择。
当设计实践教学平台时,平台被细分为6个核心功能模块,每个模块严格遵循微服务的设计原则。每个微服务拥有单一的职责(SingleResponsibilityPrinciple,SRP),确保了高度的自主性,使每个微服务都能独立承担其特定的任务。同时,通过运用开放/封闭原则(Open-ClosedPrinciple,OCP)来设计平台,这意味着系统能够开放给新功能的加入,同时保持对已有功能的封闭性,从而确保平台能够灵活和可扩展地满足各种教学需求。每个微服务通过明确定义的API接口通信,实现高内聚和低耦合,提升平台可维护性、可扩展性和可靠性。通过采用微服务架构,实践教学平台能够更好地满足复杂多变的教学需求,为师生提供高效和便捷的教学和学习体验。
3.2业务逻辑设计
系统平台的核心是业务逻辑。业务逻辑既包含了数据关系,又包含了业务规则。尽管微服务划分在一定程度上降低了单体应用业务逻辑的复杂性,但也带来了新的挑战,这种挑战与微服务拆分策略有直接关系。拆分成多而小的微服务时,虽然单个微服务内部业务逻辑更简单,但跨服务边界的对象引用和容易破坏ACID事务约束这两个问题会更加难以处理;而拆分成小而多的微服务时,情况刚好相反。使用面向对象设计方法,建立由多个具体状态和行为的相关类构成的领域模型,可以有效应对一定复杂程度的业务逻辑;而使用领域驱动设计方法,可以进一步应对微服务间一系列的数据问题[4]。以教学微服务为例,领域模型设计参见图1。
3.3整体解决方案
实践教学平台基于微服务架构设计,包含PC端Web层、统一网关、Nacos注册中心、统一日志中心、微服务集群、数据库集群、Redis集群和消息队列集群。通过这些组件的协同工作,可以提供高可用性、可扩展性和灵活性的教学平台解决方案。实践教学平台的架构设计如图2所示。
图2实践教学平台架构图
4实践教学平台的实现
4.1前端和后端的实现
在实践教学平台中,前端和后端的实现是相辅相成的,它们共同构成了整个系统的用户交互和数据处理部分。
前端主要负责与用户进行交互,展示数据和接收用户输入。在实践教学平台中,前端利用HTML、CSS和JavaScript等技术进行开发。HTML用于构建页面的基本结构,CSS用于控制页面的样式和布局,JavaScript则用于实现页面的动态交互功能。为了提升开发效率和用户体验,使用了前端框架,如React、Vue.js等,这些框架提供了丰富的组件和工具,可以快速构建出功能强大且易于维护的前端应用。在实践教学平台中,前端需要实现诸如用户登录、课程展示、题目浏览、作业提交、成绩查看等功能,为了实现这些功能,前端需要与后端进行通信,获取所需的数据,并在页面上展示给用户。
后端主要负责处理业务逻辑、数据存储和与前端的数据交互。在实践教学平台中,后端使用多种语言和技术进行开发,其主要使用Java语言并结合SpringBoot框架,可以极大地提高开发效率和系统的稳定性。SpringBoot是一个用于简化Spring应用初始搭建及开发过程的框架,它提供了很多开箱即用的功能,如自动配置、外部化配置、内嵌的Servlet容器等,可以更加专注于业务逻辑的实现,而不是花费大量时间在配置和部署上。后端需要实现用户管理、权限控制、题目管理、作业管理、成绩管理等功能,为支持这些功能,后端通过与MySQL结合,设计合理的数据库结构,存储用户信息、题目数据、代码数据等。同时,后端还需要提供API接口供前端调用,以实现前后端的数据交互。在实践教学平台中,后端使用RESTfulAPI和GraphQL等技术来实现与前端的数据交互。RESTfulAPI提供了清晰的资源和操作方式,适用于简单的数据交互;GraphQL则提供了强大的查询能力,适用于复杂的数据获取场景。这种结合方式能够满足不同业务场景下的需求。
通过合理的设计和实现,前端和后端可以共同构建一个高效、稳定和易于扩展的实践教学平台,为师生提供优质的教学和学习体验。
4.2服务注册与发现的实现
服务注册与发现是构建微服务架构中的一个核心概念,它涉及将微服务注册到中心化的服务注册表,并允许其他微服务通过查询该注册表来发现和调用需要的服务[5]。
在实践教学平台中,使用Nacos来实现服务的注册与发现。在每个微服务的配置文件中添加Nacos客户端的依赖,服务启动时,将自身注册到Nacos注册中心,对于需要调用其他服务的服务,通过查询Nacos注册表来获取目标服务的元数据,从而实现了微服务间的通信。
4.3负载均衡与网关的实现
在实践教学平台设计中,负载均衡和网关的实现是至关重要的。负载均衡的作用是将请求均匀地分发到多个服务实例,以提高系统的可用性和性能。通过使用负载均衡器Nginx,有效地管理和分发请求,避免单个服务实例过载。另一方面,网关是实践教学平台的入口,负责处理请求的路由和协议转换。通过使用SpringCloudGateway网关技术,实现对不同微服务的请求路由和转发,确保请求以一致的方式被处理。
在实践教学平台中,负载均衡和网关通常协同工作,实现负载均衡和请求流量的统一管理,提高了系统的可伸缩性和可靠性。
4.4部署管理的实现
为了简化项目部署和提高系统的可扩展性,使用Docker容器化技术部署项目。首先,将项目打包;然后,通过在Dockerfile文件中编写脚本构建镜像;最后,使用dockerrun命令创建并启动容器,容器中包含了应用程序及其所需的库、工具和依赖项,从而实现应用程序在不同环境中的一致性运行。由于实践教学平台包含多个微服务,使用Docker-Compose工具,通过YAML文件来配置应用程序的服务[6],包括容器、网络、数据卷和环境变量等,从而实现容器的统一管理和快速部署。
5结语
本文介绍了基于微服务架构的实践教学平台的设计与实现,充分利用了微服务的优势,通过拆分功能模块,将整个平台划分为多个微服务。针对不同的教学需求和功能特点,独立地开发、测试和部署各个服务,构建了灵活、可扩展和易于维护的系统,满足不同用户的个性化需求,将为教师和学生带来更好的教学体验。
参考文献
[1]张墨涵,王雪英,沈学东.微服务架构技术与挑战[J].网络安全技术与应用,2023(2):3-4.
[2]刘坤.基于微服务架构的在线教学平台的设计与实现[D].西安:西北大学,2023.
[3]卢日锋.腾讯视频APP的用户体验提升策略研究[D].广州:广东财经大学,2023.
[4]克里斯·理查森,喻勇译.微服务架构设计模式[M].喻勇,译.北京:机械工业出版社,2019.
[5]吴雄劲.微服务框架中的服务注册中心的设计与开发[J].工业控制计算机,2021,34(8):130-132.
[6]董子奇,刘淇,高原,等.基于容器技术的微服务部署研究[J].信息技术与标准化,2023(Z1):93-98.