千万级学生管理系统设计试卷存储方案
一、业务需求
1.对千万级学生管理系统设计试卷存储方案;
2.采用 Redis Sentinel 设计方案并明确数据结构,设计具体的读写流程;
3.计算 Redis Sentinel 集群的服务器数量和性能;
二、千万级学生管理系统的考试性能需求估算
1.在校学生:1000 万* 20(课)* 2(考试次数)* 1000(答案)* 2(学期)* 3(只有前三年考试)= 2.4T;
2.离校学生:每年 250 万,存储量为 0.6T;
3.请求试卷:1000 万* 20(课)/ 20(周末不考试)/ 4(每天 4 堂考试)/ 1 分钟= 250 万请求/分钟≈5 万/每秒;
4.提交试卷:1000 万* 20(课)/ 20(周末不考试)/ 4(每天 4 堂考试)/ 30 分钟= 1700/每秒。
三、Redis 数据结构选型
1.试卷数量相对较少,试卷存储可以采用 MySql 关系数据库,存储试卷信息以及关联学校、考试科目等信息。
2.Redis 存储数据类型可以采用简单的 String 类型即可满足试卷的临时存储,key=学校 ID+专业 ID+试卷 ID,value=试卷内容(JSON 格式);也可代用 Hash 类型,key=学校 ID+专业 ID+试卷 ID,value=试卷对象,可占用更少的内存;
3.考试结果也可采用 Hash 类型存储对应信息。
四、考试读写流程
1.因试卷数量相对较少且有关联关系,所以先将试卷存储在 MySql 中,Mysql 架构单独考虑考试业务本身,采用主备或主从模式即可;如考虑整个学生管理系统可采用分库分表架构;
2.考虑到考试开始时请求试卷的高 QPS,所以将试卷信息预先读取到 Redis 中,从 Redis 中读取试卷信息,保证很高的读性能;
3.学生提交答案也可先保存在 Redis 中,保证较高的 TPS;
4.最终把考试结果等信息存储到 HBase 中,选型 HBase 是考虑到考试结果信息相对较大,而且每年累计增加,并且查看考试结果业务也相对简单。
五、Redis Sentinel 的计算性能
1.单机 redis 可满足 5w-10w 的 QPS;
2.采用 Sentinel 模式为了保证系统高可用;
3.一般 Sentinel 模式至少 3 节点,所以搭建 3 节点 Redis Sentinel 集群即可满足需求。
4.Redis 数据库 3 节点(1master、2slave),主节点加载试卷信息,3 个节点可同时读取,保证考试时的高 QPS;
5.Sentinel 模式主要监控 Redis 节点,所以搭建一个 3 节点的 Sentinel 保证运行稳定即可。
评论