写点什么

架构训练营模块四作业

用户头像
Geek_e0c25c
关注
发布于: 2021 年 05 月 23 日

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

【作业要求】

基于模块 4 第 6 课的估算结果和 Redis sentinel 的初步方案设计,完善考试试卷存储方案,具体包括:

1)完善 Redis 的数据结构设计,明确具体使用哪种 Redis 数据结构

2)设计具体的读写流程(可以文字描述也可以序列图描述,序列图要有文字辅助说明)

3)对照模块 4 第 6 课的性能估算结果,计算 Redis sentinel 集群的服务器数量和性能


【需求估算】

原场景中的性能指标为:

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

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

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

  4. 提交试卷 TPS:1700/s


题目中未给出的两个试卷存储性能指标估算如下:

  1. 由于考试试卷通常是各学校的各专业课出的,假设平均 100 人选一门课,则是试卷的份数是考试结果数的百分之一,单份试卷按每道题目平均 100 字、共 50 题计算,对应的试卷存储量为:

1000 万/100(学生专业课数)*20(课)*2(考试次数)*5000(试卷)2(学期) *3(只有前三年考试) = 120G

  1. 老师上传试卷一般是没有很严格的时间限制的,但我们假设每门课的试卷都在考试前一小时内由老师上传到服务器,则上传试卷的 TPS 为:

1000 万/100(学生专业课数)/3600(秒)= 27/s


【数据结构设计】

由于每次考试的试卷只需要整体上传和整体下载,不会单独读写每道题目,因此每次的试卷可以整体存为一个字符串。在 Redis 中采用基础的数据结构 String 存储即可。

Key:学校 ID+考试 ID

Value:试卷内容 String


【读写流程设计】

  1. 老师上传试卷内容,直接按照 key 保存试卷内容字符串作为 value

  2. 学生下载试卷时,按照 key 读取 value 获得试卷内容


【性能评估】

  1. 存储数据量 120G,单机可以存储所有数据

  2. 写请求 TPS 27/s, 单机可以支撑

  3. 读请求 QPS 5 万/s,按 Redis 单机读性能 qps 5 万/s 来评估的话,单机已经可以支撑读性能了。

  4. Redis sentinel 架构属于集群选举方式,sentinel 节点部署三台服务器保障自身的高可用;考虑到存储量和读写性能单机均能满足,redis 只需要部署一主一从两台服务器即可,写请求指向主服务器,读请求可以指向主或从服务器。


发布于: 2021 年 05 月 23 日阅读数: 25
用户头像

Geek_e0c25c

关注

还未添加个人签名 2020.09.13 加入

还未添加个人简介

评论

发布
暂无评论
架构训练营模块四作业