Skip to content

软件概要设计说明书 ​

1. 文档信息 ​

  • 文档名称:AUBB(Academic Unified Builder Bench)软件概要设计说明书
  • 版本:v1.4
  • 状态:设计基线
  • 更新日期:2026-06-12
  • 编写依据摘要:课程大作业要求、AUBB V1 需求基线、当前系统架构事实
  • 独立性说明:本文直接说明架构边界、模块关系和运行视图,不要求评审人员另读接口或数据库文档才能理解设计结论

2. 设计目标与约束 ​

2.1 设计目标 ​

  1. 支撑“平台初始化 -> 建课建班 -> 发布作业或实验 -> 学员在线完成 -> 自动评测或教师评阅 -> 成绩发布 -> 学员查看反馈”的教学闭环。
  2. 在课程项目复杂度可控的前提下,明确 Web 前端、后端业务服务、评测执行、对象存储、消息队列和实验运行时之间的职责边界。
  3. 以稳定 API、角色权限、数据留痕和可复验部署为核心,保证演示、答辩和后续维护的一致性。

2.2 关键约束 ​

  • 系统主入口为现代 Web 浏览器,不建设原生客户端。
  • 编程作业必须支持浏览器内在线 IDE 编辑、保存、试运行和整份作业提交。
  • 在线 IDE 不提供通用终端;环境型实验通过独立 Web 终端能力承载。
  • 代码试运行、正式评测和终端实验运行时必须与业务主服务隔离。
  • 首版采用模块化单体后端,评测任务通过消息队列解耦;不引入分布式事务。
  • go-judge 与 Kubernetes 实验运行时以 Linux 环境为主要部署前提。

3. 系统上下文 ​

3.1 外部实体 ​

外部实体作用与本系统交互内容
浏览器用户操作入口页面访问、表单提交、在线 IDE、Web 终端、通知查看
go-judge编程题试运行与正式评测源码快照、运行参数、资源限制、执行结果
Kubernetes 实验运行时环境型实验会话实验 Pod、WebSocket 终端、会话停止与重置
S3 兼容对象存储文件与报告保存课程资源、提交附件、评测报告、实验附件
统一认证服务可选身份源用户身份信息、单点登录状态

3.2 系统上下文图 ​

mermaid
flowchart TB
  User["管理员 / 教师 / 助教 / 学员"] --> Browser["Web 浏览器"]
  Browser --> Web["AUBB Web<br/>Next.js / React"]
  Web --> Api["AUBB Server<br/>Spring Boot API"]
  Api --> DB[(PostgreSQL)]
  Api --> MinIO[(MinIO / S3)]
  Api --> Redis[(Redis 可选增强)]
  Api --> Rabbit[(RabbitMQ)]
  Rabbit --> Worker["Judge Consumer"]
  Worker --> Judge["go-judge"]
  Api --> K8s["Kubernetes Lab Runtime"]
  Browser -. WebSocket .-> Api
  Api -. OIDC 可选 .-> IdP["统一认证服务"]

4. 总体技术选型 ​

层次技术 / 产品选型说明
Web 前端Next.js 16、React 19、TypeScript、Tailwind CSS 4支撑角色化后台、复杂表单和页面级路由组织
在线 IDEMonaco Editor、标准输入输出面板满足编程题编辑、保存、试运行和结果查看,不承载通用终端
Web 终端xterm.js、WebSocket仅用于环境型实验会话连接
后端 APISpring Boot 4、Java 25、Spring Security支撑事务型后台、权限治理、审计和稳定 REST API
数据访问MyBatis-Plus、Flyway保持数据访问可控,数据库变更可版本化
数据层PostgreSQL承担课程、作业、提交、评测、成绩、实验、通知和审计事实数据
异步队列RabbitMQ解耦提交受理和评测执行,支持重试、DLQ 和独立消费
缓存 / 限流Redis 可选增强提供短 TTL 缓存、未读数缓存和限流增强;不可用时应降级
对象存储MinIO / S3 兼容服务保存大文件、源码快照、评测报告和导出文件
评测沙箱criyle/go-judge提供隔离编译、运行、资源限制和结果回传
实验运行时Fake Runtime / Kubernetes RuntimeFake 用于本地演示,Kubernetes 用于真实 Web 终端实验
运维观测Actuator、Prometheus、结构化日志支撑健康检查、指标采集和问题追踪

5. 架构风格与分层 ​

