模块四
考试试卷存储方案
试卷分析
考试试卷的题型分为判断题、选择题、简答题,一般试卷会安装判断题、选择题、简答题的顺序来进行出题,各个题型内部一般按照由易到难的顺序进行出题,题目不能重复。所以在题型部分采用 hashtable 数据结构,key 为题型,value 为题型对应的题目列表,由于题型内部要按照由易到难的顺序进行出题,所以 value 部分采用 sorted set 数据结构,按照难易程度进行排序。由于 redis 不支持数据结构嵌套,所以使用试卷 ID+题型为 key,value 为题型对应的试题有序 set。
数据结构设计
试卷 ID+判断题:(题目 1,题目 2,题目 3 …)
试卷 ID+选择题:(题目 1,题目 2,题目 3 …)
试卷 ID+简答题(题目 1,题目 2,题目 3 …)
读写分析
老师生成试卷
老师可以根据课程生成考试,一般会按照题型的顺序进行试卷生成,并将试卷保持到 redis 中。
学生请求试卷
开始考试之后,学生会登录到考试页面请求考试题目,考试模块会根据当前考试的 ID 请求对应的试卷,按照判断题、选择题、简答题的顺序返回给前端页面,前端页面会缓存当前考试题目,页面刷新或者重开不需要再次请求考试题目。
考试性能估算
1. 在校学生考试结果存储:2.4T;
2. 离校学生考试结果存储:每年增长 0.6T;
3. 试卷请求 QPS :5 万/s;
4. 提交试卷 TPS :1700/s。
假设平均每学期每学科考两次试,每个学生每学期修 20 门课,一次考试按照 20 个判断题,20 个选择题,4 个简答题来计算,每个题目正文平均为 60 个字符。
每次试卷请求大小 (20 + 20 + 4)* 60 = 2640
每秒请求数据大小 2640 * 50000 = 132Mbps
每年试卷存储大小 2 * 20 * (20 + 20 + 4)* 60 = 105600
Redis 单机性能量级:TPS 大概为 8 万/秒,QPS 大概为 10 万/秒
从估算的请求数据大小、qps 来看单机也可以满足性能要求,由于试卷一般都是提前生成,所以可以不考虑写入的情况,但是考试一般时间较短,需要考虑高可用防止出现单节点故障,所以可以考虑 redis sentinel 部署模式,让 Sentinel 来监控 redis 集群实例的状态,并提供自动故障迁移功能。
Redis sentinel 部署架构
版权声明: 本文为 InfoQ 作者【江南巴飞特】的原创文章。
原文链接:【http://xie.infoq.cn/article/c234b500d91bf32bd3333b381】。未经作者许可,禁止转载。
评论