千万级学生管理系统的考试试卷存储方案
试卷大小(按 PPT 中假设):
每门考试的答案 20 判断题、20 选择题、4 道大题:假设判断题 50 字。选择题题目 50 字,选项平均 20 字,四个选项。大题平均每道题题目 200 字。一份试卷=50*20+130*20+4*200=4400 字。假设以 UTF8 存储,每份试卷大小约=4400*3/1000=13.2k。
redis 存储大小:
ppt 中假设 1000 万学生,每年离校四分之一,既 250 万学生毕业。
平均每所大学学生人数 1 万 5,每个年级大约 4000,每所学校平均 40 个专业,平均每个专业 100 人。
假设每门学科每年 2 次考试,每个学生平均一学期 20 门课。
试卷数量=1000 万/100*20=200 万试卷
试卷大小=2000000*13.2k 约=26.4G。
QPS 分析:
假设学校的考试都安排在某一个月内,考试的时候请求试卷,提交答案,中间答题过程浏览器本地完成,由于考试集中在上午 4 小时和下午 4 小时, 且请求试卷集中在考试开始的前 1 分钟,提交答案集中在考试结束前的 30 分钟。
请求试卷:1000 万 * 20(课)/ 20(周末不考试) / 4(每天 4 堂考试)/ 1 分钟 = 250 万请求/分钟 ≈ 5 万/每秒。
redis 存储方案
可使用 list 存储,可逐题读取。
试卷总大小为 26.4G,考虑文本可压缩,32G 的内存即可满足。
这里选择 3 台 4C32G 的机器来部署 Redis 主从,3 台 2C4G 的机器来部署 redis sentinel。
如果 5 万/s,网络流量=5 万*13.2k=660M,可以设计为逐题请求,做完一题请求下一题。或者先请求一题后异步预加载。避免影响考试。
版权声明: 本文为 InfoQ 作者【Sky】的原创文章。
原文链接:【http://xie.infoq.cn/article/c08e4bbe7fdb958e560a44bdd】。未经作者许可,禁止转载。
评论