
如何架构一套在线教育系统从需求到「先做到 → 再优化 → 最后成型」架构不是第一天画出最终蓝图再一次性盖楼。真实过程更接近先做到主闭环能跑→再优化钱、权、通知、进度做对→最后成型针对这套需求收成最优解。产品先交清六个终端的能力技术不要一上来按端拆微服务也不要一上来上排课引擎和考务中台。本文按「需求输入 → 三阶段成型」写例子来自一套成人培训履约平台的定稿。一、输入产品交来的六端需求与能力形态约定学员端先做微信小程序销售 / 教研 / 教务 / 运营 / 中台为Web。全站逻辑删除C 端用户与 B 端员工账号分离。平台一句话成人培训履约自学为主 辅助学习工具 学习资料。明确不做正式考试能力与术语排课 / 课表 / 调停课助学材料线上审核系统发证一期不做原生 App、家长端、多租户强隔离。主闭环后文「先做到」的验收标准购班型 → 课权入池 → 入班 → 学习计划 → 自学进度 → 督促 / 计划变更通知1.1 学员端小程序角色游客已登录未购班型、正式学员已购班型、全新用户建档并推销售。职责以班型为主路径浏览、购课、自学。能力账号微信 / 手机号登录微信须绑手机合并与换绑规则新客推销售购课业务品类筛选非「选考试」试看 2 分钟班型主路径单课本期要做微信 / 支付宝五 Tab首页、社区、消息、学习情况、我的档案 / 计划 / 多班型咨询随机销售免费教务 / 教研付费咨询不可退教研忙排队不改派学习课件 / 视频 / 练习测评计进度站内收计划变更与催学单课不进池、不进班、无班群只开通内容权1.2 销售端CRM角色顾问仅名下名片主管团队、改派、唯一可发起退款。能力名片推送与分配一等高 R 拿最多二三等按比例公海领取改派后原销售出局跟进与聊天回写自研 IM 或企微个人标签 字典标签周 / 自然月统计与 R(0.7\times)总转化 ( 0.3\times)好客户转化主管退款驱动课权作废。1.3 教研端角色老师生产、一审、批改主管二审、发布。能力题库单题 Excel 批量一审→二审驳回回上一级知识树与品类下科目 / 方向课件章节练习测评组卷仅练习 / 阶段 / 模拟录播媒资主管发布第三方接入付费咨询承接。不做配置 SKU课表直播正式考试术语。1.4 教务端角色教务老师教务主管开班、指派授课老师无本端后台可为群成员。能力支付成功自动建档入池班型可配置含 1 对 1capacity_max1仍入班建群入班三通道无课权不能进班学习计划 催学通知必达进度相对计划默认 15% 禁调班退款 / 过期自动退班停学班群私聊考核以完成度与练习为主。不做排课 / 课表 / 调停课考试日历。1.5 运营端能力渠道映射一 / 二 / 三等与投放落地页班型 / 单课 SKU必挂品类社区先审后发资讯与资质公示本端看板与审计。不做内容生产、跟进改派退款、开班、按 R 分配销售。1.6 中台能力经营 / 转化 / 履约 / 内容 / 社区 / 投放只读看板服务健康与队列观测。红线禁止写回业务主数据。1.7 跨端因果技术排期用获客→转化渠道 / 新客 → 销售分配 → 购班型成交→履约支付 → 课权 → 建档入池 → 入班 → 计划 → 自学催学内容→售卖教研发布 → 运营挂 SKU → 学员购买退款主管发起 → 课权作废 → 自动退班停学出群二、总原则系统是「长」出来的不是一次「画」出来的接到六端清单后技术容易犯两种错一次成型按最终蓝图同时开工十二个微服务、直播、排课、考务——主闭环三个月跑不通。永远不做完只有页面没有课权、没有事件、没有通知结单——「做到了功能没做到业务」。正确节奏对应三个阶段阶段目标心态先做到主闭环可演示、可联调能买、能权、能进班、能学、能催再优化正确、可恢复、可审计钱不乱、权不错、通知可达、进度可信最后成型针对本需求的最优解边界钉死、领域收齐、旁路补全、可演进端是体验服务按业务领域拆。端可以六个一起出需求领域能力必须按阶段长出来。六端需求产品一次交清 │ ▼ ┌────────────┐ │ 先做到 │ M1M2成交履约主链跑通 └──────┬─────┘ ▼ ┌────────────┐ │ 再优化 │ 幂等、Outbox、通知结单、进度规则、分配策略 └──────┬─────┘ ▼ ┌────────────┐ │ 最后成型 │ 领域地图收口、硬约束、M3M4、ADR └────────────┘三、阶段一先做到——让主闭环先跑起来3.1 这一阶段只回答一个问题沙箱里买一笔班型课学员能不能进班按计划学教务能不能催到做不到这一点分层图画得再漂亮都是负债。3.2 最小可运行骨架Walking Skeleton先做到时技术形态要故意「笨」一点模块化单体Java 17 Spring Boot 多 module一期单进程逻辑分库先分开同实例多 schema 即可给以后拆进程留缝但先不拆十二个仓库每端一个薄 BFF只拼页面不写跨域事务栈有默认小程序 Vue3 WebNode 22 BFFMySQL Redis先同步调通再上 MQ 也不晚但支付成功开通课权这条链必须稳定最小模块集合M1→M2次序拉起模块做到什么M1identity、product-line、catalog、commerce、entitlement、crm登录、SKU、支付、课权、名片分配M2academic、learning、im-notify可先站内通知表入班、学习计划、进度、催学社区、资讯、中台看板、企微、完整 OpenIM 班群——先不做。题库也可以先手工几道题Excel 批量放到下一阶段。3.3 「先做到」时的领域切分够用即可不要按端建服务但也不要第一天拆十二个限界上下文到独立进程。先按写事实的归属切开包与库事实先放在哪谁在用订单支付commerce学员下单课权 ACTIVEentitlement看课、入班校验档案 / 池 / 班 / 计划academic教务进度位learning学员 / 教务只读名片与归属crm销售通知发送状态im-notify可先简表计划变更、催学课权必须第一天就独立于订单状态。这是「先做到」里唯一建议提前做对的钉子入班、看课都校验课权而不是order.statusPAID。否则退款一来优化阶段会推翻履约判断。3.4 「先做到」的验收故事写成一条可脚本化的路径运营挂好一个班型 SKU可先用管理接口灌数学员支付成功 → 课权 ACTIVE → 自动建档入池教务开班入班 → 发布一版学习计划学员完成计划内一项 → 进度变化可见教务催学 → 学员侧能收到先站内消息也算做到退款可先做「主管点退款 → 课权作废 → 学员不能再学」群同步可后补。3.5 这一阶段刻意不做的事不上微服务拆分、不上自动排课、不上考务不追求完美 R 公式与公海全部规则可先人工改派 简单轮询不追求通知 exactly-once先保证「能发出去、失败能看见」不为 1 对 1 另做私教旁路——容量1 的班走同一套入班先做到的产出物可演示的主闭环 模块边界草图 「明确不做」列表钉在仓库里。四、阶段二再优化——把「能跑」变成「跑得对」主闭环跑通以后问题会从「有没有功能」变成「对不对、挂了能不能恢复」。优化要围绕质量属性而不是继续堆页面。4.1 一致性钱与权强一致跨域最终一致支付回调幂等同一out_trade_no只成功一次跨域用Outbox业务表与 outbox 同事务提交再投递 MQBFF禁止同时写交易库和履约库BEGIN; UPDATE trade_order SET statusPAID WHERE out_trade_no? AND statusUNPAID; INSERT INTO outbox(event_id, type, payload, status) VALUES (...); COMMIT;优化后的成交链通知履约课权支付渠道交易学员通知履约课权支付渠道交易学员教务入班下单支付回调验签幂等订单PAID Outbox OrderPaidOrderPaid课权ACTIVE Outbox EntitlementGrantedEntitlementGranted档案 入池 WAITINGEnrollment IN建群投影发布学习计划DELIVERED 后计划生效4.2 通知通道与事实分离「先做到」可以用站内消息凑合。「再优化」必须业务动作 → notification(PENDING) → 调 OpenIM/企微 → DELIVERED | FAILED计划变更、催学以业务库DELIVERED为结单不以 IM SDK「已显示」为准。群成员是入班关系的投影退班失败要可补偿。4.3 学习进度与调班规则落地完成位拆开material_done/exercise_done/practice_done/video_done分母 学习计划 required 项调班读快照默认进度 15% 禁止视频完成阈值如 ≥90%服务端判定禁止客户端一次上报 0→1004.4 销售分配从「能分」到「按策略分」来源一 / 二 / 三等R 可配置周 自然月统计分配日志可审计改派转移 owner聊天无论 OpenIM 还是企微一律回写 CRM新人 R 冷启动保底配额或团队均值避免 R0 分不到人4.5 账号、安全与 API 收紧User/SysUser分表JWT 带principal_type对外public_id播放短时票支付回调验签密钥进配置中心统一响应{code,message,data,timestamp}4.6 逻辑分层在优化阶段「长结实」体验层早就有了优化阶段把依赖方向钉死体验层 小程序与五类Web聚合层 各端BFF接入层 API网关领域层 Bounded Context平台层 MQ OSS OpenIM数据层 MySQL Redis再优化的产出物Outbox 与幂等规范、通知状态机、进度与调班规则、CRM 策略与审计、分层与红线文档。主闭环从「能演示」变成「能扛真实成交与退款」。五、阶段三最后成型——收成「针对本需求」的最优解「最优」不是业界最潮而是对这套六端需求最贴成人教育自学履约而不是 K12 面授考务。5.1 用需求钉死架构决策ADR决策最优选择若做错会怎样学习组织学习计划不做课表教师冲突、调停课状态机白做测评练习 / 阶段 / 模拟禁止 EXAM长出准考证、监考、官方成绩1 对 1capacity_max1仍入班建群履约分叉成私教旁路进程形态先模块化单体逻辑库已分过早微服务拖死主链IM通道可换SoR 在业务通知 / 入班企微或 IM 厂商库变成真相中台只读报表改业务对账永久对不齐5.2 领域地图收口六端能力全部有归属成型后的服务地图——仍可同进程但边界完整领域模块逻辑库承接的端能力identity / rbacdb_identity全端登录权限product-linedb_program品类主数据crm-salesdb_crm销售端全部commercedb_trade下单支付退款entitlementdb_entitlement课权catalog-opsdb_ops渠道 SKU 资讯社区审content / mediadb_content / db_media教研内容与媒资academicdb_academic教务池班计划催学learningdb_learning进度与作答im-notifydb_im通知与 IM 映射analytics汇总 / 数仓中台只读领域上下文体验层OrderPaidEntitlementGrantedEnrollmentChangedProgressSnapshot学员小程序销售CRM教务后台教研后台运营后台身份交易课权履约学习内容销售CRM域通知IM需求 → 硬约束成型期写进仓库需求原话硬约束自学为主教务催学有study_plan禁止schedule*不做正式考试paper_kind无 EXAM禁止/exams退了不能学退款事件 → 课权 REVOKED → 退班 → 吊销播放票催学必达通知结单认 DELIVEREDSKU 分类product_line_idNOT NULL1 对 1 也要管容量 1 仍入班建群5.3 关键子系统定型课权状态机最终形态仍保持简单支付成功开通退款成功到期ACTIVEREVOKEDEXPIRED学习计划模型StudyPlan/StudyPlanItem课时、顺序、建议日、required变更通知 DELIVERED 后生效。题库M3 成型Excel 导入、两级审、驳回回上一级、组卷钉question_version。媒体播放票直播若需要按内容场次另立项不绑课表。5.4 旁路补全与工程定型M3M4阶段成型内容M3题库 Excel→审核→组卷作答班群 OpenIMM4资讯社区、中台看板、合规词包销售企微若启用工程结构定型repo/ apps/ mini-student 五类 Web bff/ 各端 Node 聚合 services/ Java 各领域 module deploy/ compose 与生产清单默认栈锁定Java 17、Node 22、MySQL 多 schema、Redis、RabbitMQ、OSS、OpenIM。何时拆独立进程某域扩容或发版节奏明显孤立时再拆——那是成型之后的演进不是第一天的目标。5.5 「成型」长什么样对照六端需求最优解应同时满足每条端能力都能指到唯一领域与 SoR主闭环事件可重放、可幂等、可审计「明确不做」没有落成表、枚举、接口新加社区 / 资讯 / 看板不破坏成交履约链文档三层同构口径一页纸 → 技术基线 → 分域详设六、三阶段对照表一张图看清演进维度先做到再优化最后成型目标主闭环可演示正确、可恢复贴合六端需求的稳态架构范围M1M2 核心支付/课权/通知/进度/CRMM3M4 全领域地图进程单进程多 module仍可单进程按需再拆进程集成能串起来Outbox 幂等事件名与补偿规范收口通知能收到即可DELIVERED 结单双通道 投影补偿教务能入班发计划进度/调班规则计划模型成为唯一学习组织销售能分到人R/周月/审计策略与事实分离定型文档闭环验收故事红线与状态机ADR 硬约束表七、产品 ↔ 技术交接按阶段用产品始终交付六端能力、主流程、不做清单、术语禁令本文第一节。技术分阶段交付阶段技术交付物先做到验收故事脚本、最小模块列表、课权独立约定再优化Outbox/幂等、通知状态机、进度与分配规则、分层红线最后成型完整领域↔库对照、ADR、M3M4 排期、接口与字段按域展开八、结语架构一套在线教育系统过程应是接住六端需求把能力和边界写全先做到——用模块化单体把「购班型 → 课权 → 入班 → 计划 → 进度 → 催学」跑通再优化——把钱、权、通知、进度、分配做成可幂等、可审计、可补偿最后成型——用学习计划替代课表、用练习替代考务、用领域 SoR 收口六端补齐题库与中台旁路留下 ADR。最优解不是一开始就画出来的是对着真实需求先跑通、再做对、最后收口长出来的。主闭环立住了社区、资讯、更细的中台都只是在骨架上长肉。本文按成人教育培训平台需求定稿与技术实现基线整理。若场景是强面授课表课表会进入成型期的限界上下文但「先做到再优化后成型」「端 ≠ 服务」「课权与 SoR」仍然适用。