摘要:在線評判系統(tǒng)提供的實時評測功能大大提高了檢驗編程水平的工作效率,廣泛應用于競賽、教學、招聘等領域。然而傳統(tǒng)的在線評判系統(tǒng)對于管理端來說不夠友好,需要根據(jù)實際場景定制開發(fā),因此提出了基于微服務架構的解決方案。將實踐教學平臺劃分為多個服務,以判題為核心服務,擴展教學、競賽、培訓等業(yè)務服務,通過微服務之間的通信實現(xiàn)各個功能模塊的協(xié)同工作,使用Docker容器化技術來簡化部署和管理過程,可提升平臺的靈活性和擴展性。實踐結果表明,基于微服務架構的實踐教學平臺能夠為學生提供了一種創(chuàng)新的學習環(huán)境,適應多場景,有利于多元化教學。
關鍵詞:微服務實踐教學在線評判系統(tǒng)平臺設計
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
隨著信息技術的快速發(fā)展,教育領域也逐漸迎來了數(shù)字化轉型的時代。傳統(tǒng)的教學模式已經(jīng)無法滿足當今社會對教育的需求,學生和教師需要更加靈活和高效的教學方式和工具來支持他們的學習和教學活動。但隨著平臺功能的不斷增加和用戶數(shù)量的迅速增長,傳統(tǒng)的單體應用架構變得越來越龐大和復雜,這種架構存在可靠性低、維護成本高及擴展性差的問題,無法滿足快速響應和動態(tài)擴展的需求[1]。
微服務架構相較于傳統(tǒng)的單體應用具有更高的可擴展性、可維護性等眾多優(yōu)勢。為了解決單體架構帶來的種種缺陷,選擇采用微服務架構來設計和實現(xiàn)一個編程實踐教學平臺。本文將探討如何采用微服務架構設計和實現(xiàn)一款高性能、可擴展和易維護的在線實踐教學平臺,旨在為用戶提供更優(yōu)質、更高效和更便捷的學習體驗。
1微服務的簡介
1.1微服務的概述
微服務架構是一個軟件架構模式[2],它將一個大型應用程序拆分成一組小型和獨立的服務,每個服務專注于完成一個特定的業(yè)務功能,通過服務之間的協(xié)調與通信,完成整個系統(tǒng)的功能需求。
1.2微服務的優(yōu)點
微服務將系統(tǒng)拆分為多個松耦合的服務,每個服務獨立部署,從而實現(xiàn)更高的靈活性、可擴展性和可維護性。微服務架構中,每個服務都是獨立運行的,如果一個微服務發(fā)生故障,其他微服務仍然可以繼續(xù)運行,從而減少了單點故障的風險。同時,由于每個服務都可以獨立測試、部署和維護,可以單獨進行維護和升級,從而降低了維護難度和風險。當需要擴展某個服務時,只需針對該微服務進行水平擴展,而無需對整個應用進行擴展,從而提高整個系統(tǒng)的性能和吞吐量。
2需求分析
實踐教學平臺的功能性需求分析需要充分考慮教學實踐的高效性和多場景性。首先,平臺應該提供常規(guī)在線評判(OnlineJudge,OJ)系統(tǒng)的主體功能,借助OJ系統(tǒng)在線評測和即時反饋的特點,提升編程訓練效率。其次,平臺應該滿足教學、競賽等多場景下跟蹤學生學習進度和評估學習成果的需求。再次,平臺需要具備互動性和即時反饋功能,可以促進學生之間的合作學習和與教師的及時溝通。最后,平臺的功能設計應該合理實用,使管理者、教師和學生能夠輕松地使用和管理教學資源。
實踐教學平臺的非功能性需求分析至關重要,因為這些需求直接影響用戶體驗、系統(tǒng)性能和安全性。選擇微服務架構的主要原因在于其提供了可擴展性、敏捷和靈活性、故障隔離、獨立開發(fā)和部署、集成和互操作性、舊系統(tǒng)重構升級、資源優(yōu)化及應用可靠性等優(yōu)勢。通過微服務架構,實踐教學平臺可以更有效地處理大量用戶請求,實現(xiàn)快速的開發(fā)迭代和部署,確保系統(tǒng)的穩(wěn)定性和可用性,并為未來的系統(tǒng)擴展和功能增加提供了更大的靈活性和可行性。
3.系統(tǒng)設計
3.1微服務的劃分
在服務劃分方面,由于不同用戶有不同需求和業(yè)務功能,沒有一個普適規(guī)則可以適用于所有情況。為了更好地滿足用戶體驗[3],考慮以下領域劃分方案。(1)授權服務:主要職責是管理用戶的身份驗證和授權過程,實現(xiàn)對不同角色的精細訪問控制和權限管理,確保只有經(jīng)過授權的用戶才能訪問特定的服務和功能,保護系統(tǒng)的安全性和數(shù)據(jù)的機密性。(2)題庫服務:該服務是實踐教學平臺的基礎,旨在提供高質量且不同題型的題目并進行管理。(3)判題服務:其功能是實踐教學平臺的核心,被劃分出來接收用戶提交的代碼并對其進行測試和評估,給出準確的判定結果。(4)教學服務:教學服務旨在提供一個平臺供教師與學生之間進行教學互動,教師可以在該平臺上創(chuàng)建和管理課程,發(fā)布作業(yè),并與學生進行在線互動,以提供更好的教學體驗。(5)競賽服務:在計算機相關專業(yè)中,學科競賽是不可或缺的組成部分,競賽服務可以提供組織和管理競賽的功能。(6)成長服務:學生在學習時可能會迷茫于選擇參加競賽還是做項目,成長服務可以提供學習路徑規(guī)劃、技能評估和學習資源推薦等支持,以幫助學生成長與發(fā)展并做出更好的選擇。
當設計實踐教學平臺時,平臺被細分為6個核心功能模塊,每個模塊嚴格遵循微服務的設計原則。每個微服務擁有單一的職責(SingleResponsibilityPrinciple,SRP),確保了高度的自主性,使每個微服務都能獨立承擔其特定的任務。同時,通過運用開放/封閉原則(Open-ClosedPrinciple,OCP)來設計平臺,這意味著系統(tǒng)能夠開放給新功能的加入,同時保持對已有功能的封閉性,從而確保平臺能夠靈活和可擴展地滿足各種教學需求。每個微服務通過明確定義的API接口通信,實現(xiàn)高內聚和低耦合,提升平臺可維護性、可擴展性和可靠性。通過采用微服務架構,實踐教學平臺能夠更好地滿足復雜多變的教學需求,為師生提供高效和便捷的教學和學習體驗。
3.2業(yè)務邏輯設計
系統(tǒng)平臺的核心是業(yè)務邏輯。業(yè)務邏輯既包含了數(shù)據(jù)關系,又包含了業(yè)務規(guī)則。盡管微服務劃分在一定程度上降低了單體應用業(yè)務邏輯的復雜性,但也帶來了新的挑戰(zhàn),這種挑戰(zhàn)與微服務拆分策略有直接關系。拆分成多而小的微服務時,雖然單個微服務內部業(yè)務邏輯更簡單,但跨服務邊界的對象引用和容易破壞ACID事務約束這兩個問題會更加難以處理;而拆分成小而多的微服務時,情況剛好相反。使用面向對象設計方法,建立由多個具體狀態(tài)和行為的相關類構成的領域模型,可以有效應對一定復雜程度的業(yè)務邏輯;而使用領域驅動設計方法,可以進一步應對微服務間一系列的數(shù)據(jù)問題[4]。以教學微服務為例,領域模型設計參見圖1。
3.3整體解決方案
實踐教學平臺基于微服務架構設計,包含PC端Web層、統(tǒng)一網(wǎng)關、Nacos注冊中心、統(tǒng)一日志中心、微服務集群、數(shù)據(jù)庫集群、Redis集群和消息隊列集群。通過這些組件的協(xié)同工作,可以提供高可用性、可擴展性和靈活性的教學平臺解決方案。實踐教學平臺的架構設計如圖2所示。
圖2實踐教學平臺架構圖
4實踐教學平臺的實現(xiàn)
4.1前端和后端的實現(xiàn)
在實踐教學平臺中,前端和后端的實現(xiàn)是相輔相成的,它們共同構成了整個系統(tǒng)的用戶交互和數(shù)據(jù)處理部分。
前端主要負責與用戶進行交互,展示數(shù)據(jù)和接收用戶輸入。在實踐教學平臺中,前端利用HTML、CSS和JavaScript等技術進行開發(fā)。HTML用于構建頁面的基本結構,CSS用于控制頁面的樣式和布局,JavaScript則用于實現(xiàn)頁面的動態(tài)交互功能。為了提升開發(fā)效率和用戶體驗,使用了前端框架,如React、Vue.js等,這些框架提供了豐富的組件和工具,可以快速構建出功能強大且易于維護的前端應用。在實踐教學平臺中,前端需要實現(xiàn)諸如用戶登錄、課程展示、題目瀏覽、作業(yè)提交、成績查看等功能,為了實現(xiàn)這些功能,前端需要與后端進行通信,獲取所需的數(shù)據(jù),并在頁面上展示給用戶。
后端主要負責處理業(yè)務邏輯、數(shù)據(jù)存儲和與前端的數(shù)據(jù)交互。在實踐教學平臺中,后端使用多種語言和技術進行開發(fā),其主要使用Java語言并結合SpringBoot框架,可以極大地提高開發(fā)效率和系統(tǒng)的穩(wěn)定性。SpringBoot是一個用于簡化Spring應用初始搭建及開發(fā)過程的框架,它提供了很多開箱即用的功能,如自動配置、外部化配置、內嵌的Servlet容器等,可以更加專注于業(yè)務邏輯的實現(xiàn),而不是花費大量時間在配置和部署上。后端需要實現(xiàn)用戶管理、權限控制、題目管理、作業(yè)管理、成績管理等功能,為支持這些功能,后端通過與MySQL結合,設計合理的數(shù)據(jù)庫結構,存儲用戶信息、題目數(shù)據(jù)、代碼數(shù)據(jù)等。同時,后端還需要提供API接口供前端調用,以實現(xiàn)前后端的數(shù)據(jù)交互。在實踐教學平臺中,后端使用RESTfulAPI和GraphQL等技術來實現(xiàn)與前端的數(shù)據(jù)交互。RESTfulAPI提供了清晰的資源和操作方式,適用于簡單的數(shù)據(jù)交互;GraphQL則提供了強大的查詢能力,適用于復雜的數(shù)據(jù)獲取場景。這種結合方式能夠滿足不同業(yè)務場景下的需求。
通過合理的設計和實現(xiàn),前端和后端可以共同構建一個高效、穩(wěn)定和易于擴展的實踐教學平臺,為師生提供優(yōu)質的教學和學習體驗。
4.2服務注冊與發(fā)現(xiàn)的實現(xiàn)
服務注冊與發(fā)現(xiàn)是構建微服務架構中的一個核心概念,它涉及將微服務注冊到中心化的服務注冊表,并允許其他微服務通過查詢該注冊表來發(fā)現(xiàn)和調用需要的服務[5]。
在實踐教學平臺中,使用Nacos來實現(xiàn)服務的注冊與發(fā)現(xiàn)。在每個微服務的配置文件中添加Nacos客戶端的依賴,服務啟動時,將自身注冊到Nacos注冊中心,對于需要調用其他服務的服務,通過查詢Nacos注冊表來獲取目標服務的元數(shù)據(jù),從而實現(xiàn)了微服務間的通信。
4.3負載均衡與網(wǎng)關的實現(xiàn)
在實踐教學平臺設計中,負載均衡和網(wǎng)關的實現(xiàn)是至關重要的。負載均衡的作用是將請求均勻地分發(fā)到多個服務實例,以提高系統(tǒng)的可用性和性能。通過使用負載均衡器Nginx,有效地管理和分發(fā)請求,避免單個服務實例過載。另一方面,網(wǎng)關是實踐教學平臺的入口,負責處理請求的路由和協(xié)議轉換。通過使用SpringCloudGateway網(wǎng)關技術,實現(xiàn)對不同微服務的請求路由和轉發(fā),確保請求以一致的方式被處理。
在實踐教學平臺中,負載均衡和網(wǎng)關通常協(xié)同工作,實現(xiàn)負載均衡和請求流量的統(tǒng)一管理,提高了系統(tǒng)的可伸縮性和可靠性。
4.4部署管理的實現(xiàn)
為了簡化項目部署和提高系統(tǒng)的可擴展性,使用Docker容器化技術部署項目。首先,將項目打包;然后,通過在Dockerfile文件中編寫腳本構建鏡像;最后,使用dockerrun命令創(chuàng)建并啟動容器,容器中包含了應用程序及其所需的庫、工具和依賴項,從而實現(xiàn)應用程序在不同環(huán)境中的一致性運行。由于實踐教學平臺包含多個微服務,使用Docker-Compose工具,通過YAML文件來配置應用程序的服務[6],包括容器、網(wǎng)絡、數(shù)據(jù)卷和環(huán)境變量等,從而實現(xiàn)容器的統(tǒng)一管理和快速部署。
5結語
本文介紹了基于微服務架構的實踐教學平臺的設計與實現(xiàn),充分利用了微服務的優(yōu)勢,通過拆分功能模塊,將整個平臺劃分為多個微服務。針對不同的教學需求和功能特點,獨立地開發(fā)、測試和部署各個服務,構建了靈活、可擴展和易于維護的系統(tǒng),滿足不同用戶的個性化需求,將為教師和學生帶來更好的教學體驗。
參考文獻
[1]張墨涵,王雪英,沈學東.微服務架構技術與挑戰(zhàn)[J].網(wǎng)絡安全技術與應用,2023(2):3-4.
[2]劉坤.基于微服務架構的在線教學平臺的設計與實現(xiàn)[D].西安:西北大學,2023.
[3]盧日鋒.騰訊視頻APP的用戶體驗提升策略研究[D].廣州:廣東財經(jīng)大學,2023.
[4]克里斯·理查森,喻勇譯.微服務架構設計模式[M].喻勇,譯.北京:機械工業(yè)出版社,2019.
[5]吳雄勁.微服務框架中的服務注冊中心的設計與開發(fā)[J].工業(yè)控制計算機,2021,34(8):130-132.
[6]董子奇,劉淇,高原,等.基于容器技術的微服務部署研究[J].信息技術與標準化,2023(Z1):93-98.