模块四 - 千万级学生管理系统试卷存储方案
性能需求评估
用户量评估
1000 万学生
业务建模
试卷存储主要涉及以下业务场景:
老师-考前提交 &修改试卷
学生-考前 1 分钟读取试卷
学生-考试中临时保存答案
学生-最终提交答案
老师-评阅答案并打分
学生-查看考试成绩
性能评估
几点假设
考试课程:
每个学生每年参加 20 门课程考试
每个课程 20 判断题、20 选择题、4 道大题(答案 200 字以内),每个题目 50 中文字,大题答案 100 中文字
每次考试 90 分钟
考试时间:
考试开始时间集中在上午 8 点、上午 10 点、下午 2 点、下午 4 点、晚上 7 点,5 个时间点
考试在 1 个月内完成
提交试卷:
学生每 5 分钟临时保存答案一次
学生每次考试都在最后 30 分钟全部交卷
阅卷打分
5 天内完成,每天阅卷 8 小时
学生查阅成绩
阅卷完成次日的一天 12 小时
性能评估
存储量(JSON 存储):
试卷存储:4 个年级*20 门课程*(20 选择+20 判断+4 大题)*50 中文字*3Byte 每字=4*132000Byte=516Kb,如果考虑历史数据,大四 4 次、大三 3 次……516Kb*(4+3+2+1)=5MB(约等)
答案存储:1000 万*20 门课程*(20 选择*2Byte+20 判断*2Byte+4 大题*100 中文字*3Byte)=250G(约等),如果考虑历史数据,大四 4 次、大三 3 次……250G*(4+3+2+1)=2.5T(约等)
读性能
老师考前读试卷:可忽略
学生考前 1 分钟读试卷:20 门课程*1000 万*1 分钟/60S/20 天/5 次=4 万/秒(约等)
老师评阅试卷并打分:1000 万*20 门课程/5 天/8 小时/60 分钟/60 秒=1500/秒(约等)
学生查阅评分及打分结果:1000 万/5 天/12 小时/60 分钟/60 秒=50/秒(约等)
写性能
学生考中临时保存答案:20 门课程*1000 万*(90 分钟/5 分钟)/20 天/5 次/90 分钟/60 秒=7000/秒(约等)
学生最终提交答案:20 门课程*1000 万/20 天/5 次/30 分钟/60 秒=1500/秒(约等)
老师阅卷并打分:1000 万*20 门课程/5 天/8 小时/60 分钟/60 秒=1500/秒(约等)
性能汇总
试卷
存储量:答案总 5MB,每年 516Kb 增长
读性能:学生读试卷 4 万/秒
答案
存储量:答案总 2.5T,每年 0.5T 增长
读性能:老师评分读 1500/秒
写性能:学生保存答案 7000/秒,老师评分 1500/秒
存储系统指标分析
单机存储量、单机写性能、单机读性能、自动切换、分区架构
存储方案设计
主流技术的指标假设
Linux 最大连接数 10 万
Nginx 每秒 2-3 万并发
Web 容器最大并发线程 100 个,每秒可处理请求 1000 个
Redis 每秒 5-10 万读
MySQL 每秒最高 2000TPS
HBase 四台 32 核主机每秒插入 70000 条,读取大约是 25000 条,扫描 100 条以内记录,每秒 15000 条(读取比写入慢?)
试卷存储分析
存储架构
存储结构
MySQL 试卷表
Redis KV
Key:examin_paper 的主键 ID
Value:exmin_paper 的 content
过期时间:考试结束后 1 小时
写入时间:考试试卷开始前 10 分钟
答案存储分析
存储架构
存储结构
MySQL 答案表及答案评分表
HBase Key-Columns
Key:学生 ID+试卷 ID
Columns:得分、试卷内容 JSON、考生答案
附录
Redis 各 CPU 架构下 TPS 估值(官网)
数据传输时延比对表(华仔架构课程)
版权声明: 本文为 InfoQ 作者【彬】的原创文章。
原文链接:【http://xie.infoq.cn/article/e43d9e29b6674780eb9161258】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论