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 构建