写点什么

架构师实战营:模块四 千万级学生管理系统的考试试卷存储方案

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

需求背景:千万级学生管理系统的考试试卷存储方案

用户量:1000W

 

用户行为建模、估算:

假设每门考试的试题 20 判断题每道题最多 100 字、20 选择题每道题最多 200 字、4 道大题每道题最多 200 字;

一门考试的存储约为 20*100+20*200+4*200=4800 约 5k

假设有 1000 家高校,每家高校最多 500 门课,试卷系统只存放最近 4 年的数据,一年考试 2 次

试卷系统总存储约为:1000*500*5k*4*2 约 20G

假设试卷提前半小时上传到试卷系统,1000*500/(30*60)约 300 TPS

 

根据以上模型得出考试试卷存储方案存储性能需求如下:

1. 根据 PPT 上估算模型,试卷请求 QPS:5 万/s

2. 根据上面估算模型,试卷写入 TPS:300/s

 

1) Redis 的数据结构设计

使用 String 字符串类型,原因如下

一、单个 Value 的存储大小约为 5K,不适合使用其他复杂数据结构;

二、每个试卷都是独立的,试卷之间没有任何关系;

三、试卷 KEY 设计:ex_学校代码_院系代码_课程代码_年_学期

 

2) 具体的读写流程

试卷写入:

1、老师登录管理系统,并选择课程、学期再上传试卷;

2、根据课程关联所属的院校、院系信息并根据当前时间计算学年、学期;

3、打包试卷并包含院校、院系、课程、学年、学期等信息发送给试卷系统;

4、试卷系统根据 3 的基础信息生成 key,向 redis 发起写入申请;

5、Redis 集群进行处理,并返回处理结果。

 

试卷读取:

1、学生登录管理系统,选择考试的课程;

2、根据用户选择的课程以及时间关联院校、院系、学年、学期等信息;

3、向试卷系统申请读取 key: ex_学校代码_院系代码_课程代码_年_学期;

4、Redis 集群进行处理,并返回处理结果。

 

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

理论上 redis 单机就可以支持 5W/QPS 读取,300/TPS 写入,为了保证高可用,和性能冗余方面的考虑,采用 1 主 2 从 3 哨兵的部署方式,共计需要 6 台服务器,redis 集群单机内存 32G 即可满足需求;

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

ifc177

关注

还未添加个人签名 2019.04.19 加入

还未添加个人简介

评论

发布
暂无评论
架构师实战营:模块四 千万级学生管理系统的考试试卷存储方案