架构实战营模块四作业
千万级学生管理系统的考试试卷存储方案设计
Redis 的数据结构设计
使用 redis 的 hash 结构存储。
存储试卷准确来说应该是存储考题,使用 redis 作为存储,是因为学生在线上考试时读取试卷试题的时候访问量很大,为了防止数据库崩溃,使用 redis 作为缓存。所以 redis 里存储当时考试时用的考题即可,考试过后就可以清空了。
考试页面应该是每页显示一道题,学生答完之后点下一道这种形式。
使用 hash 结构的原因是试题会有多种,有选择、判断、问答、填空几种形式,选择、判断、填空可以线上直接完成答题结果判断,redis 的数据里的 value 要存试题内容,答案,选择题要存选项,最好是分开存储,在后台程序调用的时候会比较方便,所以使用 hash 这种复合结构存储。
key 里要存的内容有试卷编号、题目编号,中间用分隔符分隔,比如试卷编号_题目编号,后端可以封装一个接口,传入试卷编号+题目编号从 redis 里查询考题。
例子
具体的读写流程
1.开始考试后先从 redis 里读取考题,然后返回考题到页面上。
2.然后学生填写答案,如果是选择题、判断题等固定答案的考题,学生点交卷后可以直接读 redis 里的答案进行比对,比对结果写入 HBASE。
3.交卷后问答题等主观题的学生答题结果写入 HBASE,后续老师进行批阅。
Redis sentinel 集群的服务器数量和性能
第 6 课评估的考试时的 QPS、TPS 数据如下:
试卷请求 QPS:5 万/s
提交试卷 TPS:1700/s
提交试卷时非主观题可以直接读 redis 里的正确答案出结果,可以使用异步的方式实现,对 redis 不会有特别大的读取 QPS。所以只考虑请求试卷的 5 万/s 的 QPS。
redis 单机性能测试
在本机(CPU:2.4 GHz 四核,内存:16G)上执行性能测试命令,能支持 8 万左右的 qps。
集群数量
所以 Redis sentinel 集群服务器使用 1 主 1 从就可以支持试卷读取的 qps,了解到一般节点和 sentinel 都用奇数个节点,有利于防止脑裂。所以使用 3 节点哨兵集群,1 主 2 从,3 个哨兵分别和主从节点部署在一起。共需要 3 台服务器。
集群的性能
考试读取试卷的场景都是读的 qps,写时候是同步试卷的时候 qps 不会很高,可以不用读写分离。1 主 2 从都可以承载读请求。如果每台服务器和我本机一致用 4 核 16G,每台支持 8 万 qps,整体应该可以支持 24 万左右的 qps。
版权声明: 本文为 InfoQ 作者【老猎人】的原创文章。
原文链接:【http://xie.infoq.cn/article/23d835e4d47e489a80f082f17】。文章转载请联系作者。
评论