写点什么

模块四 - 考试试卷存储方案

用户头像
kk
关注
发布于: 13 小时前

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

【作业要求】

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

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

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

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

【提示】

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

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

架构实战训练营模块四作业

原文链接: https://xie.infoq.cn/article/4a0df794563fd582b9f0c3ac9


一:系统约束

根据前期业务分析及估算,本文的主要约束有:

1)用户量估算:1000 万

2)考试结果记录存储量:

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

则考试结果记录的存储量为:

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

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

3)试卷的存储访问:

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

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

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


总结如下:

1.在校学生考试结果存储:2.4T;

2.离校学生考试结果存储:每年增长 0.6T;

3.试卷请求 QPS:5 万/s

4, 提交试卷 TPS:1700/s


二:存储方案设计:

考试系统整体存储架构图如下:


这里我们采用 Redis sentinel 用来存储试卷,并提供试卷数据的访问。

接下来我们将细化 试卷存储部分的数据存储方案。

三:试卷存储和访问。

Redis 是开源的高性能内存 key-value 数据库,可以提供食物和持久化支持,并提供 TTL(time to life)服务。

在本系统中, 根据业务查询特征,我们设计如下:

1.key 中应该包含的信息包括,考试日期,学校 ID,年级(班次)ID, 课程 ID。

2.value 中应该包含试卷的具体内容。

key, 采用 Redis 中的 List

value, 为了方便前端服务加载,及扩展和可读性,采取 json 数据格式。

四:读写流程

老师在后台管理中提交试卷题目,按照 Key = 考试日期,学校 ID,年级(班次)ID, 课程 ID ,Value 为具体试卷内容保存到 Redis 中。

考生在加载考试试卷的时候,根据考试日期,学校 ID,年级(班次)ID, 课程 ID, 寻找 Redis 中保存的 Value 值,将 Value 值返回。


发布于: 13 小时前阅读数: 6
用户头像

kk

关注

还未添加个人签名 2018.12.04 加入

还未添加个人简介

评论

发布
暂无评论
模块四-考试试卷存储方案