写点什么

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

作者:Jadedev
  • 2022 年 5 月 01 日
  • 本文字数:1378 字

    阅读完需:约 5 分钟

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

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

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

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

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


前置分析

用户行为建模和性能估算 - 试卷

课程数量预估:

2021 年,全国共有高等学校 3012 所,其中,普通本科学校 1238 所;本科层次职业学校 32 所;高职(专科)学校 1486 所;成人高等学校 256 所。各种形式的高等教育在学总规模 4430 万人,高等教育毛入学率 57.8%。

全国普通、职业本专科共招生 1001.32 万人,其中,普通本科招生 444.60 万人;职业本科招生 4.14 万人;高职(专科)招生 552.58 万人。

全国普通、职业本专科共有在校生 3496.13 万人,其中,普通本科在校生 1893.10 万人;职业本科在校生 12.93 万人;高职(专科)在校生 1590.10 万人。

全国共有高等教育专任教师 188.52 万人,其中,普通本科学校 126.97 万人;本科层次职业学校 2.56 万人;高职(专科)学校 57.02 万人;成人高校 1.97 万人。

估算: 每个学校 教师 700 人 学生 2 万 人。

千万级学生管理系统 得出 500 所 学校

试卷内容预估:英语考试内容最大 100 KB

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

因此估算如下:

• 试卷: 100 KB * 20 (课) * 3(只有前三年考试)* 500 所 ≈ 3G ≈ 5G

• 创建试卷:教师创建 时间可在 考试前即可。

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

• 提交试卷: 存储结果即可,可用 Hbase 集群。

存储性能需求汇总

试卷存储: 5 G

试卷请求 QPS:5 万/s;

试卷存储架构


Redis 数据结构设计

试卷信息表

key:学校 ID+课程 ID+考试 ID

vaue: hash 对象,存储试卷题目信息

读写流程

教师发布考试:

登录系统

创建试卷:先从题库中,创建试卷,生成试卷 ID

创建考试:选取试卷 ID,并设置考试时长、要求、试卷、名称等信息,存储到考试信息表中,指定参加考试的学生,建立学生、考试关系表,存储到 MySQL 集群

发布试卷:以学校 ID+课程 ID+考试 ID 作为 key ,试卷题目列表作为值,存储到 Redis 数据库中,设置考试状态为已发布,不让修改考试信息。


学生参加考试:

登录系统

获取考试信息:根据 学校 ID+学号 ID+课程 ID 获取考试信息,主要包含考试 ID,考试时间,考试时长,考试名称,考试要求等信息,等待考试开始

获取试卷信息:考试开始后,根据 学校 ID+课程 ID+考试 ID 获取试卷信息

缓存答题结果:本地实时缓存用户的答题 result,确保系统异常退出后能恢复

提交答案:学生提交考试题目答案,直接按照 key(学校 ID+考试 ID+学生 ID) 保存 result


Redis sentinel 集群设计与分析

试卷请求 QPS 为 5 万/s,Redis 单机读取性能为 11W,因此单机就可以满足读取性能要求,为了保证高可用和自动切换,使用 Sentinel,为了保证出现出从切换仍然是高可用,可以设计整个 Redis 集群为 3 台服务器,一主两从,同时为了保证 Sentinel 的高可用,也是用三台服务器组成 Sentinel 集群。


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

Jadedev

关注

业精于勤荒于嬉 2022.02.08 加入

Jadedever 走在学习路上的开发者

评论

发布
暂无评论
M4: 设计千万级学生管理系统的考试试卷存储方案_架构实战营_Jadedev_InfoQ写作社区