斯恩 · 编程教育数字化

斯恩 OJ 平台 · 网站架构评估报告

对标 AIOJ(aioj.net),评估底层架构、候选方案与斯恩落地路径

编写 头大老莫 · 斯恩赋能 日期 2026-07-08 阶段 架构评估(P0) 对标 AIOJ / DMOJ / Hydro / Judge0

0一句话结论(P0 建议)

✅ 推荐架构:Judge0 判题引擎(Docker 隔离) + 自研 NestJS/React 业务层,与 CP 系统共享账号与学生/班级数据

斯恩 OJ 不应直接 Fork AIOJ(其开源基座是 Python/Django 的 DMOJ,与斯恩 Node.js 技术栈不匹配、维护成本高、且偏竞赛刷榜、教育管理弱)。
最佳路径是:判题用成熟的 Judge0 CE(支持 90+ 语言、Docker 沙箱、安全隔离)业务层用与 CP v10 完全一致的 NestJS + React18 + AntD,直接复用 CP 的账号/学生/班级数据。
差异化打在三点:① 与 CP 排课/学情打通(作业→判题→成绩回写看板);② AI 助教(代码纠错/思路讲解/学习路径,对标 AIOJ 的 AI 三件套);③ 覆盖斯恩全链路(Scratch→Python→C++ 信奥)。分 3 期落地,P0 先跑通"题库+判题+登录"。

1AIOJ 架构拆解:它到底是怎么搭的

AIOJ 有"商业产品"和"开源基座"两层,必须分开看。

1.1 商业产品(aioj.net)—— 我们直接看到的那层

定位

「AI 型青少年算法编程练习平台,从编程到算法进阶」。清华 AI 博士 + 信息学专家团队,面向青少年课后练习

AI 三件套

AI 纠错AI 导师精准评测
这是它相对传统 OJ 的核心溢价点。

题库形态

洛谷/OpenJudge 风格入门题(如 T1013 温度转换、T1014 与圆相关计算),按 C++ 编程基础标签分类,展示尝试数/AC 率/热度。

1.2 开源基座(github.com/aioj-org/online-judge)—— 它真正跑的那层

实测该仓库是 DMOJ: Modern Online Judge(dmoj.ca,加拿大国家奥赛在用)的 fork。技术栈如下:
技术说明
Web 后端Django (Python)界面 + API + OAuth 登录 + 2FA + 细粒度权限
异步任务CeleryPDF 生成、MOSS 查重、批量任务
判题机DMOJ judge-server独立进程,经 dmoj_bridge_async 异步桥接;60+ 语言运行时;支持交互题/签名评分/自定义校验器;沙箱隔离
前端Node.js 生态 + 模板 + 静态资源Webpack 构建,ACE 编辑器,Markdown+LaTeX 题面
数据库PostgreSQL / MySQL题目、提交、用户、竞赛数据
实时层WebSocket提交状态实时推送
竞赛系统DMOJ 内核ICPC / IOI / AtCoder 风格、虚拟参赛、隐藏榜、Elo-MMR 评分

1.3 对 AIOJ 的客观评估(强项 / 弱项)

✅ 强项

  • 判题基座成熟(DMOJ 经国家奥赛验证,60+ 语言、安全沙箱)
  • AI 加持差异化清晰(纠错/导师/评测)
  • 青少年题库按知识点标签组织,入门友好
  • 竞赛系统完备(虚拟赛、评分、榜单)

⚠️ 对斯恩而言的弱项

  • Python/Django 栈,与斯恩 Node.js/CP 体系不兼容 → 团队维护成本高
  • 偏"竞赛刷榜",教育管理(班级/作业/学情)是短板
  • 本土化(CSP-J/S 题型、洛谷风格交互)需补
  • 与斯恩现有学生/排课数据无法天然打通
  • DMOJ 开源协议(BSD)虽宽松,但二次开发仍绑定 Python 生态

2候选架构方案对比(4 选 1)

基于斯恩现状(Node.js 团队、CP 已上线、阿里云服务器、信奥+编程全链路)筛选 4 个可行方案。

评估维度 A. Fork AIOJ(DMOJ)
Python 栈
B. Hydro OJ 二开
Node.js 原生
C. 自研 NestJS+Judge0
★推荐
D. 完全自建判题机
NestJS+自研沙箱
与斯恩 Node.js 栈契合❌ 低✅ 高✅ 高✅ 高
判题成熟度 / 安全✅ 高✅ 高✅ 高(Judge0)⚠️ 自建风险
教育管理(班级/作业/学情)⚠️ 弱✅ 强✅ 可自建⚠️ 全自研
AI 扩展能力⚠️ 中等⚠️ 中等✅ 易接 LLM✅ 易接 LLM
与 CP 集成成本❌ 高(跨语言)⚠️ 中✅ 低(同栈)✅ 低
开源协议风险✅ BSD❌ AGPL-3.0✅ MIT/Apache✅ 自研可控
运维成本⚠️ 中高⚠️ 中✅ 中(复用云)❌ 高
信奥题型(C++/交互/SpecialJ)✅ 全✅ 全⚠️ CE 版部分受限✅ 全
关于 AGPL:Hydro OJ 是 AGPL-3.0,若对源码修改并作为网络服务向公众提供,需开源衍生代码——对商业培训平台有合规约束,故不首选。
关于 Judge0 CE:社区版(CE)基于 MIT/Apache,支持 90+ 语言、Docker 沙箱。交互题/Special Judge 深度需求可在 P2 阶段自研判题 worker 补充(演进到 D 的局部能力)。

3斯恩 OJ 的定位与差异化

服务对象

