架构实战营 模块四作业
设计千万级学生管理系统的考试试卷存储方案
前言
本文是千万级学生管理系统的考试试卷存储架构设计方案,用于指导考试试卷存储的部署和运维。
词汇表
Redis: 开源内存数据库
Sentinel: 哨兵模式
1. 业务背景
基于千万级学生管理系统的案例来搭建考试试卷存储系统。
假设每门学科每学期 2 次考试,每个学生平均一学期 20 门课,考试采取机考的方式,每门考试的答案 20 判断题、20 选择题、4 道大题(答案 200 字以内),考试结果永久保存,在校学生能够看到自己曾经的考试结果,则考试结果记录的存储量为:
• 在校学生:1000 万 * 20(课)* 2(考试次数) * 1000(答案)* 2(学期) * 3(只有前三年考试)= 2.4T。
• 离校学生:每年 250 万,存储量为 0.6T。
假设学校的考试都安排在某一个月内,考试的时候请求试卷,提交答案,中间答题过程浏览器本地完成,由于考试集中在上午 4 小时和下午 4 小时,且请求试卷集中在考试开始的前 1 分钟,提交答案集中在考试结束前的 30 分钟,因此估算如下:
• 一期试卷考题存储量: 1000(学校) * 100(专业) * 3(年级) * 20(课程) * 5000(试卷) = 30G。
• 请求试卷:1000 万 * 20(课)/ 20(周末不考试) / 4(每天 4 堂考试)/ 1 分钟 = 250 万请求/分钟 ≈ 5 万/每秒。
• 提交试卷: 1000 万 * 20(课)/ 20(周末不考试) / 4(每天 4 堂考试)/ 30 分钟 = 1700/每秒。
• 一期试卷答题结果存储量: 1000 万 * 20(课)* 1000(答案)= 200G
• 一期课程成绩结果存储量: 1000 万 * 20(课)* 200(答案)= 40G
2. 约束和限制
1、试卷考题存储大小 30G, 由于大部分是文字,压缩只有大概在 20G
2、QPS=5w
3. 总体架构
教师出卷:通过题库选择和出题,然后组成一份试卷存入 MySQL,并同步到 Redis。
学生考试:根据学校、专业、班级、课程、考期在 Redis 中分块获取试卷信息,答题之后保存到 HBase 中。
教师阅卷:获取学生的答题结果,进行批阅和评分,将评分结果存入 MySQL,并同步到 HBase 中。
查询成绩:根据学校、专业、班级、课程、考期、学号获取考试的结果和成绩。
3.1 架构分析
3.1.1 高性能
由于考试请求试卷的峰值较大,需要从并发量,请求数据大小进行分析。根据估算 QPS 在 5 万每秒,采用单台 Redis 也能满足要求,但是数据量 250M/s(5w*5k)超出单机吞吐量,至少需要两台机器。
3.1.2 高可用
防止出现从 Redis 中获取试卷信息意外宕机的风险,冗余一台机器的能力。保障关系数据高可用,通过半同步方式部署两台从机。
3.2 总体架构
针对考试试卷,MySQL 进行一主二从自动切换部署,Redis 采用三个 Sentinel 实例的集群和一主二从三个 Redis 实例的集群部署,Sentinel 哨兵监控三个实例,三台服务器上每台部署一个 Sentinel 实例和一个 Redis 实例;HBase 采用集群部署测试。MySQL 存储考题信息、试卷考题关系、课程考试结果;Redis 存储当期的试卷基础信息和试题信息;HBase 存储试卷答题结果信息。
4. 详细设计
4.1 核心功能
4.1.1 教师出卷
从题库中调取题目信息,然后选择或编辑题目,并保存新的考题,并组成一份试卷的关系,保存到数据库中,并发布到 Redis 中。
4.1.2 学生考试
考试时,先从 Redis 中获取试卷基本信息,然后逐块或按题获取题目信息;答题之后,把题目、解答保存到 HBase 中。
4.1.3 教师阅卷
从 HBase 中调取学生答卷信息,并做结果评分,记录保存到 Hase 中;课程考试成绩和答题正确率统计,保存在 MySQL 中。
4.1.4 查询成绩
学生查询答题和评分明细从 HBase 中获取,查询课程成绩从 MySQL 中获取。
4.2 关键设计
1、考题、试卷
考题按照课程题型分表存储;试卷按照学校、专业分表存储;课程考试结果按照学校、专业、课程分表存储;当期试卷在 Redis 上采用 Hash 数据结构存储,key 是学校、专业、班级、课程,field 是试卷基础信息和题型题号两类,value 是具体题目信息。
2、考试结果
课程考试成绩按学校/专业/课程分表存储;学生答题结果按照学校、学号、考试 ID 为 key,题目、答题、评分为列进行存储。
4.3 设计规范
1、MySQL 按学校、专业、课程分表存储;
2、Redis 采用 Hash 数据结构存储;
3、HBase 按学校、学号、考试 ID 键值存储;
版权声明: 本文为 InfoQ 作者【felix】的原创文章。
原文链接:【http://xie.infoq.cn/article/f03640ed5aad89ab5aa30572b】。未经作者许可,禁止转载。
评论