写点什么

模块四作业

作者:小鹿
  • 2021 年 11 月 21 日
  • 本文字数:967 字

    阅读完需:约 3 分钟

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

【作业要求】

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

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

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

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

【提示】

1. 性能可以有一定冗余。

2. 如果对 Redis sentinel 不熟悉,请参考官方文档:https://redis.io/topics/sentinel


估算结果

【登录】

1. 登录次数:3000/s

2. 登录记录:存储数据量 36 亿条,存储容量 43G,写入 TPS = 登录 TPS = 3000/s,读取 TPS 无需特别设计。

【注册】

1. 注册 TPS = 3/s,可以忽略不计;

2. 在校学生数据存储:基本数据 = 2G,图片数据 = 10T

3. 离校学生数据存储:基本数据每年增长 500M,图片数据增长 2.5T

【考试】

1. 在校学生考试结果存储:2.4T

2. 离校学生考试结果存储:每年增长 0.6T

3. 试卷请求 QPS:5 万/s

4. 提交试卷 TPS:1700/s

Redis sentinel 初步方案设计


数据结构设计

Redis 的数据结构选型: Hashtable

试卷数据结构:

key: 学校 ID+试卷 ID+试卷+时间戳

value: 试卷(每门学科每年 2 次考试每个学生平均一学期 20 门课20 判断题、20 选择题、4 道大题

试卷答案数据结构:

key: 学校 ID+试卷 ID+试卷答案+时间戳

value: 试卷答案(每门学科每年 2 次考试每个学生平均一学期 20 门课20 判断题、20 选择题、4 道大题

结构伪代码:

//试卷TestPaper{List<String>  judgmentQuestions; //判断题List<String> choiceQuestions;//选择题List<String> bigQuestions;//大题}//试卷答案TestPaperAnswer{List<Boolean>  judgmentAnswers; //判断题List<Integer> choiceAnswers;//选择题List<String> bigAnswers;//大题}
复制代码


读写流程

  1. 试卷存储:试卷存储至 mysql 。

  2. 试卷同步:mysql 中的试卷同步至 redis 中。

  3. 试卷限时:根据考试时间,限制 redis 的有效时间。

  4. 读卷请求:学生的读卷请求访问 redis 节点的缓存数据。

  5. 试卷提交:学生提交试卷时,先把试卷答案存至 redis,再定时存储至 Mysql。

集群的服务器数量和性能

考试的读取为 5 万 QPS,单台 redis 的性能一般为 5W-10W(QPS)之间。为了保证高可用,最少为 3 节点。因此,需要 3 台机器,读写性能 大致在 15 W QPS

用户头像

小鹿

关注

还未添加个人签名 2020.04.16 加入

还未添加个人简介

评论

发布
暂无评论
模块四作业