千万级学生管理系统考试试卷存储方案
一、业务诉求
对于各个学校的考试试卷进行存储,完成录入、读取和写入的需求。
二、千万级学生管理系统数据估计情况
1. 在校学生考试结果存储:2.4T;
2. 离校学生考试结果存储:每年增长 0.6T;
3. 试卷请求 QPS:5W/s;
4. 提交试卷 TPS:1700/s。
三、数据结构选型
考试试卷存储量少但并发量高,基于 Redis 中数据结构有 5 种:String、List、Hash、Set、Sorted Set(zset),可以采用 Hash 数据结构存储。
Key 设计:学校 ID + 学号 ID + 考试 ID
四、读写流程读写流程
1. 出题:存储到 MySQL 中,选择主备架构即可;
2. 同步及预热处理:MySQL 的试卷同步到 Redis 集群当中,提高读取性能;
3. 读取试卷:学生考试过程中,可以访问不同的 Redis 节点获取试卷;
4. 保存答案:学生试题答案存到 Redis 当中,以保证 TPS;
5. 数据落盘,最终把 Redis 中试题答案,存入到 HBase 当中,选择 HBase 主要考虑到,试题存储量较大,且每年递增。
五、Redis sentinel 集群的服务数量和性能计算
试卷请求 QPS:5W/S,一般单台 Redis 的性能为 5W-10W(QPS)之间,所以单台 Redis 即可。但为了保证高可用,可以部署 1 主 2 从,3 个节点。
采用 Redis sentinel 监控主节点,sentinel 需要部署为单数,最少部署 3 个节点,以防止脑裂问题。为节省机器,sentinel 可以分别与读写节点部署在一起。
评论