写点什么

【作业四 千万级学生管理系统的考试试卷存储方案】

作者:wuli洋
  • 2022 年 6 月 19 日
  • 本文字数:911 字

    阅读完需:约 3 分钟

【作业要求】

基于模块 4 第 6 课的估算结果和 Redis sentinel 的初步方案设计,完善考试试卷存储方案,具体包括:• 完善 Redis 的数据结构设计,明确具体使用哪种 Redis 数据结构。• 设计具体的读写流程(可以文字描述也可以序列图描述,序列图要有文字辅助说明)。• 对照模块 4 第 6 课的性能估算结果,计算 Redis sentinel 集群的服务器数量和性能。


【提示】

1. 性能可以有一定冗余。2. 如果对 Redissentinel 不熟悉,请参考官方文档:https://redis.io/topics/sentinel


【答案】

根据第 6 节的存储需求

【登录】

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。


【数据结构设计】

因为 qps 与 tps 差距明显,而且试卷并不是频繁修改的业务场景,因此是一次写入,多次读取;且需要保证读取服务的负载均衡和稳定性,因此采用 centinel 集群,结构采用 hashmap


key:年份 + 学校 id + 学号 id

field:科目名

val:试卷


写流程:用 mysql 做持久化,先查 mysql 有数据没:没有直接写 db 并将结果同步到 redis master;有则看是否有不一样的地方:没有就不做处理,有则更新 db 对应记录,并更新 redis master;

读流程:直接读 redis 从,没有则去 db 读取:能读到则同步写入到 redis master,不能读到,返回错误;


计算 Redis sentinel 集群的服务器数量和性能:

考试时,试题的读取为 5 万 QPS,一般单台 redis 的性能为 5W-10W(QPS)之间

Redis sentinel 模式为了保证高可用,一般最少为 3 节点(奇数节点防止脑裂)采用经典的三节点即可,因为 sentinel 耗费的资源不多,工作为监控,选主,通知。可以把 sentinel 和本身的三节点部署一起即可。需要 3 台机器。读写性能 15 万 QPS+主流配置的服务器,带宽 15M+,单台 redis,加上做一些优化,基本可以 hold 住。引入 redis sentinel 一个是为了增加性能,底子上也是 master-slave 的模式。另一个原因就是为了高可用。


用户头像

wuli洋

关注

还未添加个人签名 2019.12.07 加入

还未添加个人简介

评论

发布
暂无评论
【作业四 千万级学生管理系统的考试试卷存储方案】_wuli洋_InfoQ写作社区