
1) 【一句话结论】采用微服务+分布式架构,通过WebSocket保障实时答题低延迟,结合防作弊中间件(输入拦截+设备监控+行为分析)与Redis+MySQL分布式存储,实现百万级并发下的实时交互与成绩同步,确保防作弊措施的可验证性及成绩同步延迟控制在1-2秒内。
2) 【原理/概念讲解】老师:先拆解需求——百万级并发、实时答题、成绩同步、防作弊。架构上,拆分为前端(Web/移动)、实时通信(WebSocket)、业务逻辑(答题/成绩计算)、防作弊(输入拦截/设备监控/行为分析)、存储(Redis/MySQL)。实时答题用WebSocket,持久连接,低延迟,像“实时聊天”一样双向通信。防作弊输入拦截用JavaScript禁用Ctrl+C(前端),设备监控收集设备指纹(CPU型号、内存大小等硬件信息),结合摄像头监控(第三方API)检测作弊。成绩同步用消息队列(如Kafka)异步处理,减少数据库压力。存储层中,Redis作为缓存,存储高频访问的热点数据(如答题进度),MySQL作为持久化存储,存储成绩记录(分库分表按用户ID分片)。
3) 【对比与适用场景】
| 技术选型 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| MySQL | 关系型数据库 | ACID事务、事务一致性、支持复杂查询 | 稳定性要求高的数据(如成绩记录、用户信息) | 扩展性一般,需分库分表(按用户ID或考试ID分片) |
| Redis | 内存数据库 | 高速读写、缓存、支持数据结构(列表/集合) | 实时数据(如答题进度、用户在线状态) | 数据持久化需RDB/AOF,适合高频访问,缓存热点数据(如热门题目答案) |
4) 【示例】用户答题流程伪代码:
前端(答题):
// WebSocket连接
const socket = new WebSocket('wss://exam-server.com');
socket.onmessage = (event) => {
const data = JSON.parse(event.data);
// 发送答题
socket.send(JSON.stringify({ userId: 123, questionId: 1, answer: 'A' }));
};
// 输入拦截(禁用Ctrl+C)
document.addEventListener('keydown', (e) => {
if (e.ctrlKey && e.key === 'c') {
e.preventDefault();
alert('禁止复制粘贴');
}
});
后端(答题处理):
# 接收答题消息
def handle_answer(event):
data = json.loads(event)
user_id = data['userId']
question_id = data['questionId']
answer = data['answer']
# 存储到Redis(实时进度)
redis_client.set(f"user_{user_id}_q{question_id}", answer)
# 触发成绩同步(消息队列持久化)
kafka_producer.send('exam_results', value=answer, headers={'user_id': user_id, 'question_id': question_id})
成绩同步服务:
# 处理成绩消息
def process_result(message):
data = message.value
user_id = message.headers['user_id']
question_id = message.headers['question_id']
answer = data
# 计算成绩(假设)
score = calculate_score(answer)
# 存储到MySQL(成绩表)
db.execute("INSERT INTO exam_results (user_id, question_id, score) VALUES (?, ?, ?)", (user_id, question_id, score))
# 通过WebSocket推送给前端
web_socket.send_to_user(user_id, f"question_{question_id} score: {score}")
5) 【面试口播版答案】面试官您好,针对百万级用户的高并发在线考试系统,我的设计核心是构建微服务+分布式架构,通过WebSocket保障实时答题低延迟,结合防作弊中间件(前端JS输入拦截+后端设备指纹+行为分析)与Redis+MySQL分布式存储,实现成绩同步的实时性与防作弊的有效性。架构分为前端、实时通信层(WebSocket)、业务逻辑层(答题/成绩计算)、防作弊层(输入拦截+设备监控+行为分析)和存储层(Redis缓存热点数据,MySQL分库存储成绩)。实时答题通过WebSocket实现用户与后端的双向通信,成绩同步利用Kafka消息队列异步处理,减少数据库压力;防作弊方面,前端用JavaScript禁用Ctrl+C(代码示例),后端收集设备指纹(CPU型号、内存大小等硬件信息),结合鼠标移动轨迹、按键频率等行为分析,限制虚拟机绕过,并配合摄像头监控(第三方API)检测作弊行为。高并发处理上,前端通过CDN负载均衡,后端服务采用Nginx+反向代理,数据库分库分表(按用户ID分片),Redis缓存热点数据。这样既能满足百万级并发下的实时交互,又能保障成绩同步的准确性与防作弊的有效性。
6) 【追问清单】
7) 【常见坑/雷区】