
1) 【一句话结论】
为东南大学设计的学生信息管理系统,采用分层存储(关系型、文档型、时序数据库)区分多源数据,通过事件驱动架构实现跨校区异步同步,结合分布式事务与补偿机制保障数据一致性,支持多校区分片部署,核心模块覆盖本科生、研究生及继续教育学员管理,关键技术选型兼顾性能与扩展性。
2) 【原理/概念讲解】
首先,多源数据模型差异:本科生(学籍、成绩等结构化数据)字段包括student_id(主键)、name、contact、enrollment_date等;研究生(研究方向、论文等半结构化数据)字段为student_id、research_field(如“人工智能”)、papers(数组,存储论文标题与链接);继续教育学员(课程进度、学习时长等时序数据)字段为student_id、course_id、study_hours(时序)、last_study_time。通过“education_type”字段(本科生=1,研究生=2,继续教育=3)区分数据,服务层根据该字段路由到对应模块(如本科生服务处理学籍表,继续教育服务处理课程进度表)。跨校区部署时,本地数据按校区ID分片(如校区A的本科生数据存储在MySQL-A),跨校区同步通过校园网专线(假设东南大学各校区有专线连接,带宽高),数据压缩(如使用Snappy压缩算法减少传输量),消息队列Kafka配置批处理大小1MB,消费者数量与CPU核心数匹配(如8核配置8个消费者),重试策略为指数退避(第一次1秒,第二次2秒,第三次4秒,之后停止)。数据一致性采用最终一致性,核心事务(如学籍注册)用分布式事务Seata(基于补偿事务),非核心事务(如成绩更新)用最终一致性。补偿事务流程:失败操作记录到事务日志(包含操作类型、时间、失败原因),每日凌晨0点定时重试,若重试3次仍失败,触发人工干预(通过系统告警通知管理员),日志审计包括失败操作统计、重试次数、人工干预记录,确保数据可追溯。
3) 【对比与适用场景】
| 方案 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| 两阶段提交(2PC) | 领导者-从属者模式,协调者决定提交或回滚 | 强一致性,但阻塞(协调者占用资源,可能导致服务超时) | 传统事务(如金融核心业务,要求立即到账) | 阻塞,性能低,不适合微服务高并发 |
| Seata(补偿事务) | 基于补偿逻辑,异步提交 | 最终一致性,低阻塞(服务独立提交,协调者仅做补偿) | 微服务场景(如学生信息修改,高并发,允许延迟) | 需补偿逻辑,可能存在数据不一致风险(如补偿事务失败导致数据丢失) |
| 消息队列(Kafka) | 异步消息传递系统 | 高吞吐、低延迟、持久化 | 跨服务数据同步、事件溯源 | 需考虑消息积压、延迟,需设置重试与幂等 |
4) 【示例】
学生信息更新流程(本科生为例):
用户(本科生)修改联系方式:
student_info:
UPDATE student_info SET contact = '13900139001' WHERE id = 1001 AND education_type = '本科生';
db.student_cache.updateOne({id: 1001, education_type: "本科生"}, {contact: "13900139001"});
5) 【面试口播版答案】
各位面试官好,针对东南大学管理多源数据的需求,我设计的SIS系统核心是构建一个分层存储、事件驱动的分布式平台。首先,数据模型按教育类型区分:本科生(学籍、成绩等结构化数据)用MySQL,研究生(研究方向、论文等半结构化数据)用MongoDB,继续教育(课程进度、学习时长等时序数据)用InfluxDB,通过“教育类型”字段路由服务。跨校区同步通过校园网专线,Kafka异步处理,配置批处理1MB,消费者与CPU核心数匹配,重试指数退避。数据一致性采用最终一致性,核心事务用Seata补偿机制,失败操作记录日志每日重试,审计确保可追溯。多校区部署按校区ID分片,本地缓存减少延迟。这样既能保障数据一致性、实时性,又能支持多校区部署。
6) 【追问清单】
7) 【常见坑/雷区】