SQLense
更新

SQLense 为什么用单容器架构

一个 code-server 容器服务全班,对比一人一容器方案,内存占用降低 90%。这就是 SQLense 的资源效率哲学。

一人一容器的问题

市面上很多编程教学平台采用「一人一容器」的方案:每位学生启动一个独立的 Docker 容器,内含完整的 code-server 进程和开发环境。

这听起来很干净,但实际运行时:

  • 每个 code-server 进程常驻内存约 200-400MB
  • 一个 30 人的班级需要 6-12GB 内存
  • 服务器至少要 8C16G 配置,月费数百元
  • 启动慢,学生等容器拉起要几十秒
  • 教师管理 30 个容器的生命周期,运维复杂

SQLense 的做法:单容器 + 路由隔离

SQLense 只跑一个 code-server 容器,通过 X-Student-Id HTTP header 实现工作区隔离:

浏览器 → auth-proxy (nginx)
           ├─ auth_request → api-server 验证 JWT
           └─ proxy_pass → code-server:8443
               + X-Student-Id: 2024001  ← 注入学号

code-server 内部根据 X-Student-Id 挂载对应的工作区目录(/workspaces/student_2024001),每位学生看到的文件互相隔离,但共享同一个 Node.js 进程。

资源对比

方案 30 人班级内存占用 最低服务器配置 月费估算
一人一容器 6-12 GB 8C16G 200-400 元
SQLense 单容器 0.5-1 GB 2C4G 30-60 元

内存占用降低约 90%,起步成本降低约 80%

不是牺牲隔离性换来的

单容器并不意味着不隔离:

  • 文件隔离:每位学生的工作区是独立的目录,通过 code-server 的 workspace 机制隔离
  • 数据库隔离:每位学生拥有独立的 PostgreSQL 数据库(db_student_N)和角色(role_student_N),权限锁死在自己的库
  • 认证隔离:auth-proxy 对每个请求做 JWT 验证,X-Student-Id 注入由服务端完成,学生无法伪造

适合谁

这套架构特别适合资源敏感型场景:

  • 高校数据库课程:机房服务器预算有限,一台 2C4G 机器服务一个班
  • 编程训练营:开班快、结课快,不想在基础设施上花太多钱
  • 自主创业开办编程班:初期学员少,低成本起步,按需扩容

可扩展到其他学科

SQLense 的「单容器 + 路由隔离」架构不限于 SQL 教学。核心引擎与学科解耦,理论上任何能在 VS Code 中完成的教学场景都可以套用:

  • Pythonense:预装 Python 扩展 + Jupyter,单容器服务全班
  • AlgLense:算法可视化 + 在线判题,同样的隔离机制
  • WebLense:前端开发教学,Live Server 扩展 + 浏览器预览

这就是我们称之为 Lense 架构的原因——它是一个可复用的教学平台框架,SQLense 只是第一个实例。