Redis Sentinel 初步设计方案
一、 Redis Sentinel 架构
1.1 架构图
1. 性能需求
根据用户量规划,和用户行为模拟推算,Redis 需要适配试卷存储和访问的需求,具体如下:
请求试卷:TPS 50000/s
提交试卷:TPS 1700/s
2. 资源规划:
按照 Redis 单机 5-10wTPS 的性能估算,一个实例即可满足需求,但考虑考试场景的高可用需求,使用三个节点的 Sentinel 部署方案。
如果成本控制比较严格,Sentinel 复用 Redis 机器,即每台机器运行一个 Redis 和一个 Sentinel 实例。
3. 架构图
1.2 数据结构设计
Redis 五种数据结构中,string 最简单,也最契合试卷的存储,所以选择 string 来存储,这里有两种场景的存储,结构设计分别如下
原始试卷(供学生下载、考试)
key:学科 ID(这里假设所有学校试卷都是统一的,如果每个学校单独命题,可以改为:学校 ID+学科 ID)
value:试卷 info
2. 学生提交的试卷
key:学校 ID+学科 ID+学生 ID
valne:提交试卷 info
二、 读写流程
2.1 写流程
写流程说明
client 通过 Jedis(也可以是 redis-py 等工具)连接 Sentinel 集群,可以录入多个 Sentinel 节点,Jedis 会遍历选择可用的 Sentinel 并发起连接,并开始监听 Sentinel
Jedis 向 Sentinel 请求 Redis master 地址,Sentinel 会即时返回 master 的地址,如果连接过程中 master 发生了切换,Sentinel 会及时通知 Jedis
Jedis 连接到 master,确认其 master 状态后发起试卷的写请求
Redis master 接收试卷上传
上传完毕,验证上传结果,验证失败则重新上传
2.2 读流程
读流程说明
client 通过 Jedis(也可以是 redis-py 等工具)连接 Sentinel 集群,可以录入多个 Sentinel 节点,Jedis 会遍历选择可用的 Sentinel 并发起连接,并开始监听 Sentinel
Jedis 向 Sentinel 请求可读的 redis 节点地址,Sentinel 会即时返回可读的 master 或者 slave 地址,如果连接过程中有可读节点掉线,Sentinel 会及时通知 Jedis
Jedis 连接到可读节点,发起下载试卷的读请求
Jedis 开始下载试卷
评论