华仔架构训练营作业(模块四)
设计千万级学生管理系统的考试试卷存储方案
【作业要求】基于模块 4 第 6 课的估算结果和 Redis sentinel 的初步方案设计,完善考试试卷存储方案,具体包括:
1)完善 Redis 的数据结构设计,明确具体使用哪种 Redis 数据结构
2)设计具体的读写流程(可以文字描述也可以序列图描述,序列图要有文字辅助说明)
3)对照模块 4 第 6 课的性能估算结果,计算 Redis sentinel 集群的服务器数量和性能
【提示】性能可以有一定冗余如果对 Redis sentinel 不熟悉,请参考官方文档: https://redis.io/topics/sentinel
审题
1.数据存储选用 Redis sentinel 做数据存储
2.服务对象千万学生
3.设计 Redis 存储试卷的设计结构
4.需要进行性能估算,服务器数量和性能可以有一定的冗余
存储选择-Redis sentinel
1.估算性能需求
用户量预估
1000 学生
用户行为建模
考试试卷获取
学生试卷提交
阅卷(老师阅卷、机器阅卷)
存储量
每门 20 判断、20 选择、4 大题
试卷:20 课*AB 卷*1kb=40kb
在校学生答案:1000 万*20(课)*2(期末期中)*1kb(40+200*4*2)*2 学期*3 年考试≈2.4T
离校学生:0.6T
学生信息和试卷结果存储的关系以及考试聚合成绩结果:层级学校->专业>年级->学生 预估 10GB 内存
性能需求计算
请求试卷:1000 万*20(课)/20(周末不考试)/4(每天 4 门考试)/1 分钟=250 万请求/分钟≈5 万/每秒
提交试卷:1000 万*20(课)/20(周末不考试)/4(每天 4 门考试)/30 分=1700/每秒
机考阅卷:1000 万*20(课)/20(周末不考试)/4(每天 4 门考试)/非考试期间 8 小时≈87/每秒
汇总
1.在校考试存储:2.4T
2.离校考试结果存储:0.6T
3.请求试卷 TPS:5w/s
4.提交试卷 TPS:1700/s
5.阅卷 TPS:87/s
2.选择存储系统
压力在试卷的读取
Redis sentinel 试卷内容
历史数据结果保存在 mongodb
3.设计存储方案
试卷使用 redis 的 String 数据结构(key 试卷编号,value 试卷内容)
答案使用 redis 的 Hash 存储数据结构(key 学生编号_学科编号_其他)
嵌套聚合关系 redis 使用 set 数据结构存储
Redis 单机已可支持 5 万+的 KV 读取 QPS
Redis sentinel 3 台,保证自身高可用
Redis 1 主 2 从 共 3 台, 每台内存配置 16GB
评论