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

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

前言

本文是千万级学生管理系统的试卷存储方案,用于指导试卷存储模块的技术实现。

1. 业务背景

为了支持千万级学生的在线考试,需要设计试卷存储访问方案。

2. 约束和限制

1000w名学生,每学期考2次,每次考试集中在一个月,每次考试有20门。
该方案涵盖试卷的上传,下载,归档等业务场景。
该方案不涉及学生答卷的存储。

3. 性能和存储容量估算

3.1 用户行为建模和性能估算
用户行为性能
学生下载试卷,集中在开始开始时一分钟1000w*20(课)/20(周末不考试)/4(每天4堂考试)/1分钟=5万/s
学生提交答卷,集中在考试结束前30分钟5万/30=1700/s
老师上传试卷,三天内完成20(课)/8(每天8小时)/3=1次/小时

复杂度体现在学生下载试卷的场景,可以选用Redis主从部署来满足QPS高TPS一般的场景。选用Redis Sentinel集群来实现主从自动切换,从而提高可用性。

3.2 存储容量估算

试卷存储:20(课)*2(每学期2次)2(每年2学期)4(一共四学年)1M(每张答卷大小,包含图片)=16021M=320M。
历史试卷存储:320M
10年=3200M=3.2G。

Redis是内存数据库,一台32G内存的服务器可以支撑Redis 3.6G的存储容量。

4. 存储系统选型

3台32G内存的物理服务器或虚拟机。
Redis主从部署(一主两从) + Sentinel集群。Sentinel 3个实例分别部署到三台机器上。

5. 存储方案设计

5.1 数据结构分析

Key: 学校ID+考试ID+课程ID
Value: string类型,存放json格式的字符串

5.2 读写分析

学生登录后,选择考试ID(2022年期末考试)和课程ID(数学考试),点击开始考试。根据键值直接请求主库或从库下载试卷。
老师登录后,输入考试ID和课程ID,上传试卷。向主库发起写请求,将键值对写入Redis.
当主库发生故障时,从库可以继续处理用户的读请求。
当主库发生故障时,Sentinel集群自动选主,写请求恢复正常。在选主过程中,发生写操作的概率极低,这里可以忽略。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值