【模块四】千万级学生管理系统考试试卷存储方案设计
前言
本文是学生管理系统的考试试卷存储方案架构设计文档,用于指导学生管理系统后续的开发、测试和运维。
1. 业务背景
实现一个可管理千万级别学生的学生管理系统,本文档主要设计考试试卷的存储方案。
假设每门学科每年 2 次考试,每个学生平均一学期 20 门课,考试采取机考的方式,每门考试的答案 20 判断题、20 选择题、4 道大题,假设学校的考试都安排在某一个月内,考试的时候请求试卷,提交答案,中间答题过程浏览器本地完成,考试集中在上午 4 小时和下午 4 小时,且请求试卷集中在考试开始的前 1 分钟,提交答案集中在考试结束前的 30 分钟。
2. 总体架构
考试试卷的存储需求为:
一张试卷大小约为 5000 字节。
•请求试卷:1000 万* 20(课)/ 20(周末不考试)/ 4(每天 4 堂考试)/ 1 分钟= 250 万请求/分钟≈ 5 万/每秒。
•提交试卷:1000 万* 20(课)/ 20(周末不考试)/ 4(每天 4 堂考试)/ 30 分钟= 1700/每秒。
根据架构选型结果,使用 Redis Sentinel 部署 Redis 集群存储试卷和访问试卷。
3. 方案设计
3.1 Redis 数据结构
数据结构采用 Hashtable,时间复杂度是 O(1)。
Key:学校 ID +学院 ID + 课程 ID +学期 ID +期中/期末
Value:试卷内容
3.2 读写流程
1.老师登录并录入试卷内容,按照 key 存储试卷内容到 redis 集群。
2.系统为学生安排考试科目,考试时学生登录并进入相应科目的考试页面,系统根据 key 读取试卷内容。
3.3 Redis sentinel 集群的服务器数量和性能
Redis 单机 TPS 为 5~10w/s,请求试卷的 TPS 为 5w/s,带宽需要 5 万*5000B=250MB/s。
所以单台 redis,基本可以满足需求。但是为了高可用,引入 redis sentinel,一般最少为 3 节点,这样整个集群的性能可以到 15w/s。
评论