写点什么

架构实战营 模块四作业

用户头像
Dylan
关注
发布于: 2021 年 05 月 23 日

【作业要求】

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

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

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

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

【提示】

1. 性能可以有一定冗余

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

 

1.     存储性能需求估算

【实现目标】

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

【用户量】

1000 万

【考试】

1. 在校学生考试结果存储:2.4T

2. 离校学生考试结果存储:每年增长 0.6T

3. 试卷请求 QPS:5 万/s

4. 提交试卷 TPS:1700/s

5. 试卷存储相比考试结果存储量很小(预估 1/50),无需特别设计。

 

2.     选择存储系统

选择分片架构:


学生管理系统存储架构图:



3.     设计存储方案

3.1 学生考试结果

【数据结构设计】

Key:学校 ID + 学号 ID + 考试 ID

Column Family:test

Column:result, score, 其中 result 是 json 格式

【读写分析】

1. 学生提交考试结果,直接按照 key 保存 result

2. 老师改卷后,直接写入 score

3. 学生查看自己的成绩,按照 key 读取 result 和 score,可以看到得分和具体错在哪里

 

3.2 试卷存储数据结构

Key:学校 ID + 学院 ID + 专业 ID + 试卷 ID

Value:sorted set 类型,按题号做 score 进行排序,采用 json 格式存储试卷内容

 

【完善 Redis 的数据结构设计】

由于试卷请求 QPS 达到 5 万/s,读请求峰值很高,单机可以支撑写性能,单机可以支撑读性能,需要自动切换,决定采用 Redis sentinel 的存储方案。

Redis 中共有五种常见数据结构: 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets)。基于 sorted set 有序,且数据不重复的特性,选择 sorted set 数据结构。

 

【试卷读写流程】

  1. 试卷写入:

老师登录管理系统,并选择学校、学院、专业、课程、试卷期数,生成试卷 id,开始录入试卷。客户端向 Redis 数据库发送试卷写入请求,根据学校 id+学院 id+专业 id+试卷 id 写入试卷各个题目,以 sorted set 存储 json 格式试卷题目,题目序号作为 score 权重,Redis 数据库向客户端返回写入成功消息。

  1. 试卷读取:

学生登录管理系统,并选择学校、学院、专业、课程、试卷期数,读取试卷 id,开始读取试卷。客户端向 Redis 数据库发送试卷读取请求,根据学校 id+学院 id+专业 id+试卷 id 读取试卷各个题目,读取以 sorted set 存储的 json 格式试卷题目,Redis 返回读取成功消息。

 

【redis sentinel 集群的服务器数量和性能】

Redis sentinel 集群因为至少 3 个 sentinel 节点,3 个 redis 数据节点,所以 redis 服务器数量需要至少 6 台,采用 1 主 2 从 3 哨兵的部署方式,共需 6 台服务器,redis 单机可支持 5W/QPS,3 台 redis 可支持 15W/QPS,性能已存在冗余。

 

发布于: 2021 年 05 月 23 日阅读数: 9
用户头像

Dylan

关注

还未添加个人签名 2018.11.22 加入

还未添加个人简介

评论

发布
暂无评论
架构实战营 模块四作业