写点什么

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

作者:alan
  • 2022 年 1 月 08 日
  • 本文字数:849 字

    阅读完需:约 3 分钟

1.试卷存储结构:

采用 hashtable 结构,为降低网络峰值消耗,单个试卷区分为文本部分和图片部分,且每个图片分为一个键值对,则具体结构如下:


示例:


2.试卷写流程

  1. 试卷原始数据由教师上传至系统,保存于 Hbase 中,数据结构为:学校 ID+课程 ID+试卷 ID:试卷内容

  2. 考试前一天,系统跑批将第二天考试的试卷加载到 redis 中;

3.试卷读流程

  1. 考生登录系统后,选择考试菜单进入考试流程;

  2. 系统读取 redis,根据试卷 ID 首先获取试卷文本部分;

  3. 如当前或随后一道题目有图片,则根据试卷 ID+图片序号获取试题图片;从而将试卷分解为多个部分分别读取,缓解系统和网络压力;

  4. 考试完成,考试提交试卷,考试结果存入 Hbase 中;

4.性能估算

总试卷写请求估计

1000 万学生,每一门考试平均有 100 个学生参加,20 门课程,平均分布在 10 天内,试卷上传时间集中在 2 个小时,故写 TPS 为: 1000 万/100 个学生*20 门课/10 天/7200 秒 =30 次/秒


单个试卷存储量估计

文本部分:20 个判断题 200 字节+20 个选择题 200 字节+4 个大题*1000 字节=12KB

图片部分:20 个试题图片*50K=1MB

单个试卷总大小 约等于 1MB

redis 集群总容量估计

1000 万学生,每一门考试平均有 100 个学生参加,20 门课程,平均分布在 20 天内考完,则每天的试卷总大小为: 1000 万/100 个学生 20 门课/20 天 1MB = 100 GB


综合考虑学生读取试卷的 TPS 峰值为 5 万/秒; 试卷原始数据保存在 hbase 中,存储结构和 redis 类似;每天晚上跑批把第二天所有试卷加载到 redis,写性能需求可忽略不计,每次批处理写入量为 100G;

单台 redis 的读性能为 5 万-10 万/秒;

故 Redis sentinel 集群可采用 4 台 8C64G 服务器即可,单台服务器存储约 25G 数据,提供峰值读并发为 5 万/4=1.25 万/秒;


5.冗余量和扩展性分析

考虑到 redis 数据是从 Hbase 读取且无修改、无需落地,最大可使用单台服务器内存的 80%存储数据,则现集群冗余量为:

最大可存储数据量为 64G*4*80%=200G,冗余 100%;

最大读 TPS 为 5 万*4=20 万/秒,冗余 300%;


如试卷大小或者试卷总存储量增多,可考虑扩容服务器内存到 128G,考虑到 redis 数据无需落地,则:

最大可存储数据量为 128G*4*80%=400G;

最大读 TPS 为 5 万*4=20 万/秒;

用户头像

alan

关注

还未添加个人签名 2021.11.02 加入

还未添加个人简介

评论

发布
暂无评论
模块四作业 - 学生管理系统的考试试卷存储方案