写点什么

千万级学生管理系统的考试试卷存储方案

作者:风中奇缘
  • 2022 年 3 月 06 日
  • 本文字数:1080 字

    阅读完需:约 4 分钟

前言

本架构设计方案适用于管理系统考试存储方案设计文档,用于指导千万级管理系统的考试试卷的存储方案。


1. 业务背景

本系统主要是应用于考试试卷存储方案的设计,用于支撑千万级学生管理系统考试试卷的存储。假设每门学科每学期 2 次考试,每个学生平均每个学期 20 门课程,则考试存储量预估记录如下为:

在校学生:1000 万 * 20(课)* 2(考试次数) * 2000(试卷 + 答案解析)* 2(学期) * 3(只有前三年考试)= 4.8T。

离校学生每年记录为: 0.5T


学校的考试都安排在某一个月内,考试的时候请求试卷,提交答案,中间答题过程浏览器本地完成,由于考试集中在上午 4 小时和下午 4 小时

且请求试卷集中在考试开始的前 1 分钟,提交答案集中在考试结束前的 30 分钟,因此估算如下:

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

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


2. 约束和限制

1. 在校学生考试结果存储:2.4T;

2. 离校学生考试结果存储:每年增长 0.6T;

3. 试卷请求 QPS:5 万/s;

4. 提交试卷 TPS:1700/s


3. 总体架构


3.1 架构分析

  1. 学生考试结果数据需要永久存档,数据会持续增长,需要分片存储,并且由于针对考试成绩的大量查询只在于改卷结束后,历史的查询会逐步递减,因此需要处理冷热分离存储。

  2. 试卷 QPS 请求高达 5w/s, 需要对试卷内容进行缓存,需要评估大概的缓存容量:3000 大学,每个大学开设 50 个专业,一次考试生成 3000 * 50 = 15w 套试卷,按 5 天的考试量计算, 这些每次同时考试的量在 3w 左右。 每套试卷大约 1M, 在同一天考试最高存储量为:30Gb。 可配置一台 32Gb redis 服务专用于试卷缓存的存储,可以加分片存储。


3.2 总体架构



  1. 试卷存储访问,读取 qps 比较大,且需要高可用,因此采用 redis 缓存。单台服务器可缓存所有试卷内容,且单台服务器可以抗住 5W 的 QPS,因此不用考虑数据分片,但是考试时读取试卷不能出现故障,需要保证高可用,因此引入 Redis sentinel 部署模式,采用 3 台服务器,1 主 2 从,每台机器同时部署哨兵进程和 Redis 服务进程。

  2. 课程考试结果:主要记录课程的考试结果,用于基本信息查询,而且数据存储初期结果采用 redis 缓存, 后期采用 mysql 永久存储。


4. 详细设计


4.1 核心功能

  1. 考试试卷缓存设计: 以 学校编号+课程编号+年级编号 作为缓存 key, 把考试内容以 json 的方式存储在缓存中

  2. 考试结果存储设计:以学校编号+ 年级编号+ 考试编号作为缓存 key ,考试分数作为结果存储中。 数据表 mysql 按照学校代号作为库名划分,数据表字段名: 主键 id、课程 ID、学生学号、考试成绩结果


用户头像

风中奇缘

关注

还未添加个人签名 2017.11.13 加入

还未添加个人简介

评论

发布
暂无评论
千万级学生管理系统的考试试卷存储方案_架构实战课_风中奇缘_InfoQ写作平台