架构师实战营模块四作业
设计千万级学生管理系统的考试试卷存储方案
1.作业
1.1【作业要求】
基于模块 4 第 6 课的估算结果和 Redis sentinel 的初步方案设计,完善考试试卷存储方案,具体包括:
1)完善 Redis 的数据结构设计,明确具体使用哪种 Redis 数据结构
2)设计具体的读写流程(可以文字描述也可以序列图描述,序列图要有文字辅助说明)
3)对照模块 4 第 6 课的性能估算结果,计算 Redis sentinel 集群的服务器数量和性能
1.2【提示】
1、性能可以有一定冗余
2、如果对 Redis sentinel 不熟悉,请参考官方文档: https://redis.io/topics/sentinel
1.3 题目解读
1.利用模块 4 第 6 课的估算结果;
2.用 Redis sentinel 做数据存储
3.设计 Redis 存储试卷的设计结构
4.服务器数量和性能可以有一定的冗余
2.架构设计方案
2.1 存储性能估算
2.1.1 用户量预估
根据课题背景,
学生人数: 1000 万;
假设平均每个学校在校学生 1 万;
接入平台的学校数量:1000 所;
教师人数按在校学生数的 10%计算,平台在册教师人数:100 万;
每位老师平均每年出 2 份试卷(每年两学期)
【关键行为】
1. 出卷——试卷上传;
2. 考试——请求试卷;
2.1.2 用户行为建模和性能估算
2.1.2.1 出卷——试卷上传
假设每位老师平均每年出 2 份试卷(每年两学期),每份试卷 50 道题(20 判断题、20 选择题、10 道大题),每道题的题目 200 字以内。则每年试卷存储量为:
在校教师 100 万 * 2(两期) *100K(试卷内容) = 200G;
允许快速查询前三年的试卷(出卷时判断是否重复),一共存储 4 年的试卷,共 0.8T;
假设学校的考试都安排在某一个月内,老师提前一周出完卷并上传。所以,某学期的所有试卷也在一个月内上传完。上传试卷集中在上午 4 小时和下午 4 小时,因此,上传试卷:100 万 * 2(份) / 20(周末不上传)/ 8 小时 ≈3.5/S
考虑峰值 10 倍;
上传试卷的 TPS = 35 份/S
2.1.2.2 考试——请求试卷
假设学校的考试都安排在某一个月内,考试的时候请求试卷,提交答案,中间答题过程浏览器本地完成,由于考试集中在上午 4 小时和下午 4 小时,且请求试卷集中在考试开始的前 1 分钟,因此估算如下:
• 请求试卷:1000 万 * 20(课)/ 20(周末不考试) / 4(每天 4 堂考试)/ 1 分钟 = 250 万请求/分钟 ≈ 5 万/每秒。
2.1.2.3 汇总
1、当年试卷存储:200G;
2、考虑存四年试卷:0.8T;(不考虑)
3、出卷-上传试卷 TPS:35/S;
4、考试-请求试卷 TPS:5W/S;
2.2 存储系统选择
1、分片存储;
2、压力在试卷的读取,Redis 单机可支持 5 万+的 KV 读取 QPS,考虑主从切换;
2.3 存储方案设计
1、试卷使用 redis 的 String 数据结构:
1)key 试卷编号(年份+学科+学期+A/B),
2)value 试卷内容。
2、Redis 单机已可支持 5 万+的 KV 读取 QPS:
1)Redis sentinel 3 台,保证自身高可用;
2)Redis 集群主从(采用普通服务器,master 10 台,每台 64G 内存;slave10 台,每台 64G)
版权声明: 本文为 InfoQ 作者【袁小芬】的原创文章。
原文链接:【http://xie.infoq.cn/article/33358061c1b7e35f2e94ea04d】。未经作者许可,禁止转载。
评论