写点什么

架构训练营 - 模块 4 作业

作者:焦龙
  • 2021 年 11 月 20 日
  • 本文字数:956 字

    阅读完需:约 3 分钟

设计千万级学生管理系统的考试试卷存储方案

【作业要求】

基于模块 4 第 6 课的估算结果和 Redis sentinel 的初步方案设计,完善考试试卷存储方案,具体包括:

• 完善 Redis 的数据结构设计,明确具体使用哪种 Redis 数据结构。

• 设计具体的读写流程(可以文字描述也可以序列图描述,序列图要有文字辅助说明)。

• 对照模块 4 第 6 课的性能估算结果,计算 Redis sentinel 集群的服务器数量和性能。

【提示】

1. 性能可以有一定冗余。

2. 如果对 Redis sentinel 不熟悉,请参考官方文档:https://redis.io/topics/sentinel。

考试用户行为建模和性能估算

【考试】

假设每门学科每年 2 次考试,每个学生平均一学期 20 门课,考试采取机考的方式,每门考试的答案 20 判断题、20 选择题、4 道大题(答案 200 字以内),考试结果永久保存,在校学生能够看到自己曾经的考试结果,则考试结果记录的存储量为:

  • 在校学生:1000 万 * 20(课)* 2(考试次数) * 1000(答案)* 2(学期) * 3(只有前三年考试)= 2.4T。

  • 离校学生:每年 250 万,存储量为 0.6T。


假设学校的考试都安排在某一个月内,考试的时候请求试卷,提交答案,中间答题过程浏览器本地完成,由于考试集中在上午 4 小时和下午 4 小时,且请求试卷集中在考试开始的前 1 分钟,提交答案集中在考试结束前的 30 分钟,因此估算如下:

  • 请求试卷:1000 万 * 20(课)/ 20(周末不考试) / 4(每天 4 堂考试)/ 1 分钟 = 250 万请求/分钟 ≈ 5 万/每秒

  • 提交试卷: 1000 万 * 20(课)/ 20(周末不考试) / 4(每天 4 堂考试)/ 30 分钟 = 1700/每秒。


需求分析

一般考试的时候是直接加载整个试卷,所以需要将所有试卷信息存储到一起,其所需要的存储空间为 2KB,分析如下:

  • 判断题:20*30=600 字节

  • 选择题:20*50=1000 字节

  • 大题:4*100 = 400 字节


数据结构

采用 Redis 的的字符串类型,其详细说明为

Key:学校 ID + 考试 ID。

Value:试卷内容


读写流程

  1. 老师生成试卷,直接按照 key 写入 Redis 主节点。

  2. 学生在考试的时候,从 Redis 从节点读取试卷。

  3. 优化:学生在考试之前 5 分钟内,可以在后台加载试卷,然后在考试的时候再统一展示。这样可以降低考试系统请求峰值。

机器预估

对于考试系统来说,虽然单个 Redis 可以承载考试的请求量,但是为了提高整个考试系统的可用性,需要采用 Redis Sentinel 的方式部署 Redis 集群。最后机器数量设置为 3 个,每台机器同机部署 Redis 和 Sentinel 节点。


用户头像

焦龙

关注

还未添加个人签名 2017.12.20 加入

还未添加个人简介

评论

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