架构实战营基于 redis 哨兵模式的考试数据存储设计
1.redis 数据结构采用 list
2.redis 数量:经查国内大概 3000 所高校,且高校基本专业数量在 100 个左右,试卷大小为 44 到题,平均每题算 50 个汉字,各专业均按 4 年学制计算,每场考试数据量大小为:3000*100*44*50*2*4 约 5G,网卡采用万兆网卡,网卡读写速率大概为 1250M 约 1.1G 每秒,根据业务得知每秒需要传递 5G 的数据,大概需要 5 台 Redis,考虑到性能差别和传输实际熟虑配置 7 台 redis,每台 redis10G 内存,另每场考试 TPS=5W,有 7 台 redis,每台 redis 每秒大概处理 4w/7=6000,完全能够处理。
3.redis 读写:redis 采用哨兵模式,且使用读写分离方式进行数据读写。具体的读取在 redis 设置时数量已经确认,写操作如下:因单次考试数据量高达 5G,一天 4 次考试就是 20G 一个学生 20 门课大概就是 20*20/4=100G 的数据量,所以采用每门考试前刷新当前考试的试卷数据到 redis,具体做法为提前 40 分钟刷数到 redis,数据过期时间设置为 80 分钟(40 分钟的提前刷卷时间,开考 40 分钟后试卷不可用,学校考试一般 30 分钟后不允许再进入考场,考虑到时间有误差设置为开考后 40 分钟后删除缓存试卷)。写 5G 数据时间足够不需要考虑速率,提前 40 分钟写入是为了考虑突发问题可以处理,且考试时间大概 90 分钟,写前的时间也够 redis 清理掉过期数据。读数据流程为数据库读取到 redis master,master 复制数据到 save。
4.最终方案:使用 redis 存储试卷,采用 list 结构,key:学校-专业-年级-课目,redis 读写分离,redis 机器数为 7 台,每台内存大小为 10G,网卡为万兆网卡,redis TPS 约 6000,试卷在考试前 40 分钟刷到 redis,过期时间为 80 分钟。
版权声明: 本文为 InfoQ 作者【慕溶枫】的原创文章。
原文链接:【http://xie.infoq.cn/article/2db4add99f2717eebad0e9d45】。未经作者许可,禁止转载。
评论