写点什么

架构实战营 - 模块四作业

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

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

作业要求:

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

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

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

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


1.1 千万级学生管理系统考试试卷存储性能需求估算

1.1.1 存储量评估

假设每门学科每年 2 次考试,每个学生平均一学期 20 门课,考试采取机考的方式,每门考试的答案 20 判断题、20 选择题、4 道大题(答案 200 字以内),考试结果永久保存,在校学生能够看到自己曾经的考试结果,则考试结果记录的存储量为:

在校学生:1000 万* 20(课)* 2(考试次数) * 1000(答案)* 2(学期) * 3(只有前三年考试)= 2.4T

离校学生:每年 250 万,存储量每年增长 0.6T

1.1.2 请求量评估

假设学校的考试都安排在某一个月内,考试的时候请求试卷,提交答案,中间答题过程浏览器本地完成。由于考试集中在上午 4 小时和下午 4 小时,且请求试卷集中在考试开始的前 1 分钟,提交答案集中在考试结束前的 30 分钟,因此估算如下:

请求试卷:1000 万* 20(课)/ 20(周末不考试) / 4(每天 4 堂考试)/ 1 分钟 ≈ 5 万/每秒

提交试卷: 1000 万* 20(课)/ 20(周末不考试) / 4(每天 4 堂考试)/ 30 分钟= 1700/每秒

1.2 千万级学生管理系统考试试卷存储系统选择

依据评估的存储量和请求量,单机可以存储所有数据,单机可以支撑写性能,单机可以支撑读性能,需要自动切换,决定采用 Redis sentinel 的存储方案。

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

1.3.1 数据结构设计

基于 sorted set 有序,且数据不重复的特性,选择 sorted set 数据结构

考试试卷结构:

key:学校 ID + 课程 ID + 学期

score:题号

value:相应题号的题目以 string 存储

试卷答案结构:

key:学校 ID + 课程 ID + 学期+ 学号

score:题号

value:相应题号的题目和答案以 string 存储

1.3.2 读写流程

老师写出题试卷:

老师出题时,以"学校 ID + 课程 ID + 学期"为 key,将每道题写入到 redis。采用 sorted set 结构,题号为 score,题目内容为 value。


学生读出题试卷:

学生答题时,以"学校 ID + 课程 ID + 学期"为 key,获取考试试卷。


学生写答案试卷:

学生将答题试卷,以"学校 ID + 课程 ID + 学期+ 学号"为 key,将题目和答案存储到 redis 中。


老师读答案试卷:

老师 scan 获取所有学生的试卷,进行批改,批改之后重新写回。

1.3.3 Redis sentinel 集群

  1. redis 性能量级:单机 TPS 5~10 万

  2. 考试试卷请求量:请求 TPS 5 万/s

依据 redis 的性能量级和考试试卷请求量级,且保障系统的高性能和高可用,采用一主两从三哨兵的 Redis sentinel 架构。

​ 编辑删除


发布于: 2021 年 05 月 23 日阅读数: 26
用户头像

Sun

关注

还未添加个人签名 2018.09.17 加入

还未添加个人简介

评论

发布
暂无评论
架构实战营 - 模块四作业