系统采用“前后端分离 + 模块化单体 + 外部执行运行时”的架构。后端以稳定 REST API 为主,对外隐藏内部模块组织;评测、对象存储、Web 终端和通知推送通过明确的适配边界接入。

mermaid
flowchart LR
  subgraph Client["表现层"]
    WebPage["角色全局导航"]
    ContextNav["课程 / 教学班上下文导航"]
    IDE["在线 IDE"]
    Terminal["实验 Web 终端"]
  end
  subgraph ApiLayer["接口层"]
    REST["REST API"]
    WS["WebSocket Endpoint"]
    Error["统一错误模型"]
  end
  subgraph Domain["应用与领域层"]
    Governance["平台治理"]
    Course["课程与成员"]
    Assignment["作业与题库"]
    Submission["提交与工作区"]
    JudgeDomain["评测"]
    Grading["批改与成绩"]
    Lab["实验"]
    Notification["通知与审计"]
  end
  subgraph Infra["基础设施层"]
    DB[(PostgreSQL)]
    Storage[(S3)]
    MQ[(RabbitMQ)]
    Cache[(Redis)]
    Sandbox["go-judge"]
    Runtime["Kubernetes"]
  end
  WebPage --> ContextNav
  Client --> ApiLayer
  ApiLayer --> Domain
  Domain --> Infra

6. 逻辑模块划分 ​

模块核心职责主要用户
平台治理与 IAM平台配置、组织、用户、作用域身份、权限解释、审计管理员
课程与成员学期、课程目录、开课、教学班、成员、公告、资源、讨论管理员、教师、助教、学员
作业与题库作业基础信息、结构化试卷、题库、编程题环境配置教师、助教
提交与工作区编程题工作区、附件、整份作业提交、提交详情学员、教师
评测样例运行、正式评测、go-judge 适配、评测报告、重排队学员、教师、系统
批改与成绩人工评分、批量调整、成绩发布、成绩册、导入导出教师、助教、学员
实验报告型实验、环境型实验、附件、评阅、Web 终端会话教师、助教、学员
通知与观测站内通知、SSE 增量、未读数、健康检查、指标全角色、运维

7. 核心业务流程 ​

7.1 教学主链路 ​

mermaid
stateDiagram-v2
  [*] --> PlatformReady: 平台初始化
  PlatformReady --> CourseReady: 建课 / 建班 / 加成员
  CourseReady --> AssignmentPublished: 发布作业或实验
  AssignmentPublished --> StudentWork: 学员完成作业或实验
  StudentWork --> AutoJudge: 编程题评测
  StudentWork --> ManualReview: 报告或主观题评阅
  AutoJudge --> ManualReview: 教师查看结果
  ManualReview --> GradePublished: 发布成绩或评语
  GradePublished --> [*]: 学员查看反馈

7.2 编程题评测时序 ​

mermaid
sequenceDiagram
  actor Student as 学员
  participant Web as Web 前端
  participant API as 后端 API
  participant MQ as RabbitMQ
  participant Worker as 评测 Consumer
  participant GJ as go-judge
  participant Store as 对象存储

  Student->>Web: 保存编程题并提交整份作业
  Web->>API: 创建正式提交
  API->>API: 固化提交与源码快照
  API->>MQ: 发布评测任务
  MQ->>Worker: 投递评测任务
  Worker->>GJ: 编译 / 运行测试点
  GJ-->>Worker: 返回执行结果
  Worker->>Store: 保存报告和源码快照
  Worker->>API: 回写评测状态与摘要
  Web->>API: 查询提交详情和报告

7.3 环境型实验时序 ​

mermaid
sequenceDiagram
  actor Student as 学员
  participant Web as Web 前端
  participant API as 后端 API
  participant Runtime as 实验运行时

  Student->>Web: 打开 TERMINAL 实验
  Web->>API: 启动或查询实验会话
  API->>Runtime: 创建或复用隔离环境
  Runtime-->>API: 返回会话状态
  Web->>API: 申请短期连接 token
  Web-->>API: WebSocket 连接终端
  API-->>Runtime: 绑定终端流
  Student->>Web: 停止或重置会话
  Web->>API: 停止 / 重置环境

8. 数据设计总览 ​

