写点什么

模块四作业

作者:bob
  • 2021 年 11 月 14 日
  • 本文字数:926 字

    阅读完需:约 3 分钟

前言

本文是千万级学生管理系统的考试试卷存储的设计方案,用于指导学生管理系统中考试子系统的后续开发、测试和运维。

1. 业务背景

考试子系统作为学生管理系统中的核心组成部分,为提高学生考试管理的管理水平,优化资源,尽可能降低考试管理成本,从实际出发帮助学生管理人员有效管理学生考试信息。

2. 性能估算

2.1 性能预估

  • 每个学生平均一学期 20 门课,考试采取机考的方式。

  • 每门考试的答案 20 判断题、20 选择题、4 道大题,假设判断题、选择题、大题占用字数分别为 100 字内、200 字内、200 字内。则共计字数:20*100+20*200+4*200=6800 字。

  • 采用 UTF-8 编码格式,每个中文字符占 3 个字节,每门考试占用字节数:6800*3=20400 字节,即 19.9KB,按照 20KB 计算。

  • 假设每门考试 30 人参加,则试卷总存储量为:1000 万*20 课/30 人*20KB=127GB,按照 150GB 计算。

2.2 估算结果

  • 假设学校的考试都安排在某一个月内,并且提前 3 天放到存储,除去周末,即考试在 20 天内完成,则每 3 天试卷的存储量为:150GB*3 天/20 天=22.5GB。

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

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

3. 存储系统选择

  • 为了应对 5 万的 QPS,Redis 单机的 QPS 理论上在 5 万到 10 万,但从实际出发,采用 Redis Sentinel,一主两从。

  • 每 3 天试卷存储量 22.5GB,单机可以支撑。

4. 存储方案设计

4.1 整体设计

  • Redis Sentinel 作为试卷存储和访问。

  • MySQL 集群 存储老师课程考试结果,学生基本信息。

  • HBase 集群 存储学生考试结果、登录记录、图片信息。

4.2 Redis 数据结构设计

  • Key: 学校 ID + 专业 ID + 考试 ID

  • Value: 题目 ID + 题目内容,采用 JSON 格式

  • 试卷初始存储位置为 MySQL,考试前 3 天加载到 Redis

4.3 试卷的读写流程设计

  • 老师提前 3 天将试卷从 MySQL 添加到 Redis 缓存。

  • 学生考试时从 Redis 中读取试卷。

  • 学生考试结束提交试卷时存入 HBase 数据库。

  • 老师从 HBase 数据库获取试卷进行批改,并将修改结果存入 HBase 中。

  • 批改后的试卷将推送一份至 RockMQ 消息队列,最终存入 MySQL 数据库。

  • 老师从 MySQL 中请求试卷进行分析。

4.4 服务器配置

  • 采用 3 台服务器,每台 4 核、64GB 内存。

  • 采用一主两从,单台 QPS 为 2 万,总计 6 万,满足请求试卷时的高峰读请求 5 万 QPS。


用户头像

bob

关注

go get it 2020.07.06 加入

......

评论

发布
暂无评论
模块四作业