基于 Redis sentinel 的千万级学生管理系统的考试试卷存储方案
存储性能需求汇总
假设每门学科每年 2 次考试,每个学生平均一学期 20 门课,考试采取机考的方式,每门考试的答案 20 判断题、20 选择题、4 道大题(答案 200 字以内),则需求估算如下:
【考试】
试卷存储:200 KB * 1(仅记录最近一次考试的题) * 20 (课) * 3(只有前三年考试)** 500 (假设 500 所学校) ≈ 6G ;
请求试卷:1000 万* 20(课)/ 20(周末不考试) / 4(每天 4 堂考试)/ 1 分钟= 250 万请求/分钟≈ 5 万/每秒。
具体方案
【数据结构设计】
Key:学校 ID+课程 ID+考试 ID;
Value:题目以 json 的形式进行存储,类型为 string;
【具体流程】
老师:
登录系统
创建试卷
选择每个科目对应的试卷
将试卷信息存储进 redis(写)
学生:
登录系统
选择对应考试科目
加载试卷题目(从 redis 获取试卷形象)(读)
填写试卷
提交试卷
【部署方案】
Redis 单机 TPS 为 5~10w,请求试卷的 QPS 为 5w/s。同时考虑到高可用和自动切换,使用 Sentinel 进行部署(1 Master + 2 Slave)
为保障 Sentinel 本身的高可用,部署 3 台 Sentinel
由于试卷总大小为 6G 上下,同时可能存在历史试卷数据遗留以及主从复制需求,故至少使用 16GB 的内存。同时哨兵服务器只做监控用,内存需求稍低。最终服务器配置为:
Master:1 台,Slave:2 台。均为 2 核 32G。
Sentinel:3 台。均为 2 核 4G。
版权声明: 本文为 InfoQ 作者【Geek_e8bfe4】的原创文章。
原文链接:【http://xie.infoq.cn/article/25d54f24be70d113a8503e6d3】。未经作者许可,禁止转载。
评论