架构实战训练营|作业|模块 4
1. 设计千万级学生管理系统的考试试卷存储方案
【作业要求】 基于模块 4 第 6 课的估算结果和 Redis sentinel 的初步方案设计,完善考试试卷存储方案,具体包括:
• 完善 Redis 的数据结构设计,明确具体使用哪种 Redis 数据结构。
• 设计具体的读写流程(可以文字描述也可以序列图描述,序列图要有文字辅助说明)。
• 对照模块 4 第 6 课的性能估算结果,计算 Redis sentinel 集群的服务器数量和性能。
【提示】
1. 性能可以有一定冗余。
2. 如果对 Redis sentinel 不熟悉,请参考官方文档:https://redis.io/topics/sentinel
2. 性能估算
存储性能估算:
试卷的存储很小,几百张试卷题目即可
查询性能估算:
假设学校的考试都安排在某一个月内,考试的时候请求试卷,提交答案,中间答题过程浏览器本地完成,由于考试集中在上午 4 小时和下午 4 小时, 且请求试卷集中在考试开始的前 1 分钟,提交答案集中在考试结束前的 30 分钟,因此估算如下:
• 请求试卷:1000 万 * 20(课)/ 20(周末不考试) / 4(每天 4 堂考试)/ 1 分钟 = 250 万请求/分钟 ≈ 5 万/每秒。
写性能估算:
• 提交试卷: 1000 万 * 20(课)/ 20(周末不考试) / 4(每天 4 堂考试)/ 30 分钟 = 1700/每秒。
3. 方案设计
整体设计
redis sentinel 作为试卷存储和访问
myql 集群 存储老师课程考试结果,学生基本信息
HBase 集群 存储学生考试结果、登录记录、图片信息
试卷方案设计
老师增加试卷保存到 redis 中
学生在考试的时候通过试卷 id 获取试卷
学生作答后提交试卷到 Hbase,并推送到 rocketMq 中
服务监听试卷答案消息,并保存到 mysql 中
老师查看学生作答的试卷情况,从 mysql 中获取数据
老师查看自己作答的情况,从 HBase 获取数据
redis sentinel 要保证服务器的高可用,数据不能丢失。存储的数据容量不是瓶颈,瓶颈在于读的性能
三个 sentinel 节点,三个 redis 主从节点,redis 查询性能 10 万没有问题,但是网络带宽可能存在瓶颈
如果每个试卷按照 10kb,10*5000/1024 = 488M,要保证网络带宽不能被打满,可以考虑使用压缩列表(ziplist)来减少网络带宽的消耗
评论