千万级学生管理系统考试试卷存储方案设计
1. 说明
本文是架构实战营第四周作业。由于作业与课程内容相关,涉及到的上下文这里大概描述一下,细节不做赘述。
2. 背景
已知学生管理系统的学生用户量数量在 1 千万上下,业务场景是考试发试卷。假设考试安排在浏览器端进行,考试前 1 分钟才可以查看试卷内容。根据考试安排,计算出请求试卷的 QPS 为 5 万,提交试卷的 TPS 为 1700。根据架构选型结果,使用 Redis Sentinel 部署 Redis 集群存储试卷信息(无需考虑考试结果存储)。
3. 方案设计
3.1 数据结构设计
数据类型:Redis String
key:collegeId:#{collegeId}:courseId:#{courseId}:term:#{term}:midtermOrFinal:#{midtermOrFinal}
value:#{testPaperContent}
3.2 读写分析
老师在考试前录入试卷内容,系统拼接 key 存储为 String 类型。
学生登录并进入相应科目考试页面,系统根据 key 读取试卷内容。
3.3 设计存储方案
由于读取试卷 QPS 5 万估算的用户量是按 1000 万在校学生最大值计算的,所以可以认为 5 万即是有一定冗余量的均值 QPS。考虑开卷前 1 秒的“秒杀效应”,峰值按 3 倍估算,即 15 万 QPS。 Redis Sentinel 集群考虑使用 1 主 1 从加上 3 台哨兵节点,客户端对读请求通过轮询、加权轮询等算法实现负载均衡。
版权声明: 本文为 InfoQ 作者【Hesher】的原创文章。
原文链接:【http://xie.infoq.cn/article/3af6b0f332a0aa001b6e69a14】。文章转载请联系作者。
评论