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

设计一个支持百万级用户同时参与在线考试的架构,要求保证考试过程的公平性(如防作弊)、实时性(如答题进度同步)和稳定性(如系统故障不影响其他考试)。请描述核心组件、通信机制以及容灾方案。

深圳大学潍柴动力难度:困难

答案

1) 【一句话结论】采用“前端隔离+实时同步+分布式消息+多级缓存+主备容灾”的微服务架构,通过隔离防作弊、WebSocket实时同步、消息队列保证一致性、缓存加速、主备集群容灾,实现百万级并发下的公平性、实时性与稳定性。

2) 【原理/概念讲解】老师口吻,解释核心组件与机制:
“首先,考试系统需分层设计:前端隔离层(防作弊核心,如屏幕录制、摄像头监控+行为分析)、实时同步服务(负责答题进度实时推送)、后端核心服务(处理业务逻辑)、分布式消息队列(如Kafka/RabbitMQ,保证异步消息可靠传递)、多级缓存(Redis用于热点数据缓存,提升响应速度)。通信机制上,答题进度同步用WebSocket,因持久连接能实现低延迟实时推送(类比:像手机即时消息,双方持续在线,消息秒级到达,比HTTP轮询“频繁请求”更高效)。容灾方案采用主备集群模式,主节点处理请求,备节点热备,通过健康检查(如心跳检测)实现故障自动切换,保证系统故障不影响其他考试(类比:城市交通,主干道故障时,备路快速分流,不影响其他路段通行)。”

3) 【对比与适用场景】

通信方式定义特性使用场景注意点
WebSocket基于TCP的双向通信协议持久连接,低延迟,双向实时答题进度、实时通知需要服务器支持,连接管理复杂
HTTP长轮询客户端定期向服务器发送请求,服务器保持连接低延迟,但需频繁请求简单实时需求服务器负载高,延迟稍高
Server-Sent Events单向从服务器到客户端的实时推送单向,低延迟实时通知(如考试倒计时)仅支持单向

4) 【示例】
前端(JavaScript)发起WebSocket连接,后端(Node.js)处理进度更新:

  • 前端伪代码:
const socket = new WebSocket('wss://exam.wc.com/socket');
socket.onopen = () => console.log('连接成功');
socket.onmessage = (event) => {
  const data = JSON.parse(event.data);
  if (data.type === 'progress') {
    updateProgress(data.progress); // 更新本地进度显示
  }
};
socket.onclose = () => console.log('连接关闭');
  • 后端(Node.js)处理进度广播:
const WebSocket = require('ws');
const wss = new WebSocket.Server({ port: 8080 });

wss.on('connection', (ws) => {
  ws.on('message', (message) => {
    const data = JSON.parse(message);
    if (data.action === 'updateProgress') {
      updateProgressInDB(data.userId, data.progress);
      broadcastProgress(data.userId, data.progress);
    }
  });
});

function broadcastProgress(userId, progress) {
  wss.clients.forEach(client => {
    if (client.readyState === WebSocket.OPEN) {
      client.send(JSON.stringify({ type: 'progress', userId, progress }));
    }
  });
}

5) 【面试口播版答案】
“面试官您好,针对百万级用户在线考试架构,我的核心方案是采用分层微服务架构,结合实时通信与容灾设计。首先,公平性方面,通过前端隔离层实现防作弊,比如屏幕录制、摄像头监控,同时答题数据实时同步到中心服务器,防止篡改。实时性上,使用WebSocket实现答题进度双向实时同步,确保所有用户看到一致进度。稳定性方面,后端服务采用主备集群,通过健康检查实现故障自动切换,保证系统故障不影响其他考试。通信机制上,核心数据通过消息队列(如Kafka)保证异步处理的可靠性,缓存层(Redis)加速热点数据访问。容灾方案采用多活集群,主节点故障时备节点秒级接管,确保高可用。这样整体架构既能支撑百万级并发,又能保证公平、实时、稳定。”

6) 【追问清单】

  • 问题1:防作弊的具体技术细节?比如如何防止用户截图或切换窗口?
    回答要点:通过前端屏幕录制、摄像头监控+后端行为分析(如异常操作检测)。
  • 问题2:实时同步的延迟控制在多少?
    回答要点:通过WebSocket低延迟特性+消息队列异步处理,延迟控制在50ms以内。
  • 问题3:容灾切换的时间成本?
    回答要点:主备集群通过健康检查实现秒级切换,不影响用户体验。
  • 问题4:如何处理网络波动导致的数据丢失?
    回答要点:消息队列保证消息可靠传递,缓存数据定期同步。
  • 问题5:架构扩展性如何?
    回答要点:微服务架构支持水平扩展,各组件可根据负载独立扩容。

7) 【常见坑/雷区】

  • 忽略防作弊的具体技术,只说“前端隔离”而不展开细节。
  • 实时同步采用HTTP轮询,导致高并发下服务器负载过高。
  • 容灾方案设计为单点主备,未考虑多活集群。
  • 未考虑数据一致性,比如答题进度同步时出现冲突。
  • 架构过于复杂,比如引入过多中间件导致维护成本高。
51mee.com致力于为招聘者提供最新、最全的招聘信息。AI智能解析岗位要求,聚合全网优质机会。
产品招聘中心面经会员专区简历解析Resume API
联系我们南京浅度求索科技有限公司admin@51mee.com
联系客服
51mee客服微信二维码 - 扫码添加客服获取帮助
© 2025 南京浅度求索科技有限公司. All rights reserved.
公安备案图标苏公网安备32010602012192号苏ICP备2025178433号-1