架构训练营模块四作业
设计千万级学生管理系统的考试试卷存储方案
【作业要求】
基于模块 4 第 6 课的估算结果和 Redis sentinel 的初步方案设计,完善考试试卷存储方案,具体包括:
1)完善 Redis 的数据结构设计,明确具体使用哪种 Redis 数据结构
2)设计具体的读写流程(可以文字描述也可以序列图描述,序列图要有文字辅助说明)
3)对照模块 4 第 6 课的性能估算结果,计算 Redis sentinel 集群的服务器数量和性能
【需求估算】
原场景中的性能指标为:
在校学生考试结果存储:2.4T,
离校学生考试结果存储:每年增长 0.6T
试卷请求 QPS:5 万/s
提交试卷 TPS:1700/s
题目中未给出的两个试卷存储性能指标估算如下:
由于考试试卷通常是各学校的各专业课出的,假设平均 100 人选一门课,则是试卷的份数是考试结果数的百分之一,单份试卷按每道题目平均 100 字、共 50 题计算,对应的试卷存储量为:
1000 万/100(学生专业课数)*20(课)*2(考试次数)*5000(试卷)2(学期) *3(只有前三年考试) = 120G
老师上传试卷一般是没有很严格的时间限制的,但我们假设每门课的试卷都在考试前一小时内由老师上传到服务器,则上传试卷的 TPS 为:
1000 万/100(学生专业课数)/3600(秒)= 27/s
【数据结构设计】
由于每次考试的试卷只需要整体上传和整体下载,不会单独读写每道题目,因此每次的试卷可以整体存为一个字符串。在 Redis 中采用基础的数据结构 String 存储即可。
Key:学校 ID+考试 ID
Value:试卷内容 String
【读写流程设计】
老师上传试卷内容,直接按照 key 保存试卷内容字符串作为 value
学生下载试卷时,按照 key 读取 value 获得试卷内容
【性能评估】
存储数据量 120G,单机可以存储所有数据
写请求 TPS 27/s, 单机可以支撑
读请求 QPS 5 万/s,按 Redis 单机读性能 qps 5 万/s 来评估的话,单机已经可以支撑读性能了。
Redis sentinel 架构属于集群选举方式,sentinel 节点部署三台服务器保障自身的高可用;考虑到存储量和读写性能单机均能满足,redis 只需要部署一主一从两台服务器即可,写请求指向主服务器,读请求可以指向主或从服务器。
版权声明: 本文为 InfoQ 作者【Geek_e0c25c】的原创文章。
原文链接:【http://xie.infoq.cn/article/b00913aa9d5622b5c01be6bae】。文章转载请联系作者。
评论