51mee - AI智能招聘平台Logo
模拟面试题目大全招聘中心会员专区

设计一个支持大规模学生(如1万+)同时在线考试的实时批改系统。请设计系统架构(如前端、后端、AI批改模块),并说明如何处理高并发请求、数据一致性(如学生答题进度与批改结果同步),以及容灾方案。

学而思中学教师难度:困难

答案

1) 【一句话结论】
采用微服务+分布式消息队列+AI批改引擎的架构,通过负载均衡、分库分表(热点数据全局缓存+独立分片)、消息队列ACK机制保障实时性,Seata补偿事务确保数据一致性,多活容灾方案(异步同步+1秒内延迟阈值)应对故障,支撑1万+用户实时批改体验。

2) 【原理/概念讲解】
系统分为前端、后端服务、AI批改模块、消息队列、缓存(Redis/Tair)、数据库(分库分表)。前端接收答题请求,后端验证后推入消息队列(如Kafka),AI消费者消费任务调用量化后的模型(如INT8)和轻量部署(如TensorFlow Lite),结果通过队列通知后端。

  • 热点数据优化:热门题目、学生状态等热点数据采用全局缓存(如Tair),冷启动时加载热门数据到缓存(缓存预热),设置TTL过期策略(如5分钟),避免缓存雪崩。
  • 分库分表:按学生ID哈希分片(ShardingSphere),水平分片提高数据库性能,但热点数据单独分片或缓存,避免查询慢。
  • 消息队列:采用Kafka,消费者设置堆积阈值(1000条),堆积超限触发重试,ACK机制确保消息不丢失。
  • AI模型优化:量化(INT8)减少计算量,轻量部署(TensorFlow Serving)提升推理速度,但需测试量化精度。
  • 数据一致性:Seata补偿事务,确保答题进度与批改结果同步,比如先更新答题记录,再通过补偿事务同步批改结果。
  • 容灾:多活数据中心,数据通过消息队列异步同步,设置1秒内延迟阈值,监控延迟,超过阈值触发重试,网络分区下采用最终一致性。

3) 【对比与适用场景】

组件定义特性使用场景注意点
负载均衡(Nginx)分发请求到后端节点轮询、权重、IP哈希Web前端,高并发配置策略避免单点
分库分表(ShardingSphere)水平分片数据库按分片键哈希/范围分片存储大量学生数据选择合适的分片键,避免热点
全局缓存(Tair)分布式缓存高并发读写,全局一致性热点数据(题目、状态)缓存预热,TTL过期,避免雪崩
消息队列(Kafka)分布式异步通信高吞吐、持久化、解耦任务异步处理集群部署,管理复杂,ACK机制
AI模型优化(量化)模型参数量化减少计算量,提升速度AI批改引擎量化精度损失需测试
补偿事务(Seata)分布式事务最终一致性,支持补偿数据一致性保障配置事务组,避免超时
容灾方案(多活)异步同步+延迟阈值网络分区下可用容灾监控延迟,超限重试

4) 【示例】
前端提交请求:

POST /api/submit
Content-Type: application/json
{
  "studentId": "S12345",
  "questionId": "Q001",
  "answer": "A1"
}

后端处理流程:

  1. 验证studentId和questionId有效性;
  2. 前端建立WebSocket连接,订阅主题student:S12345:grading;
  3. 将批改任务推入Kafka主题exam_grading,消息体包含studentId、questionId、answer;
  4. 返回“提交成功,批改中”;
  5. AI消费者消费消息,调用量化后的模型(如TensorFlow Serving),返回结果(score, analysis);
  6. 后端消费者(Seata事务)更新数据库(答题记录表,分片键studentId哈希),更新Redis(学生状态,热点数据从Tair获取),发送WebSocket消息(主题student:S12345:grading)通知前端;
  7. 前端收到消息后更新界面,显示批改结果。

5) 【面试口播版答案】
面试官您好,针对1万+学生同时在线考试实时批改系统,我设计的方案核心是微服务架构,结合分布式消息队列、AI批改引擎,通过负载均衡、分库分表(热点数据用全局缓存+独立分片)、消息队列的ACK机制保障实时性,Seata补偿事务确保数据一致性,多活容灾方案(异步同步+1秒内延迟阈值)应对故障。具体来说,前端通过Nginx负载均衡分发请求,后端服务解耦,AI模块用模型量化(INT8)和轻量部署(TensorFlow Lite)减少推理延迟,消息队列(Kafka)异步处理任务,避免后端压力。对于数据一致性,采用Seata补偿事务,比如答题进度更新后,通过补偿事务同步批改结果。容灾方面,多活数据中心通过消息队列异步同步数据,监控延迟,超过阈值触发重试,保证服务可用性。比如,当某个数据中心故障时,数据通过消息队列异步同步,延迟不超过1秒,网络分区下采用最终一致性,确保用户仍能正常使用。

6) 【追问清单】

  • 如何处理AI模型推理的延迟?
    回答要点:通过消息队列缓冲,设置任务超时重试(如5秒后重试),优化模型推理速度(量化、轻量部署),同时提供降级策略,如延迟超过3秒时,返回“批改中,请稍后”提示。
  • 数据库分库分表后,跨库事务如何解决?
    回答要点:采用Seata分布式事务,配置全局事务,或通过补偿事务(如定时同步)保证最终一致性,比如答题记录更新后,补偿事务在1分钟内同步批改结果。
  • 容灾方案中数据同步的延迟如何控制?
    回答要点:采用异步数据同步(消息队列),设置同步延迟阈值(如1秒内),监控延迟指标,超过阈值触发告警和重试,比如延迟超过2秒时,启动重试机制,确保数据最终一致。
  • 热点数据查询优化策略?
    回答要点:对热门题目、学生状态等热点数据,采用全局缓存(如Tair),冷启动时加载热门数据到缓存(缓存预热),设置TTL过期策略(如5分钟),避免缓存雪崩,同时热点数据单独分片,减少查询压力。
  • 消息队列堆积如何处理?
    回答要点:消费者设置堆积阈值(如1000条),堆积超限触发重试或降级,比如堆积超过阈值时,将任务放入重试队列,并通知监控,同时降低后端处理速度,避免系统崩溃。

7) 【常见坑/雷区】

  • 忽略分库分表后热点数据查询性能,导致查询慢。需对热点数据单独缓存,或优化分片策略(如按时间分片),避免热点数据集中在一个分片。
  • 消息队列ACK机制未启用,导致消息丢失。应开启ACK机制,确保消息被消费者处理后才确认,避免任务丢失。
  • AI模型推理波动未降级。需设计降级策略,如延迟超过阈值时,返回降级提示,避免用户等待时间过长。
  • 容灾方案未考虑网络分区,导致数据不一致。应设计网络分区下的数据同步策略(如最终一致性),避免强一致性要求,保证服务可用性。
  • 缓存预热未考虑冷启动问题。冷启动时,热门数据未加载到缓存,导致查询慢,需提前预热缓存,或采用懒加载策略,避免影响用户体验。
51mee.com致力于为招聘者提供最新、最全的招聘信息。AI智能解析岗位要求,聚合全网优质机会。
产品招聘中心面经会员专区简历解析Resume API
联系我们南京浅度求索科技有限公司admin@51mee.com
联系客服
51mee客服微信二维码 - 扫码添加客服获取帮助
© 2025 南京浅度求索科技有限公司. All rights reserved.
公安备案图标苏公网安备32010602012192号苏ICP备2025178433号-1