山西大学算法队 OJ 系统
2025/5/19大约 3 分钟
山西大学算法队 OJ 系统
项目概述
山西大学算法队 OJ 系统是一个基于微服务架构的自动化判题平台,旨在为算法训练提供高效、稳定的题目管理、竞赛支持和判题服务。系统通过自主设计的架构和核心技术,实现了判题自动化、服务高可用性以及性能优化,显著提升了开发效率和用户体验。
技术架构
1. 整体架构
- 微服务架构:采用 Spring Cloud 技术栈,通过 Nacos 实现服务注册与发现,Feign + LoadBalancer 完成服务间通信。
- 分布式治理:基于 JWT + Spring Cloud Gateway 解决分布式鉴权与跨域问题,布隆过滤器实现 Token 黑名单机制。
- 容器化部署:前后端系统均通过 Docker 容器化部署,提升部署灵活性和可迁移性。
2. 核心模块
模块 | 技术实现 | 功能说明 |
---|---|---|
判题服务 | Judge0 + Redisson 分布式锁 | 支持多测试点并行判题,通过线程池 + CountDownLatch 优化判题效率,降低 70% 判题时间。 |
缓存优化 | Redis + Caffeine 多级缓存 | 缓存热点查询数据,提升 94% 的查询接口性能。 |
异步处理 | RabbitMQ 消息队列 | 异步处理邮件通知、判题结果同步,系统吞吐量提升 50%。 |
文件存储 | 华为云 OBS | 存储用户提交代码、题目资源及日志文件,确保数据持久化和高可用性。 |
前端系统 | Vue3 + Element Plus | 实现用户交互界面,支持题目浏览、竞赛管理和判题结果可视化。 |
关键技术
分布式判题优化
- 多线程并行判题:利用线程池 + CountDownLatch 并发处理多个测试点,减少判题等待时间。
- 水平扩展支持:通过 Redisson 分布式锁控制用户提交频率,实现判题节点的水平扩展。
高性能缓存设计
- 多级缓存架构:Redis 作为分布式缓存层,Caffeine 作为本地缓存层,降低数据库压力。
- 热点数据预热:针对高频查询的题目和用户数据,通过定时任务预热缓存。
安全与权限控制
- JWT 鉴权:基于 Spring Security + JWT 实现用户身份认证和权限校验。
- 布隆过滤器:拦截非法 Token 请求,防止恶意攻击。
服务治理
- 动态配置管理:通过 Nacos 配置中心实现服务配置的动态更新。
- 限流与熔断:集成 Hystrix 实现服务降级和流量控制,保障系统稳定性。
项目总结
山西大学算法队 OJ 系统不仅验证了微服务架构在复杂业务场景下的可行性,还体现了以下技术价值:
- 架构设计能力:从零设计系统架构、数据库表结构和索引优化方案,覆盖开发全流程。
- 性能优化实践:通过多线程、缓存、异步处理等技术手段,解决高并发场景下的性能瓶颈。
- 工程化落地:结合 Git、Maven、Docker 等工具,实现项目的标准化开发、测试与部署。
该项目充分展示了对 Spring Cloud、分布式系统设计、前后端开发及性能调优的深入理解,为后续复杂系统的开发奠定了坚实基础。
技术栈Java
| Spring Cloud
| Redis
| RabbitMQ
| Docker
| Vue3
| Element Plus
| Nacos
| JWT
| 华为云 OBS