模块四
设计千万级学生管理系统的考试试卷存储方案
1.用户量预估
1000 万
2. 用户行为建模和性能估算-考试
2.1. 考试
假设每门学科每年 2 次考试,每个学生平均一学期 20 门课,考试采取机考的方式,每门考试的答案 20 判断题、20 选择题、4 道大题(答案 200 字以
内),考试结果永久保存,在校学生能够看到自己曾经的考试结果
则考试结果记录的存储量为:
l 在校学生:1000 万* 20(课)* 2(考试次数)* 1000(答案)* 2(学期)* 3(只有前三年考试)= 2.4T。
l 离校学生:每年 250 万,存储量为 0.6T。
l 假设学校的考试都安排在某一个月内,考试的时候请求试卷,提交答案,中间答题过程浏览器本地完成,由于考试集中在上午 4 小时和下午 4 小时,
l 且请求试卷集中在考试开始的前 1 分钟,提交答案集中在考试结束前的 30 分钟,因此估算如下:
l 请求试卷:1000 万* 20(课)/ 20(周末不考试)/ 4(每天 4 堂考试)/ 1 分钟= 250 万请求/分钟≈ 5 万/每秒。
l •提交试卷:1000 万* 20(课)/ 20(周末不考试)/ 4(每天 4 堂考试)/ 30 分钟= 1700/每
根据上面的指标进行 redis 相关的性能及架构存储方案进行设计
l 试卷大小: 70(字)×20(判断题)+100(字)×20+100(字)×4=3800×3(一个汉字 3byte)= 12000 =(约) 1.5K
l 单机 1000M 带宽 redis 每秒可处理的试卷数:(1000×1024)/1.5 = 68 万(单机就能满足网络需求)
l 单机 2C4G 的 redis 性能参数:使用 string 类型 1.5K, qps:25000/s
l 试卷存储数据结构:string
l 根据前面的计算结果考试请求时间的 qps:50000/s,所以 redis 的提供的 slave(2C4G 读)机器需要 3 台,master(2C4G 读写)一台,sentinel 机器(1C1G3 台),一共需要 7 台 redis 设备。
Redis 存储方案设计-原始试卷信息
开考前由相关科目的老师将试卷上传至题库,并预热至 redis 缓存中。
数据结构设计
Key:学校 ID+院系 ID+年纪 ID+考试科目 ID
Value: 考试科目内容
读写分析:
1. 学生登录后获取到自己的学校 ID+院系 ID+年纪 ID 然后进入到考试页面选择考试科目,
通过学校 ID+院系 ID+年纪 ID+考试科目 ID 既可拿到试卷进行考试。
2. 考试结束后由相关科目的老师各自清除对应的试卷。
Redis 存储方案设计-答卷信息
数据结构设计
Key:学校 ID+学号 ID+考试科目 ID
Value: 答卷内容
读写分析:
1. 学生答题结束后,将试卷按 key:学校 ID+学号 ID+考试科目 ID 将答卷内容保存至 redis 集群中,等待相关的老师进行阅卷。
2. 老师阅卷完成并将成绩录入完成后,系统自动将答卷从 redis 中清空。
评论