一个生产系统,
公开展示其构建与运行。
这是 Nathaniel Jay Adams 为自己的教学亲自设计、构建并运营的系统。它不是大学部署,也不作为大学部署对外提供——而是上文所述数据架构、集成规范与运营标准的一个实际运行示例。
观看系统架构短片
动画图示由 WorldWise Learning 根据系统自身的数据结构和调度配置制作。主持人 Minh 是使用 Google Vids 制作的 AI 虚拟形象,配有 AI 语音。片中不展示任何真实记录、学生数据或指标。 数据中心背景为 AI 生成的图片。
系统如何逐步构建
-
问题
同时在多个项目中授课,每周都会产生同样的负担:记录分散在各类文档中,进度靠手工追踪,也没有任何地方能完整查看一个学期的证据。
-
系统架构
一个服务端渲染的应用,托管在云平台上,底层为关系型数据库,从源代码管理持续部署,且只有通过身份验证才能访问。架构本身即与供应商无关:真正的资产是数据模型,而不是服务提供商。
- 应用
- Next.js 16 · React · TypeScript
- 数据
- PostgreSQL(通过 Prisma)· 经 Zod 校验的边界
- 运行时依赖
- 12个,刻意精简
- 访问方式
- 需身份验证;无公开访问入口
-
构建了什么
一个由十张数据表构成的领域模型,覆盖整个教学运营而非单一功能,并在其上设有用于每周规划的指挥中心。
- 学生 · 教师 · 课次 · 资料
- 评估 · 付款
- 源文档 · 审核队列
- 集成健康状态 · 定时运行历史
-
数据集成与人工智能准备度
两项定时任务每天运行:日历事件被核对整合为课次记录,教学记录被镜像同步到 Notion。另有一个独立的本地源文件流程,按内容哈希追踪文件,因此文件的变更、重复和消失都能被检测出来,而不是凭推测判断。
该系统不调用语言模型,这是有意为之。源文档追踪和人工审核队列,恰恰是基于检索的助手所需要的依据与监督基础。数据规范先行;只有在证据支持时,才会在之后加入模型。
-
实际运行
它按计划在无人值守的情况下运行,是实际投入使用的基础设施,而非演示。调度器只保证小时级精度,也不会重试失败的调用,因此设计同时接受这两点:两项任务的启动时间窗口相隔一小时(并非以完成为前提的依赖关系),每次运行都会被持久记录,错过的运行会被明确呈现,而不是想当然地视为已完成。定时请求均经过身份验证,一旦缺少密钥即以“失败即关闭”的方式拒绝执行。凭据过期、主机权限和第三方 API 变更引发的故障,均已在生产环境中诊断并修复——这正是原型中永远不会出现的部分。
-
证据
图示均由系统自身的数据结构和调度配置生成。
实践中的架构
其中不含任何学生、教职人员或院校数据。01 / 架构 两个层面,
一个系统。教学是实际发生的过程,
运营层面保存证据。教学核心学生学习者教师教育工作者课次学习体验评估学习进展资料教学资源付款学费账单运营层面SourceDocument 源文件ReviewItem 审核队列IntegrationHealth 连接器健康状态CronRun 运行历史查看架构证据
六个教学模型,四个运营模型。课次(Lesson)隶属于一名学生(Student)和一名教师(Instructor);资料(Material)为可选项。评估(Assessment)隶属于学生,并可关联课次。付款(Payment)隶属于学生,而非课次。
ReviewItem 可关联 SourceDocument。IntegrationHealth 和 CronRun 是相互独立的数据表。两个层面是概念上的分组,而非数据库关系。
02 / 自动化 两项每日任务,
刻意安排的先后顺序。先导入日历,
再将教学记录镜像同步出去。11:00 UTC日历 → 课次- 日历
- 核对整合
- 课次
间隔1小时12:00 UTC教学记录 → Notion- 数据库
- 同步
- Notion
每次经授权的任务调用
都会创建一条 CronRun 记录。查看调度证据
0 11 * * *→/api/cron/daily-sync0 12 * * *→/api/cron/notion-sync两项任务的启动时间窗口相隔一小时;完成顺序并不固定。中午的任务会将学生、教师、课次、付款和评估记录镜像同步到 Notion。
源文件哈希与审核是一个独立的本地流程,不属于中午运行的云端任务。请求必须携带 cron 密钥;未经授权的请求会在创建运行记录之前被拒绝。
03 / 可观测性 任何故障
都不会悄无声息。查看运行了什么、哪些成功,
以及哪些需要处理。- 运行任务开始
- 已记录历史已保存
- 健康状态已更新连接器状态
- 故障已显现需处理事项清晰可见
运行历史任务 · 时间 · 结果 · 错误CronRun连接器健康状态健康状态 · 最近同步 · 最近错误连接器可以访问,并不能证明定时任务已成功运行。两种信号都很重要。
查看可观测性证据
CronRun
job · startedAt · finishedAt · ok · error · triggerIntegrationHealth
healthy · lastSyncAt · lastError状态为推导得出,而非存储的健康字段:ok、failed、missed、blocked、none。“missed”表示最近一次成功运行已过时,并非实测计数。连接器健康状态由 Notion 集成单独持久化保存,与运行是否完成相互独立。
此处展示的是记录机制的设计,并非实时监控,也不保证能防范所有基础设施故障。图中未展示任何示例记录或虚构指标。
架构图源自系统源代码与配置,不含实时记录。理解系统,查验证据。
-
可迁移性
这一模式可原样迁移到院校工作中:明确定义的数据模型、定时运行的核对整合流程、在人工审核下有据可依的辅助,以及经得起真实故障考验的可观测性。对大学而言,变化的是治理、规模以及审核环节所处的位置——而不是架构本身。