架构实战营模块四作业
一、作业内容:
使用 redis 设计千万级学生管理系统的考试试卷存储方案
二、估算性能:
基于模块四第 6 课的估算结果,使用 redis 需要满足存储的数据如下:
2.1 试卷存储量,每学期 20 门课,每门课每学期 2 次考试,每年两个学期,一共三年,则每个学生三年共参加 20*2*2*3 = 240 次考试。
假设每个试卷 512K 大小,试卷存储量为:
240*0.5M= 120M;
2.2 试卷结果存储量,按模块四第 6 课的估算结果,仅考虑在校学生,试卷答案存储量为:
2.4T;
2.3 同样,按模块四第 6 课的估算结果,对数据访问的性能估算为:
请求试卷 5 万 QPS, 提交试卷 1700TPS。
三、数据结构设计
3.1 试卷存储数据结构设计
使用 redis String 数据结构
key: 课程号 + 试卷编号(根据场景,每门课程每次考试都有唯一的试卷编号)
value: 试卷内容
3.2 试卷结果存储数据结构设计
使用 redis hash 数据结构
key: 课程号 + 试卷编号
hashKey : 学校 ID + 班级 ID + 学生 ID
hashValue: 试卷答题结果(含评分结果)
四、读写流程
4.1 请求试卷时,按照 “课程号 + 试卷编号”的 KEY 向 redis 发起请求试卷;
4.2 提交试卷时,按照 “课程号 + 试卷编号”的 KEY 和“学校 ID + 班级 ID + 学生 ID”的 hashkey 提交答题结果;
4.3 老师评分时,按照“课程号 + 试卷编号”的 KEY 和“学校 ID + 班级 ID + 学生 ID”的 hashkey 提取答题结果,评分后更新数据。
五、估算集群服务器数量及性能
5.1 估算方式:
1、使用三台 sentinel 独立服务器;
2、存储分析:试卷存储量 120M 太小忽略不计,主要考虑试卷结果存储量 2.4T(按按模块四第 6 课的估算)
按 240 次考试(见 2.1 估算),则每门课每次考试的考试结果存储空间为 2.4T/(20*2*2*3) = 10G。
按一台 redis 服务器的内存为 64G 计算,每台 redis 可以存储 6 次考试结果数据,240 次考试需要 40 台 redis 服务器。同时考虑存储的高可用,每台 redis 服务器增加一个副本,共 80 台 redis 服务器(64G)。
小结:使用 40 台内存为 64G 的 redis 服务器;
3、读写性能分析:
请求试卷性能分析:每个 redis 服务器都可以部署试卷(容量较小,仅 120M),80 台 REDIS 服务器同时提供试卷读取服务,5W QPS 分布到 80 台服务器,每台 redis 承担 600 多 QPS,毫无压力。
提交试卷性能分析:每台主 redis 负责提供写服务。一台常规的 redis 服务器可提供 1W 以上的 TPS 访问,1700TPS 的性能要求也可以满足。
5.2 存储架构
存储架构图如下:
说明:
1、每个 redis 服务器都存储试卷数据,每个 redis 服务器都可提供试卷请求服务;
2、每组 redis 服务器存储 6 次考试的结果,每个主 redis 服务器可提供试卷提交服务和评分提交服务器。
版权声明: 本文为 InfoQ 作者【王晓宇】的原创文章。
原文链接:【http://xie.infoq.cn/article/2f681aa694333f81e9a91aeb9】。文章转载请联系作者。
评论