写点什么

模块 4 作业

作者:miliving
  • 2022 年 1 月 09 日
  • 本文字数:854 字

    阅读完需:约 3 分钟

一、作业要求

设计千万级学生管理系统的考试试卷存储方案

二、考试行为分析以及存储性能估算

对于服务端系统而言考试行为分为两个环节:试卷获取、试卷提交。

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 来存储考试内容和结果。

发布于: 刚刚阅读数: 2
用户头像

miliving

关注

还未添加个人签名 2019.02.26 加入

还未添加个人简介

评论

发布
暂无评论
模块 4 作业