架构实战营 - 模块 4 - 设计千万级学生管理系统的考试试卷存储方案
作业要求
基于模块 4 第 6 课的估算结果和 Redis sentinel 的初步方案设计,完善考试试卷存储方案,具体包括:
完善 Redis 的数据结构设计,明确具体使用哪种 Redis 数据结构。
设计具体的读写流程(可以文字描述也可以序列图描述,序列图要有文字辅助说明)。
对照模块 4 第 6 课的性能估算结果,计算 Redis sentinel 集群的服务器数量和性能。
提示
性能可以有一定冗余。
如果对 Redis sentinel 不熟悉,请参考官方文档:https://redis.io/topics/sentinel
1. Redis 数据结构设计
Key:学校 ID + 学号 ID + 试卷 ID。
Value 格式:String
2. 读写流程

管理员编辑试卷后,需要保存至 HBase 中,对试卷进行持久化。
试卷异步更新至 Redis 中,管理员并不需要关心 Redis 是否保存成功。
后台定时任务定时将试卷同步至 Redis,保证 Redis 数据丢失时,能尽快恢复。
试算更新后不会立刻读取,数据一致性要求不高,仅需提供最终一致性即可,并不需要保持 Redis 数据的强一致性。

考生加载试卷时,仅从 Redis 加载,防止缓存击穿及缓存雪崩。
数据高可用不敏感,短时间内考生无法加载考卷可以忍受,Redis 数据丢失时,可以尽快恢复即可。

TPS 不高,直接保存至数据库即可。
存储性能需求
假设共 2000 所学校,每个学校每个学期共 100 门课需要考试,共 4 个学期,平均每份试卷大小 10KB「约 5000 字」,可估算试卷总容量为 8GB「2000 X 100 X 4 X 10KB」
结合已知的性能需求,可得出如下性能需求:
试卷总容量:8GB
试卷请求 QPS:5 万/s
提交试卷 TPS:1700/s
4. 服务器数量、性能计算
已知 Redis 总存储量 8GB,并不需要分片,单实例即可存储所有数据。10GB 以内的数据量均可用 Redis 单实例支持,提供了少量的冗余。
QPS 为 5W/s,并不高,Redis 单实例即可支持。由于 Redis 的最高 QPS 为 10W,可提供 1 倍冗余。
Redis Sentinel 实例少于 3 台无法保证可用性,Redis 实例少于 2 台无法进行故障迁移。为保证基本的可用性,Redis Sentinel 实例需要 3 个,Redis 实例需要 2 个,其中 Redis 实例一主一从,为 QPS 提供了一倍的冗余。
仅需要 3 台服务器,其中两台服务器分别部署 1 个 Redis Sentinel 实例和 1 个 Redis 实例,第三台服务器部署 1 个 Redis Sentinel 实例。
版权声明: 本文为 InfoQ 作者【雪中亮】的原创文章。
原文链接:【http://xie.infoq.cn/article/ca64d8be75b3484944ce58642】。未经作者许可,禁止转载。
评论