【初恋系列】那年的试卷我们再肝一遍(试卷存储详细设计)
学生系统试卷存储详细设计
一 性能背景及架构
【登录】
1.登录次数:3000/s;
2.登录记录:存储数据量 36 亿条,存储容量 43G,写入 TPS =登录 TPS = 3000/s,读取 TPS 无需特别设计。
【注册】
1.注册 TPS = 3/s,可以忽略不计;
2.在校学生数据存储:基本数据= 2G,图片数据= 10T;
3.离校学生数据存储:基本数据每年增长 500M,图片数据增长 2.5T。
【考试】
1.在校学生考试结果存储:2.4T;
2.离校学生考试结果存储:每年增长 0.6T;
3.试卷请求 QPS:5 万/s;
4.提交试卷 TPS:1700/s。
二 需求内容及详细设计
基于模块 4 第 6 课的估算结果和 Redis sentinel 的初步方案设计,完善考试试卷存储方案,具体包括:
1 完善 Redis 的数据结构设计,明确具体使用哪种 Redis 数据结构。
【方案】
Key:学校 id+试卷 ID + paper;
Value:选择 String,试卷对象序列化数据。
【具体方案】
新增试卷:直接新增试卷数据;
删除试卷:直接删除试卷数据。
更新试卷:直接更新试卷
查询试卷:直接查询试卷
【方案分析】
增删改查都直接根据学校 id+试卷 id 操作的,效率高。
2 设计具体的读写流程(可以文字描述也可以序列图描述,序列图要有文字辅助说明)。
写:(1)试卷类需实现序列化
(2)将试卷信息写入到试卷对象中
(3)将试卷对象序列化
(4)根据学校 id+试卷 id 将序列化的数据设置到 redis 中
读:(1)根据学校 id+试卷 id 获取试卷的序列化数据
(2)将序列化数据反序列为试卷对象
3 对照模块 4 第 6 课的性能估算结果,计算 Redis sentinel 集群的服务器数量和性能。
试卷写入:试卷写入没有高性能、高可用需求,
试卷读取:根据性能估算结果可以看到试卷请求的 QPS 为 5 万/s,redis 单台的 QPS 性能为 5 万至 10 万/s,所以单纯性能上来讲,一台 redis 就足够了。但考试的时间来不及等待,是非常的重要,所以需要做到高可用,采用 Redis sentinel 集群,而 Redis sentinel 集群的特点至少需要 3 台机器支撑才能实现高可用,所有选择部署 3 台机器。机器 1 部署 master 节点、sentinel 节点,机器 2 和机器 3 都部署一套 slave 节点、sentinel 节点。
综上所述需要 3 台机器作为试卷的 Redis sentinel 集群
版权声明: 本文为 InfoQ 作者【人工智能~~~】的原创文章。
原文链接:【http://xie.infoq.cn/article/0f5d33455a6fd4ae450fdddb8】。文章转载请联系作者。
评论