千万级学生管理系统的考试试卷存储方案
【作业要求】
基于模块 4 第 6 课的估算结果和 Redis sentinel 的初步方案设计,完善考试试卷存储方案,具体包括:
• 完善 Redis 的数据结构设计,明确具体使用哪种 Redis 数据结构。
• 设计具体的读写流程(可以文字描述也可以序列图描述,序列图要有文字辅助说明)。
• 对照模块 4 第 6 课的性能估算结果,计算 Redis sentinel 集群的服务器数量和性能。
一、Redis 数据结构设计:
1、试卷题目存储数据结构设计
• 使用 redis String 数据结构
• key: 课程号 + 试卷编号(根据场景,每门课程每次考试都有唯一的试卷编号)
• value: 试卷内容
2、试卷答案存储数据结构设计
• 使用 redis Hash 数据结构
• hashKey: 课程号 + 试卷编号
• hashValue:试卷答案。
二、读写流程
1、将考试题目,考试答案存储在 HBASE。
2、Redis 中存储当天的考试题目,及考试答案(只含选择题、判断题答案)。
3、考生考试时先从 redis 里读取考试试题并返回页面展示。
4、考生答题完成后提交试试卷,插入该考生答题记录,具体答题信息写入 HBASE,异步触发对比选择题答题、判断题答案,并将结果写入对应考生考试记录中。
5、老师评分,查询 HBASE,将提取填空题和问答题进行评分,并将结果同步到 HBASE 及 MySQL 中。
三、性能估算
1、试卷请求 QPS 高达 5W/s,而单台 Redis QPS 可达 8W/s。因此需要考虑对试卷内容进行缓存,同时评估缓存容量。
2、根据网上查询:全国大致 3000 大学,500 专业课,平均每个学校估算开设 100 个专业,考虑到每个院校专业试卷不一样,一次考试生成大约 30W(3000 所院校*100 门专业)套试卷,每天大约 1.5W 套(30W 试卷/20 天)试卷,每天存储大约为 1.5G(1.5W 套*100KB),,考虑到单台 Redis 数据量内存为 2-4G,因此 Redis 缓存无需考虑缓存分片,单机存储即可,考虑到高可用需要,Redis 最终方案选择为 Redis Sentinel(两台 Redis:一台主 Redis,一台从 Redis。Sentinel 服务器为三台)。
评论