考试试卷存储方案
用户行为建模和性能估算 - 考试
假设每门学科每年 2 次考试,每个学生平均一学期 20 门课,考试采取机考的方式,每门考试的答案 20 判断题、20 选择题、4 道大题,全国一共有 10 万学校。每场考试的只有一份试卷,试卷分和基本信息和题目信息,考试前学校为对应班级的所有学生分配对应考试的权限,一个考生同时只会有一场考试的权限,
考试试卷的性能评估:
• 试卷大小:10 万学校 * 20(课)* 3(年级数量)*100KB(每场考试试卷大小) / 20(周末不考试)/ 4(每天 4 堂考试)/ = 7.2G,为避免考试集中在最后几天,容量设计为 16G。
• 请求试卷:1000 万 * 20(课)/ 20(周末不考试) / 4(每天 4 堂考试)/ 1 分钟 = 250 万请求/分钟 ≈ 5 万/每秒。
性能要求:
试卷请求 QPS:5 万/s
同时考试的试卷存储大小:16G
存储架构设计:
存储架构图
为保证高可用,配置 3 个哨兵(4C8G)和 1 主 2 从的 Redis 服务器(8C16G)
数据结构
考试基本信息使用 Hash 数据结构存储
key:"exam_base_"+学校 ID+班级 ID
value:{"考试 ID":1, "学科":"语文","考试时长":120,"满分":100,......}
考试题目信息使用 List 数据结构存储
key:"exam_paper_"+考试 ID
value:考试题目的列表
读写分析
老师制定好考试试卷和考试时间之后,学生管理系统后台任务提前 10 分钟将考试基本信息和题目信息缓存到 redis 中,学生登录后,点击开始考试,根据学生的学校 ID 和班级 ID 从 redis 获取自己的考试 ID,根据考试 ID 获取考试题目信息。
评论