架构实战营模块 4 作业
主题
考试试卷
千万大学生考试试卷
用 Redis-Sentinel 存储方案设计
行为建模
学生 1000 万人,假设,只有大一到大三学生参考考试,假设每一年级人数均分为 250 万人。
假设:
一学期修 20 门课,一门课每学期考 2 次试,每学年有 2 个学期。
考试集中在一个月内,一周考 5 天,一天上午考 2 门,下午考 2 门
读卷时集中在考试开始后 1 分钟内
交卷时集中在考试结束前 30 分钟内
性能估算
分为存储量计算和考试时的读卷和交卷时的性能估算
存储量计算
分为学校需要的考试结果存储的总量 2.4TB
和每一年新增的存储量 0.6TB
每一份考卷假设答题的存储量
![](https://static001.geekbang.org/infoq/2f/2f140de17e7ba37940a96a9a04527d40.png)
![](https://static001.geekbang.org/infoq/ae/aec6e2fa1da2cb83a544ef14b27bff3a.png)
![](https://static001.geekbang.org/infoq/f9/f96e6b0990d1bdcae8a3ff75a93206a7.png)
性能估算
![](https://static001.geekbang.org/infoq/e0/e0e6367325dc441cde4953dca7e92b9e.png)
读写分析
正常情况的读写:
从 Redis M1 读取:
写入时由 Redis M1 写入,再用异步写到 Redis R2 和 Redis R3 做备份
当异常发生:
当 Sentine1 发现 Redis M1 无法完成读操作,会通知 Sentinel 2 和 Sentinel 3 做选举,让 Redis R2 或 Redis R3 作为 Master,启动 failover 机制,把读的数据回覆给 client
当 Sentine1 发现 Redis M1 无法完成写操作,会通知 Sentinel 2 和 Sentinel 3 做选举,让 Redis R2 或 Redis R3 作为 Master,启动 failover 机制,把写的数据写到 Redis M2,再异步复制给 Redis R1 和 Redis R3
Sentinel 设计
本案经过性能估算 QPS TPS
单机 Redis 可应付性能需求。
考虑到失效时高可用
Sentinel 至少要 3 个,
Redis Master 之外布 2 个 Redis Replica 当作数据复写的点,同时也将 Sentinel 安装在 Redis Replica 内
监控读写状况
![](https://static001.geekbang.org/infoq/84/845e17ca12a1661aac0871a741489e7c.png)
若发生 Redis M1 发生问题无法读写
会切换至 Redis Replica 的节点,使服务可以继续
![](https://static001.geekbang.org/infoq/c5/c50e898daa0e7213bcfc66f1eeeac14a.png)
评论