模块四 - 考试试卷存储方案
设计千万级学生管理系统的考试试卷存储方案
【作业要求】
基于模块 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 值返回。
版权声明: 本文为 InfoQ 作者【kk】的原创文章。
原文链接:【http://xie.infoq.cn/article/8db0d29124b5aa26c49dc6f88】。未经作者许可,禁止转载。
评论