架构作业 4- 千万级学生管理系统的考试试卷存储方案
作业内容
【作业要求】
基于模块 4 第 6 课的估算结果和 Redis sentinel 的初步方案设计,完善考试试卷存储方案,具体包括:
• 完善 Redis 的数据结构设计,明确具体使用哪种 Redis 数据结构。
• 设计具体的读写流程(可以文字描述也可以序列图描述,序列图要有文字辅助说明)。
• 对照模块 4 第 6 课的性能估算结果,计算 Redis sentinel 集群的服务器数量和性能。
【提示】
1. 性能可以有一定冗余。
2. 如果对 Redis sentinel 不熟悉,请参考官方文档:https://redis.io/topics/sentinel。
存储总体方案
试卷存储方案设计(Redis Sentinel)
存储结构设计
【需求分析】
试卷场景可能存在两种情况:
一种是固定试卷,由教师编写好题目。再有学生获取试卷内容进行答题。
一种是随机试卷,由系统根据针对每个学生在题库中抽取题目,生成试卷。
由于试卷的题目一般都是有顺序的,且学生在答题过程中,可能会回到之前答过的题目进行回答。所以考虑使用 Sorted Set 结构对试卷题目进行存储。
Sorted Set 结构,内部的元素会按照权重 score 进行排序,可以得到每个元素的名次,还可以通过 score 的范围来获取元素的列表。
学生试卷后可能存在,根据题库随机出题的情况。
【数据结构设计】
Key :学校 ID + 学科 ID。
value:{ 题目 json,题目 json,题目 json,...}
权重:{1,2,3,...}
【读取写流程】
学生根据学校 ID 和学科 ID 查询该学科的考试题目
学生可更具学校 ID,学科 ID,权重(题目序号)查询单个题目的信息。
服务器数量
性能需求
1. 试卷请求 QPS:5 万/s;
2. 提交试卷 TPS:1700/s。
Redis 性能参考
Redis 的单机性能达到 10 万 QPS
设计
采用 Redis Sentinel 架构。使用三台 ECS 服务器,以保证 Redis 服务的可用性。
版权声明: 本文为 InfoQ 作者【梁山伯】的原创文章。
原文链接:【http://xie.infoq.cn/article/8350a1b2034e9eef68df6fda4】。未经作者许可,禁止转载。
评论