
1) 【一句话结论】
针对东南大学多校区、多角色的教务系统,核心设计是采用分布式微服务架构+Saga模式+事件驱动,通过强一致性保障(如选课操作的原子性)与跨校区数据同步,同时结合RBAC权限控制满足学生、教师、管理员的不同操作需求。
2) 【原理/概念讲解】(老师口吻)
要设计支持多校区、多角色的教务系统,需从核心模块、数据一致性、跨校区协作三方面拆解:
course-selection-events,目标校区(四牌楼)消费事件并执行本地操作(如检查课程容量、扣减容量),再发布确认事件(course-selection-confirmed)回发起校区。类比:多校区教务系统像“连锁超市”,数据一致性像“库存实时同步”,跨校区协作像“分店间的订单处理”,通过Saga模式确保订单(选课)的原子性,通过消息队列保证订单流程的顺序性,避免库存(课程容量)不一致。
3) 【对比与适用场景】
| 特性 | 集中式系统 | 分布式系统(微服务+Saga+事件驱动) | 适用场景 |
|---|---|---|---|
| 数据存储 | 单一数据库,数据集中管理 | 多个数据库(各校区),通过事件同步 | 校区数量多、数据量大、高并发场景(如东南大学多校区、学生规模大) |
| 扩展性 | 难以水平扩展 | 易于水平扩展(各服务独立部署) | 需快速响应校区新增或业务增长 |
| 数据一致性 | 强一致性(实时同步) | 强一致性(选课等关键操作)+最终一致性(非关键操作) | 关键业务(选课、成绩)需强一致性,非关键业务(课程信息)可最终一致性 |
| 权限控制 | 统一权限管理,但难以按校区隔离 | RBAC+校区维度权限控制(如管理员仅管理本校区数据) | 多角色(学生、教师、管理员)且需按校区隔离权限 |
| 注意点 | 扩展性差,单点故障影响大 | 需处理分布式事务、消息延迟、网络分区 | 多校区、高并发、高可扩展性的场景 |
4) 【示例】(选课流程含重试与补偿)
POST /api/v1/course/register,body: { "studentId": "2023001", "courseId": "1001", "campus": "九龙湖" }course-selection-events。checkCourseCapacity(1001) > 0)→ 扣减容量(updateCourseCapacity(1001, -1))→ 发布确认事件(course-selection-confirmed)。updateCourseCapacity(1001, 1)),发布补偿事件(course-selection-compensation)。updateStudentCourseRecord(2023001, 1001))。deleteStudentCourseRecord(2023001, 1001))。伪代码(简化):
// 九龙湖校区学生选课请求
request = { "studentId": "2023001", "courseId": "1001", "campus": "九龙湖" }
publish("course-selection-events", request)
// 四牌楼校区课程服务消费事件
event = consume("course-selection-events")
if (checkCourseCapacity(event.courseId) > 0) {
updateCourseCapacity(event.courseId, -1) // 本地事务
publish("course-selection-confirmed", event) // 确认事件
} else {
publish("course-selection-rejected", event) // 拒绝事件
}
// 九龙湖校区服务消费确认事件
confirmedEvent = consume("course-selection-confirmed")
updateStudentCourseRecord(confirmedEvent.studentId, confirmedEvent.courseId)
// 补偿逻辑(四牌楼重试失败)
compensationEvent = consume("course-selection-compensation")
deleteStudentCourseRecord(compensationEvent.studentId, compensationEvent.courseId)
5) 【面试口播版答案】(约90秒)
“面试官您好,针对东南大学多校区、多角色的教务管理系统设计,我的核心思路是通过分布式微服务架构+Saga模式+事件驱动,实现强一致性保障(如选课操作的原子性)与跨校区数据同步,同时结合RBAC权限控制满足不同角色需求。首先,核心模块包括:用户管理(统一认证,区分学生、教师、管理员角色,按校区隔离权限,如管理员仅管理本校区数据)、课程管理(多校区课程信息通过消息队列实时同步)、选课管理(支持跨校区选课,如九龙湖学生选四牌楼课程)、成绩管理(教师仅能批改本校区学生成绩)。数据一致性方面,采用Saga模式结合本地事务与补偿事务,比如学生选课时,系统检查课程容量(扣减容量)并更新选课记录,每一步提交本地事务,若某步失败则触发补偿(回滚容量,删除选课记录),通过唯一交易ID确保补偿幂等性。跨校区协作流程通过Kafka传递事件,比如选课事件从九龙湖校区发布到四牌楼校区,四牌楼处理容量后返回确认,若网络延迟,Kafka自动重试(指数退避,5次重试),重试失败则触发补偿。这样既能保证选课操作的强一致性,又能支持多校区、多角色的操作,提升系统稳定性和可扩展性。”
6) 【追问清单】
7) 【常见坑/雷区】