数据域代表对象设计原则
平台治理平台配置、组织、用户、身份、审计组织层级和治理身份独立于课程成员角色
课程域课程目录、开课、教学班、成员、公告、资源、讨论以开课和教学班作为教学作用域边界
作业域作业、试卷、题库题目、编程配置草稿、发布和关闭状态清晰分离
提交域工作区、修订、附件、正式提交、分题答案工作区可变,正式提交不可变
评测域样例运行、评测任务、评测报告试运行不影响成绩,正式评测可追踪到提交
成绩域人工分、调整记录、成绩发布状态、成绩册发布前后可见性不同,修改必须可追踪
实验域实验定义、报告、附件、环境模板、会话报告型实验与终端实验共享实验定义但运行时分离
通知域通知、收件状态、未读数站内通知持久化,SSE 只做增量增强

9. 接口设计总览 ​

对外接口以 /api/v1/** 为业务基线,运行时 OpenAPI /v3/api-docs 是接口事实来源。概要设计只划分接口域,不展开每个路径字段。

接口域说明
认证与当前用户登录、刷新、退出、当前用户、会话撤销
平台治理平台配置、组织树、用户治理、权限解释、审计日志
课程教学学期、课程目录、开课、教学班、成员、公告、资源、讨论
作业题库作业、试卷、题库题目、发布和关闭
提交评测工作区、附件、正式提交、样例运行、评测报告、重排队
批改成绩人工评分、批量调整、成绩发布、成绩册、导入导出
实验实验定义、实验报告、附件、环境会话、终端连接 token
通知通知列表、未读数、SSE 增量、已读状态

10. 部署视图 ​

mermaid
flowchart TB
  Browser["Browser"] --> Front["Web 服务 :3000 / 静态站点"]
  Front --> Api["Server API :18080"]
  Api --> DB[(PostgreSQL)]
  Api --> MQ[(RabbitMQ)]
  Api --> MinIO[(MinIO)]
  Api --> Redis[(Redis)]
  MQ --> Worker["Judge Worker<br/>同镜像独立消费进程"]
  Worker --> Judge["go-judge"]
  Api --> LabRuntime["Fake / Kubernetes Lab Runtime"]

部署层面保留两类模式:

模式说明
本地开发 / 演示使用 just dev-up 启动依赖、后端 18080 和前端 3000
容器化交付使用容器编排管理 PostgreSQL、RabbitMQ、MinIO、Redis、go-judge、API 进程和 Judge Worker 进程;API 与 Worker 同代码基线但运行职责不同

11. 安全、可靠性与可观测性设计 ​

关注点概要设计
认证JWT access token + opaque refresh token,会话可撤销
授权Spring Security 粗拦截,应用服务按组织、课程、教学班和资源状态二次校验
执行隔离浏览器不直接访问 go-judge 或实验运行时,运行资源受控
文件安全上传大小和类型受限,下载前校验所有权或课程作用域
可靠性提交先固化事实数据,再发布评测任务;RabbitMQ 支持重试与 DLQ
降级Redis、SSE 或评测服务异常时,核心课程浏览、提交记录和历史结果查询不应失效
可观测性Actuator 暴露 health/info/prometheus,日志和审计使用 requestId 串联

12. 设计取舍 ​

设计点选择原因
前端框架Next.js + React更适合角色化路由、服务端/客户端组合渲染和工程化交付
后端框架Spring Boot 4 + Java 25更适合事务型后台、权限治理、批处理和审计类系统
后端形态模块化单体满足课程项目交付复杂度,避免过早拆分微服务
评测异步RabbitMQ + Consumer评测任务天然耗时,需要与提交受理解耦并具备重试能力
在线 IDEMonaco + 自定义工作区满足作业编辑、运行、保存和提交,轻于完整远程 IDE
Web 终端独立实验运行时避免把通用终端混入在线 IDE,保持作业和实验边界清晰
通知实时性持久化站内通知 + SSE 增量先保证通知可查,再提供实时增强

13. 追踪关系 ​

设计元素对应 SRS
平台治理与 IAMFR-CFG-、FR-IAM-、FR-OPS-*
课程、成员和课程内容FR-CRS-、FR-NTF-
作业、在线 IDE 与提交FR-TSK-、FR-SUB-
自动评测与评测报告FR-JDG-*
批改、成绩发布和成绩册FR-REV-*
实验报告与环境型实验FR-TSK-、FR-SUB-、NFR-EXT-*
安全、可靠性与可观测性NFR-SEC-、NFR-REL-、NFR-OBS-*