架构实战营模块四课后作业
设计千万级学生管理系统的考试试卷存储方案
【作业要求】
基于模块 4 第 6 课的估算结果和 Redis sentinel 的初步方案设计,完善考试试卷存储方案,具体包括:
•完善 Redis 的数据结构设计,明确具体使用哪种 Redis 数据结构。
•设计具体的读写流程(可以文字描述也可以序列图描述,序列图要有文字辅助说明)。
•对照模块 4 第 6 课的性能估算结果,计算 Redis sentinel 集群的服务器数量和性能。
答案:
Redis 数据结构
用 String 类型的数据结构来存考卷。
数据结构设计:
Key: 学校 ID + 科目 ID + 考试 ID
Value:试卷内容 Json
读写流程
试卷平时存储在 mysql 或者 hdfs 等文件式存储中,在考试开放之前通过 key 加载到 redis 集群中,redis 集群完成主从复制。
考试开始时,客户端或浏览器调用服务端接口,通过计算节以及对应的 key 取出对应的考试 Json 串解析,并加载到前端。
读写性能、集群规模
请求试卷:1000 万* 20(课)/ 20(周末不考试)/ 4(每天 4 堂考试)/ 1 分钟= 250 万请求/分钟≈ 5 万/每秒。
Redis 单机已经能满足 5 万每秒的简单查询,哨兵模式至少三个哨兵实例,所以采用一主两从,由于写入不频繁,所以不用做读写分离,预计整体集群可支持 15 万 QPS。
存储要求:500(学校数)*20(20 门课)*2 (考试次数)*2(学期) *20KB ≈ 800M 假设每 5 年更新一轮试卷,总存储量在 4000M = 4G 内存 留 50%富余量,则集群为 8G 内存机器三台搭建 Redis sentinel 集群即可满足存储要求。
评论