模块四 - 千万级学生管理系统考试试卷存储方案
【要求】
基于模块四第 6 课的估算结果和 Redis sentinel 的初步方案设计 ,完善考试试卷存储方案,具体 包括 :
完善 Redis 的数据结构设计,明确具体使用哪种 Redis 数据结构;
设计具体的读写流程;
对照模块四第六课的性能估算结果,计算 Redis Sentinel 集群的服务器数量和性能;
【参考文档】
https://redis.io/topics/sentinel
业务场景
学生预估为 1000w,假设平均分布在 4000 个学校中,每个学生平均一学期 20 门课,每门学科每年 2 次考试;
考试采取机考的方式 ,每门考试的为 20 判断题,20 选择题,4 道大题(答案 200 字以内),试卷查询 QPS 为 5w/s;
考试结果永久保存,在校学生能够看到自己以往的考试结果;
试卷数据结构
key:由学校 id+年份+学科 id 组成;
value: 题目 JSON 格式的集合;
题目:主要字段包括学科 id,题号,类型,题目,选项,参考答案;
读写流程
写流程
学校教师登录系统管理后台,后台列举当前教师所有可编辑录入考试试卷列表;
教师在更新考试试卷内容并提交;
系统后台获取当前学校 id,年份及学科 id,以及题目内容保存/更新到 redis 中;
Redis 定期将考试内容持久化到本地中;
读流程
学生登录考试系统,请求获取当前考试内容;
后台根据当前学校 id,年份,学科 id,查找试卷内容,去除答案后返回前端给学生;
性能需求
假设每年每个学校的同一科上试卷均不相同,redis 中只保存一学期试卷,其中:
平均每份试卷内容为 30KB,每年试卷总数=4000(学校)*20(科)*30KB≈2.3GB,考虑一定的冗余,则服务器内存设计为 4GB。
根据官网参考资料https://redis.io/topics/benchmarks ,单机即可满足 5w/s 的 QPS,则可设计为 3 台 Redis 服务器组成集群即可。
版权声明: 本文为 InfoQ 作者【圈圈gor】的原创文章。
原文链接:【http://xie.infoq.cn/article/5142714e2db2d86146f404413】。未经作者许可,禁止转载。
评论