模块 4 作业
一、作业要求
设计千万级学生管理系统的考试试卷存储方案
二、考试行为分析以及存储性能估算
对于服务端系统而言考试行为分为两个环节:试卷获取、试卷提交。
2.1 计算因子:
学生人数:1000w
考试次数:1 学期 2 次,1 年 4 次
考试课程:假设平均每学期 20 门
每张试卷所暂空间:假设每张试卷 5000 个汉字,5000*2byte/1024 ~= 10k
考试时间:每次考试都是集中在一个月中进行(22 天)
每个学校:假设每所高校 1w 人,则总共有 1000 所高校
2.2 获取试卷的 QPS 预估:
假设每天有 4 个考试时间段,早上两门,下午两门,总共:22 天*4= 88 个考试时间段,每个学生 20 门课。每个时间段考试人数分布:1000w*20/88~=220w,假设所有考生在 1min 内获取试卷:220w/60s~=36666/s 向上取整 QPS 大概:4w/s
2.3 提交试卷的 TPS 预估:
参考 2.2 中计算所得每个时间段考试人数分布 220w,考试最后 30min 是提交试卷的高峰期。
提交试卷的 TPS:220w/30/60 ~= 1222/s 向上取整 TPS 大概:1500/s
2.4 存储容量预估
1 年的存储容量公式 = 人数 * 课程数 * 考试次数 * 每张试卷大小
1000w * 20 * 4 * 10k ~= 7.45 T
三、存储方案设计
3.1 考试试卷存储方案设计:
经过上面的分析考试时试卷读取的 QPS 为 4w/s,采用 mysql 存储显然不合理,参考 redis 单机 TPS 5~10 万每秒,可以满足性能需求。
每次考试试卷的种类:1000 所高校 * 4 个年级 * 20 门课程 = 80000 份类型的试卷,8000 份试卷所占用的存储空间:80000*10k/1024k ~= 780M,可以采用 mysql 存储,也可以采用 redis 存储,因为 mysq 满足不了 QPS 的需求,所以采用 redis 来存储试卷。
考试试卷采用 redis 存储,并且使用 key-value 数据结构,key 为:学校 id+课程 id+试卷 id, value 为:json 字符串来存储试卷内容。
存储架构设计:
由于读的性能 QPS 需要 4w/s,而单台 Redis 性能为 5~10w 的 TPS,虽然一台 redis 即可满足需求,但是为了保障可靠性因此需要 2 台 redis 实现 1 主 1 从模式。同时引入 sentinal 需要 3 台 Redis。综上至少需要 3 台 redis 服务器。
3.2 提交试卷存储方案设计:
参考 2.4 节计算每年存储考试数据需要 7.45T,因此使用 mysql 和 redis 存储都不合理。采用 Hbase 来存储考试内容和结果。
版权声明: 本文为 InfoQ 作者【miliving】的原创文章。
原文链接:【http://xie.infoq.cn/article/e45afff758ca07524ab77cc3d】。文章转载请联系作者。
评论