架构实战营 - 模块四
一、数据结构设计
试卷是由不同的题型按照特定的顺序组成,每个题型下的问题也是按照特定的顺序存储,可以使用 Redis 的 SortedSet 进行存储。
假定某一学期期末考试的数学试卷 Key 为 math_21_02,数据结构采用 SortedSet,存储考试题型与对应的排序分数,比如单选题 : 10、多选题 : 9、判断题 : 8、简答题 : 7。每个题型下存储的问题同样适用 SortedSet 进行存储,按照生成试卷时问题的顺序进行分数设置与存储。数据结构设计图如下:
有可能存在同一场考试多个试卷的情况,这个时候就要另外生成考生与试卷的对应关系,可以采用 String 结构存储。
二、数据读写流程
管理员或者老师通过学生管理系统创建考试安排与考试对应的试卷组成信息后,后端服务通过定时任务对即将进行的考试进行数据缓存,按照上述的数据结构进行数据存储。可以通过 Pipeline 减少请求 Redis 次数,可以使用 Lua 脚本保证缓存数据的一致性。
学生登陆系统,准备考试时,后端服务通过 Redis 获取完整的试卷信息即可。
三、服务器集群
3.1 Sentinel 节点
Sentinel 节点集群为防止脑裂问题必须采用奇数个,且最少三个,建议购买 3 台,配置不需要太高,选择 2 核 4G 即可
3.2 数据节点
数据节点集群建议选择 2 核 32G,建议购买 5 台,采用 1 主 4 从的架构,Redis 在 1 核 1G 内存的配置下,QPS 大概在 5 万-10 万之间,我们选择 32G 的,QPS 只会比 5 万要大,满足存储评估值。
总体来说,更高的配置对于 Redis 来说,只是能够存储更过的数据,QPS 并不会有太大的增加,可以考虑采用 Redis Cluster 方案。
评论