写点什么

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

用户头像
彦欲
关注
发布于: 刚刚

性能分析

存储量:

  • 每学期 20 门课 20 道选择 20 道判断 4 道答题

  • 假设平均每道题加序列化标点共 1000 字符

  • 一年试卷存储量为:2 次*20 门*(20 选择题+20 判断题+4 答题)*1000 字符/1024/1024 = 1.7MB


读写性能需求:

  • qps 5w/s

  • tps 1700/s


选择存储系统

  • Redis sentinel


设计存储方案

Redis 数据结构

  • 分析:

单张试卷体积 (20+20+4)*1000/1024 = 40kb

试卷全部内容序列化,并做压缩处理可以缩小到 5~10kb

5-10kb 会影响 redis 性能,所以需要进一步做拆包(每包 1kb 以内)

  • 方案:

试卷编号 + 拆分包序号为 key (XXAAA-1,XXAAA-2...)

value 为拆分后的包

按次方案存储,访问量会有 5-7 倍的增加,qps 5w -> 25w

具体的读写流程

  • 写流程

  • 试卷上传或编辑后保存到数据库

  • 发布试卷时,提取数据库单张试卷全部数据,并进行压缩和拆包

  • 拆包后按规则存入 redis

  • 如需修改试卷,需要重新发布

  • 读流程

  • 学生浏览器登录后,进入准备考试页面,得到试卷编号及此试卷拆包的数量

  • 开始考试后,浏览器访问服务器计算节点,获取试卷

  • 计算节点通过试卷编号及包数量到 Redis 获取试卷全部内容,解压缩

  • 计算节点本地缓存解压缩后内容 1 分钟,可控制 redis 读取性能在 3w/s 以内

  • 前端获取到试卷内容,并显示试卷内容

Redis sentinel 服务器数量和性能

4 核 8g 服务器 单机性能约为 3-5w

本项目使用三台 4 核 8g 服务器,一个 master 两个 slaver

并分别在三台服务器部署 sentinel


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

彦欲

关注

还未添加个人签名 2018.03.09 加入

还未添加个人简介

评论

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