写点什么

【架构实战营】第 4 模块作业

用户头像
swordman
关注
发布于: 2021 年 05 月 23 日
【架构实战营】第 4 模块作业

【作业题目】

设计千万级学生管理系统的考试试卷存储方案

【作业要求】

基于模块 4 第 6 课的估算结果和 Redis sentinel 的初步方案设计,完善考试试卷存储方案,具体包括:

1)完善 Redis 的数据结构设计,明确具体使用哪种 Redis 数据结构

2)设计具体的读写流程(可以文字描述也可以序列图描述,序列图要有文字辅助说明)

2)对照模块 4 第 6 课的性能估算结果,计算 Redis sentinel 集群的服务器数量和性能

【提示】

1. 性能可以有一定冗余

2. 如果对 Redis sentinel 不熟悉,请参考官方文档:https://redis.io/topics/sentinel


【作业内容】

【为什么用 Redis sentinel】

考试试卷存储,主要用于以下两个场景:

1.老师在考试前提交试卷内容;

2.学生在考试前一分钟读取试卷内容;


根据实战案例中的估算:

第一项是写请求,每张卷子只需要上传一次,可以不考虑 TPS;

第二项是读请求,峰值很高,QPS=5 万/s;


由于读请求峰值很高,使用 Redis sentinel 实现读写分离,并能充分利用 Redis 的性能优势。


【数据结构设计】

Redis 的数据结构使用使用 Sorted set,有序但不重复,用提交时的题目序号作为 score。


数据结构设计如下:

Key:学校 ID + 考试 ID

数据类型使用 Sorted set:以题目类型作为 score,如选择题 1, 判断题 2, 大题 3

如:

1.1: 选择题 1 题目

1.2: 选择题 2 题目

2.1: 判断题 1 题目

2.2: 判断题 2 题目

3.1:大题 1 题目

这样做的好处是可以自动排序,并且可以自动扫描去重。


【读写流程】

1. 老师提交试卷内容,新建一个 key,将考试内容写入存储

2. 学生请求试卷内容,通过查询 Key,以 score 升序排列,读取试卷内容。


【服务器数量和性能】

单个 Redis 服务器能承载的 QPS 在 5 万/s 左右,因此需要三台服务器。

一台 Master 主数据节点,一台 slave 从数据节点,一台 Sentinel 监控服务器。

从节点能够分担读请求,如果一个主节点没有按照预期工作,Sentinel 会开始故障转移过程,把一个从节点提升为主节点。


请求试卷峰值:

1000 万 * 20(课)/ 20(周末不考试) / 4(每天 4 堂考试)/ 1 分钟 = 250 万请求/分钟 ≈ 5 万/每秒


Redis sentinel 能够承担 5-10 万/每秒的 QPS。


用户头像

swordman

关注

还未添加个人签名 2017.10.17 加入

还未添加个人简介

评论

发布
暂无评论
【架构实战营】第 4 模块作业