Skip to content

Glowxq-OJ 系统架构

系统架构

┌─────────────┐
│   浏览器     │
└──────┬──────┘

┌──────▼──────┐
│  前端服务    │  Vue 3 + Nginx
└──────┬──────┘

┌──────▼──────┐
│  后端API     │  Spring Boot 3.x + Java 21
├─────────────┤
│  判题服务    │  Go + Docker
└──────┬──────┘

┌──────▼──────┐
│  数据存储    │  MySQL + Redis
└─────────────┘

技术架构

后端架构

  • 框架:Spring Boot 3.x
  • ORM:MyBatis-Flex
  • 认证:Sa-Token
  • 缓存:Redis
  • 数据库:MySQL 8.0

前端架构

  • 框架:Vue 3 + TypeScript
  • UI组件:Element Plus
  • 代码编辑器:Monaco Editor
  • 构建工具:Vite

判题架构

  • 语言:Go
  • 隔离:Docker 容器
  • 消息队列:RabbitMQ(可选)

核心模块

业务模块

  • 题目管理:题目CRUD、分类标签、难度管理
  • 用户系统:注册登录、权限管理、个人主页
  • 提交系统:代码提交、判题队列、结果反馈
  • 竞赛系统:竞赛创建、实时排名、赛制支持
  • 统计系统:提交统计、通过率分析、排行榜

判题流程

用户提交代码

保存提交记录(状态:PENDING)

发送到消息队列

判题服务消费消息

创建Docker容器

编译代码 → 运行测试用例

收集结果(时间、内存、状态)

更新提交状态

返回结果给用户

安全机制

  • Docker沙箱:代码在隔离容器中执行
  • 资源限制:CPU、内存、时间限制
  • 权限控制:基于角色的访问控制(RBAC)
  • 输入验证:防止SQL注入、XSS攻击

💡 提示

更多详细的架构设计、技术选型、性能优化请访问 GitHub 项目地址 查看。

基于 VitePress 构建