模块四作业
设计千万级学生管理系统的考试试卷存储方案
【作业要求】
基于模块 4 第 6 课的估算结果和 Redis sentinel 的初步方案设计,完善考试试卷存储方案,具体包括:
• 完善 Redis 的数据结构设计,明确具体使用哪种 Redis 数据结构。
• 设计具体的读写流程(可以文字描述也可以序列图描述,序列图要有文字辅助说明)。
• 对照模块 4 第 6 课的性能估算结果,计算 Redis sentinel 集群的服务器数量和性能。
Redis 的数据结构设计
对于试卷本身,采用 Redis 的 set 保存:
Key 为"#Exam-学校 ID+年份+考试 ID"。Value 为试卷内容,以 JSON 格式保存。
采用 Redis 的 set 结构保存学生提交每张试卷的作答内容,其中:
Key 为"学校 ID+年份+学生 ID+考试 ID"的组合,Value 为试卷作答内容,以 JSON string 的格式保存。
具体的读写流程
写入:
学生提交试卷
Exam Service 根据试卷内容产生相应的 JSON string
Exam Service 保存数据到 Redis,Redis cluster 将数据保存到其中一个 DB shard.
数据写入 DB shard 的 master node
master node 同步数据到 slave nodes
读取:
从 Redis 读取数据时,可以从 DB shard 的 master 或 slave 中任一 node 中读取。
性能估算
从计算角度:
Peek read QPS: 50K/s
Peek write QPS: 1700/s
由于 Redis 单机性能可达 TPS 50K-100K/s。因此 1 台 redis master 可以应付。由于采用 Redis Sentinel,需要至少 2 台 slave。故而需要至少 3 台机器:1 master + 2 slaves.
从数据存储角度:
每年在校学生试卷结果记录 2.4TB,以及离校学生 0.6TB。每年需保存 3TB。一台机器可以基本满足存储需求。但每年需新增 1 片 DB Shard(即 1 master + 2 slaves).
评论