架构实战营 - 模块四作业
学生考试管理系统存储方案需求分析
假设有 1000 个学校,每个学校 100 门需要考试课程,一共 4 个年级(8 学期),每学期 2 次考试,每次考试有 3 套备选试卷。同一科目两次考试直接时间间隔较长,可以只考虑一次考试所需存储空间。
假设每张试卷 20 道判断题,每题 100 个字;20 道选择题,每题 200 字;4 道大题,每题 200 字。
试卷数量:1000(学校)*100(课)*3(备选卷) = 30 万
每张试卷大致需要存储空间:(20*100 + 20*200 + 4*200)*2 ≈ 15KB
试卷所需存储空间:30 万*15KB ≈ 5GB
假设学校的考试都安排在某一个月内,考试的时候请求试卷,提交答案,中间答题过程浏览器本地完成,由于考试集中在上午 4 小时和下午 4 小时, 且请求试卷集中在考试开始的前 1 分钟,提交答案集中在考试结束前的 30 分钟,因此估算如下:
请求试卷:1000 万 * 20(课)/ 20(周末不考试) / 4(每天 4 堂考试)/ 1 分钟 = 250 万请求/分钟 ≈ 5 万/每秒
存储结构
使用 Hash 存储试卷
Redis key:学校 ID+年级+课程 ID
Hash key:试卷 ID
Hash value:直接将内容用 json 序列化后存储为 String 类型
过期时间:考试结束后
读写流程
根据 学校 ID+年级+课程 ID 从 Redis(主从皆可) 读取整个 Hash 内容,然后随机一张试卷返回
性能预估
请求试卷大致 5 万 QPS,Redis 单机性能大致 5 万 QPS,由于请求数据较大(3 张试卷 45K),性能有一定程度下降,需要一主一从两台 Redis。
考虑 Redis 可能发生故障,无法提供服务,剩下的服务器要能满足性能需求,需要额外一台 Redis 服务器。
综上,需要 3 台服务器,一主两从。
容量预估
5G 数据可以全部存在一台 Redis 内存中,不需要数据分片。
评论