在线判题系统

我要开发同款
proginn21123766912024年07月01日
13阅读
开发技术mysqlgo语言redis、dubbo
所属分类生活服务
授权协议MIT许可

作品详情

项目介绍:一个编程题目评测系统。能够根据管理员预设的题目用例对用户提交的代码进行执行和评测。技术栈:Golang、Beego、MySQL、Redis、Dubbo-go、Nacos、Docker、Vue3、Arco Design项目亮点:1. 设计系统架构:该项目由前端 + 后端组成,在后端系统中,根据功能职责,将系统划分为三个关键模块:1. ① 核心业务后端 ② 校验结果的判题服务 ③ 负责编译执行代码的可复用代码沙箱2. 各模块相互独立,通过 Dubbo-go + Nacos RPC远程调用 技术实现高效协作。2. 设计代码沙箱的技术实现方案(确保安全性和执行效率的平衡):1. 为宿主机安全稳定,选用 Docker容器 隔离执行用户代码,使用 Docker Engine Go SDK 做操作管理,通过 HostConfig 对容器做内存、CPU和网络限制。并用 goroutine + select 控制代码执行超时。2. 与使用 Golang 原生 os/exec 相比,Docker容器虽然有更高的安全性,但是执行时间较长,而编译过程相对安全,因此编译使用原生 exec 方式,以缩短代码沙箱流程耗时。3. 使用 模版方法模式 定义标准的代码沙箱流程,确保未来扩展其他编程语言的代码沙箱时可以保持一致性,包括代码保存、编译、执行、获取输出和清理。同时也提高了可读性和维护性 。4. 异步执行判题,后端采用 事务 确保将用户提交信息写入数据库并更新提交数,同时将 ID 写入 Redis消息队列。判题服务启用 goroutine 读取 Redis队列 做判题消费后,通过 RPC 与后端通信更新判题结果。5. 使用 Option模式 封装可配置的 通用HTTP请求工具,包括Method、URL和可选选项,提高代码扩展性。6. 设计 全局异常处理器,通过 recover 捕获所有异常,使用 errors.As 识别特定异常进行处理,最后统一规范错误响应,以提高应用程序的可靠性和稳定性。
查看全文
声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!
下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态

评论