模块四作业
基于 Redis Sentinel 的试卷存储方案
数据结构
Redis Key-Value 存储,试卷内容 Value 使用 String 结构即可(如 JSON 序列化,或自定义格式)。
读写流程
读取场景
试卷读取的应用场景主要为学生考试时根据试卷 ID 读取。
读取请求使用试卷 ID,返回完整试卷内容 string,由客户端进行反序列化及后续处理。
读取请求可分布到从服务器上。
写入场景
上传新试卷,返回试卷 ID。
更新试卷,根据试卷 ID 及试卷内容,如试卷 ID 有效且权限有效,则覆盖试卷内容。
(注: 此处为完全覆盖,客户端可先读取现有试卷并进行更改,上传修改后的完整试卷内容进行覆盖。)
可选: 可对试卷进行版本化记录,存储试卷修改历史版本,并支持根据版本读取(默认读取最新版本),每次上传新试卷修改则新建一个版本。
服务器集群
数据估算
学生数量 1000w。
考试月-试卷读取请求 QPS: 1000 万 * 20(课)/20(周末不考试)/4(每天 4 堂考试)/1(分钟)/60,峰值约 5 万/s。
教师试卷上传及修改并发要求较小,只需要保证基本写入可靠性。
试卷存储量:
考虑全国约三千所高校,约两千接入系统,假设平均一千课程,每个课程每年两场考试,试卷序列化内容大小平均 300k,则每年数据存储总量约为 2000*1000*2*300k=1.2TB。
服务器设置
Redis 单机已可支持 5 万+的 KV 读取 QPS,可使用三台数据服务器保证高可用,1 主+2 从。同时使用三台哨兵服务器确保服务器监控及主从切换。
版权声明: 本文为 InfoQ 作者【Geek_1cdcf6】的原创文章。
原文链接:【http://xie.infoq.cn/article/10af31be830aae6d93c28c0c3】。未经作者许可,禁止转载。
评论