斯恩编程学员全链路:图形化(Scratch) → Python → C++ 信奥(CSP-J/S/NOIP/NOI),以及考级模拟。

核心场景

课后练习作业布置信奥集训考级模拟校内赛/月考

三大差异化

  • ① 与 CP 学生/班级/排课数据打通
  • AI 助教(纠错/讲解/路径)
  • ③ 学情看板反哺教学决策
斯恩 OJ 不是"又一个刷榜竞赛站",而是嵌在 CP 教学闭环里的练习+评测+学情引擎。这是相对 AIOJ(纯练习平台)和洛谷(纯竞赛社区)最大的不同。

4P0 推荐架构:自研 NestJS + Judge0

4.1 总体架构图

① 用户层 学员 Web / 老师 Web 后台 / 家长 H5(手机端) ② 接入层(复用阿里云 120.24.68.68 + 宝塔) Nginx 反向代理 · 统一鉴权(复用 CP 的 JWT/账号体系)· oj.580678.cn ③ 应用层 · OJ Gateway(NestJS,与 CP v10 同栈) 题库服务 提交/判题服务 作业/班级服务 学情看板服务 AI 助教服务(代码纠错 / 思路讲解 / 学习路径推荐,接 LLM) ④ 判题层 · Judge0 CE Docker 容器集群 · 90+ 语言 · 沙箱隔离 · 资源限额 ⑤ 数据层 MySQL(共享CP库) · Redis · OSS ⑥ 数据中枢 · CP 系统(已上线) 学生/班级/课程/排课/合同 → OJ 作业与成绩双向同步,家长端可见练习量与成绩

4.2 模块拆分(业务层 NestJS)

模块职责优先级
题库服务题目 CRUD、标签/难度、题面(Markdown+LaTeX)、测试用例管理、题解P0
提交/判题服务接收代码 → 调用 Judge0 → 状态(AC/WA/TLE/MLE/CE) → 存结果P0
账号/鉴权复用 CP JWT,学员/老师/家长三角色;OAuth 可选P0
作业/班级服务老师布置作业、截止时间、班级维度统计,与 CP 排课联动P1
学情看板个人/班级正确率、知识点掌握热力、趋势,回写 CP 看板P1
AI 助教服务代码错误诊断、讲解、相似题推荐、个性化路径(接 LLM)P2
竞赛/月考校内赛、限时赛、榜单(对标 AIOJ 竞赛能力)P2

4.3 为什么不直接 Fork AIOJ(DMOJ)

4.4 与 CP 系统的对接关系

数据复用(低成本)

  • 学员用 CP 账号直接登录 OJ(复用 JWT/用户表)
  • 班级/课程/排课读 CP 表,避免重复录入
  • 题库、提交、成绩存 OJ 库,成绩反写 CP 学情看板

教学闭环

  • 老师在 CP 排课 → OJ 布置对应练习/作业
  • 学员提交 → Judge0 判题 → 结果实时回 CP
  • 家长在 CP 家长端看练习量、正确率、薄弱点

5部署架构(复用既有资源)

组件部署方式说明
OJ 前端静态构建 + Nginx(宝塔)React18 + Vite5 产物,挂 oj.580678.cn
OJ GatewayNestJS 进程(PM2,端口如 3002)与 CP(3001) 同机共存,零停机
Judge0 CEDocker 容器(api + workers)独立网络 + 资源限额,防沙箱逃逸
MySQL复用 CP 实例(独立库 oj_*)或独立实例,按容量定
Redis复用 CP Redis提交队列、缓存、WebSocket 状态
OSS阿里云 OSS / 服务器磁盘题面附件、代码快照、AI 讲解缓存
安全红线:判题容器必须做 CPU/内存/时间/网络/文件系统 五重限额,且禁止与业务库同网络直通。Judge0 默认沙箱已覆盖大部分,上线前需做逃逸压测。

6落地里程碑(3 期)

周期交付内容验收标准
P0 · MVP4–6 周Judge0 判题打通 · 题库导入(C++ 入门 100 题)· CP 账号登录 · 提交/判题/结果页能提交 C++ 代码并正确返回 AC/WA/TLE;学员用 CP 账号可登录
P1 · 教学闭环6–10 周作业/班级服务 · 老师后台 · 学情看板 · 与 CP 排课联动老师可布置作业、班级统计可见、成绩回写 CP 看板
P2 · 智能 + 竞赛10–16 周AI 助教(纠错/讲解/路径)· 信奥集训模块 · 校内赛/月考 · 家长端提交后 AI 给出错误讲解;可办一场限时校内赛

7风险清单 & 待确认事项

⚠️ 主要风险

  • 判题安全:沙箱逃逸 → Judge0 Docker 隔离 + 五重限额 + 逃逸压测
  • C++ 多版本:信奥需 G++ 特定版本 → 镜像版本管理
  • 题库版权:洛谷/OpenJudge 题不可直接搬运 → 自命题 + 合规授权
  • AI 成本:LLM 调用按量 → 接腾讯云混元/WorkBuddy,设频次上限

✅ 需老板确认(【待确认】)

  • OJ 独立子域 oj.580678.cn 还是嵌入 CP 后台?
  • 题库来源:自研 vs 授权采购(决定 P0 周期)
  • AI 助教用哪家 LLM(腾讯云混元 / 其他)?
  • 是否需要移动端 H5(学员/家长刷题)?
  • P0 是否先只支持 C++(信奥主线),再扩 Python/图形化?
斯恩 OJ 平台 · 架构评估报告 v1.0 · 头大老莫 · 斯恩赋能 · 2026-07-08
下一步:老板确认「待确认事项」后,进入 P0 详细技术方案 + 环境搭建