写点什么

模块 4 - 千万级学生管理系统的考试试卷存储方案

用户头像
小遵
关注
发布于: 2021 年 05 月 23 日

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

【作业要求】

基于模块 4 第 6 课的估算结果和 Redis sentinel 的初步方案设计,完善考试试卷存储方案,具体包括:

1)完善 Redis 的数据结构设计,明确具体使用哪种 Redis 数据结构

2)设计具体的读写流程(可以文字描述也可以序列图描述,序列图要有文字辅助说明)

2)对照模块 4 第 6 课的性能估算结果,计算 Redis sentinel 集群的服务器数量和性能

【提示】

1. 性能可以有一定冗余


一、存储性能估算


  1. 用户量:

  • 学生预计 1000w。

  1. 行为:

  • 试卷的读取,试卷的提交

  1. 存储容量估算:

  • 截至 2020 年 6 月 30 日,全国高等学校共计 3005 所,2019 年录取人数 835 万,目标用户 250 万,预计接入系统的大学为 1000 所,在校大学生 1000 万。

  • 截至 2019 年中国大学共有 13 个学科,61 个大学专业类,506 个大学专业,预计平均每个学校有 300 个专业,每门专业 20 门课,每门课每年考 2 次

  • 在校大学生提交试卷:1000 万*20(课)*2(考试次数)*1000(答案字符数)*2(学期)*3(只有前 3 年考试)=2.4T

  • 离校学生:在校学生的 1/4,也就是 0.6T 的存储量。每年增长 0.6T。


  1. 性能估算:

  • 请求试卷:1000 万*20(课)/20(周末不考试)/4(每天 4 门考试)/1(分钟内下载好卷子) = 250 万请求/分钟 ~= 5 万/秒。QPS=50kps

  • 提交试卷:1000 万*20(课)/20(周末不考试)/4(每天 4 门考试)/30(分钟内提交) = 1700/秒。TPS=1.7kps.


二、存储系统选择

  1. 单机能否存储所有数据?

  • 不能,需要分片主从部署,所以采用分片主从架构。

  1. 试卷存储和访问因为需要缓存,所以采用 Redis 的 sentinel 方案,分片集群的方式。


三、存储方案设计

  1. 存储方案选择 Redis sentinel 方案

  2. 数据结构设计

  • Key:试卷 ID+学校 ID+学生号 ID+date

  • Value: 试卷内容

采用 sorted_set,value 采用 Redis 的 sorted_set 类型数据结构。

  • 读写分析

  • 读 key 的方式,拿到 value

  • 存储试卷时,如果 key 已经存在,直接覆盖即可。不存在就新增。

  • 有效期为 1 年,1 年后,放到冷数据库即可。

  • 集群机器数量估算

  • 预估 5 台机器

  • 1 台 master

  • 1 台 slave

  • 主从模式的升级

  • 3 台 sentinel 哨兵

  • 奇数个哨兵用于故障切换时投票,3 台差不多够了。

  • 客观下线后,发生故障迁移,哨兵服务器被推选为主服务器,迁移数据到新主服务器。

  1. 服务器数量分析

  • 由于读性能需要 5 万/秒,而单台 Redis 性能为 5-10 万,因此至少需要 2 台 Redis,为保障可靠性,因此需要 3 台 Redis 实现 1 主 2 从模式。

  • 同时引入 sentinal 需要 3 台 Redis。但是可以把 sentinel 和 redis 部署在同一台机器上,因此最后需要 3 台服务器。


用户头像

小遵

关注

还未添加个人签名 2018.06.16 加入

还未添加个人简介

评论

发布
暂无评论
模块 4 - 千万级学生管理系统的考试试卷存储方案