写点什么

架构实战训练营|作业|模块 4

用户头像
Frode
关注
发布于: 4 小时前
架构实战训练营|作业|模块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 集群 存储学生考试结果、登录记录、图片信息

试卷方案设计


  1. 老师增加试卷保存到 redis 中

  2. 学生在考试的时候通过试卷 id 获取试卷

  3. 学生作答后提交试卷到 Hbase,并推送到 rocketMq 中

  4. 服务监听试卷答案消息,并保存到 mysql 中

  5. 老师查看学生作答的试卷情况,从 mysql 中获取数据

  6. 老师查看自己作答的情况,从 HBase 获取数据


redis sentinel 要保证服务器的高可用,数据不能丢失。存储的数据容量不是瓶颈,瓶颈在于读的性能


三个 sentinel 节点,三个 redis 主从节点,redis 查询性能 10 万没有问题,但是网络带宽可能存在瓶颈

如果每个试卷按照 10kb,10*5000/1024 = 488M,要保证网络带宽不能被打满,可以考虑使用压缩列表(ziplist)来减少网络带宽的消耗


用户头像

Frode

关注

小步快跑 2019.04.15 加入

不想当架构师的程序员不是好程序员

评论

发布
暂无评论
架构实战训练营|作业|模块4