写点什么

模块四作业 - 设计千万级学生管理系统的考试试卷存储方案

  • 2022 年 3 月 06 日
  • 本文字数:715 字

    阅读完需:约 2 分钟

1. 业务背景

学生数 1000 万,门学科每年 2 次考试,每个学生平均一学期 20 门课,考试采取机考的方式,每门考试的答案 20 判断题、20 选择题、4 道大题(答案 200 字以内)

2. 性能估算

•请求试卷:1000 万* 20(课)/ 20(周末不考试)/ 4(每天 4 堂考试)/ 1 分钟= 250 万请求/分钟≈ 5 万/每秒。

•提交试卷:1000 万* 20(课)/ 20(周末不考试)/ 4(每天 4 堂考试)/ 30 分钟= 1700/每秒。


3. 存储方案

3.1 试卷的 Redis 数据结构:String

  • Key:考试 ID

格式:学校 ID +课程 ID + 4 位学年+ 1 位学期标志(0:上学年;1:下半学年)+ 1 位考试标志(0:平时测试;1:期中测试;2:期末测试)+8 位考试日期

  • Value:json 字符串

格式:

{

“Q_count”:”44” 

“Q_list”: [

{

“Q_type”:”1”,

“Q_No”:”1”,

“Q_content”:”判断题内容 1”

},

{

“Q_type”:”2”,

“Q_No”:”21”,

“Q_content”:”选择题内容 1”

},

{

“Q_type”:”3”,

“Q_No”:”41”,

“Q_content”:”问答器内容 1”

}

 。。。

]

}

value 值大小:假设平均每道题 200 个字节,json 格式辅助信息平均每题 100 个字节,每个试卷 44 道题目,因此 json 字符串大小约为 13K 字节。

(200 + 100 ) * 44 / 1024 ≈ 13K


3.2 考试读写流程


  • 学生进入考试页面后,考试系统从 redis 集群读取试卷信息,通过数据解析和渲染,把试卷展现给学生。

  • 学生做题时,每道题的答案缓存在浏览器中。学生提交答案时,将所有答案提交给考试系统。因提交答案业务处理不复杂,同时 1700/每秒的 TPS,估计数据库集群可以承受,因此先不设计消息队列。如提交不成功,提示学生稍后再重试,交卷时间以第一次提交为准。

3.2 Redis sentinel 集群的服务器数量

  • 服务器数量

1 主,2 从,3 哨兵

  • 性能

单机 redis 支持 10 万 QPS,本集群有 3 数据节点,可支持 30 万 QPS,因此支持 5 万 QPS 没有问题。

发布于: 刚刚阅读数: 3
用户头像

还未添加个人签名 2018.08.31 加入

还未添加个人简介

评论

发布
暂无评论
模块四作业-设计千万级学生管理系统的考试试卷存储方案_「架构实战营」_卡西毛豆静爸_InfoQ写作平台