写点什么

架构实战营作业四

作者:库尔斯
  • 2022 年 4 月 30 日
  • 本文字数:1082 字

    阅读完需:约 4 分钟

架构实战营作业四

作业:

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

【作业要求】

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


解答:


  1. 读写性能复杂度分析:

假设学校的考试都安排在某一个月内,考试的时候请求试卷,提交答案,中间答题过程浏览器本地完成,由于考试集中在上午 4 小时和下午 4 小时,且请求试卷集中在考试开始的前 1 分钟,提交答案集中在考试结束前的 30 分钟,因此估算如下:

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

提交试卷: 1000 万 * 20(课)/ 20(周末不考试) / 4(每天 4 堂考试)/ 30 分钟 = 1700/每秒。


  1. 解决方案:

试卷库可以使用 HBASE 存储。因为各个学校需要永久存储每年的各科试卷,数据量较大。HBASE 适宜这种结构简单,但数据量较大的应用。

试卷的使用需要使用 Redis 数据结构。根据以上分析,系统的最高 QPS 达到 5 万/秒,HBASE 就不合适了。使用 Redis sentinel 作为存储系统比较合适。因为 Redis 的读性能完全满足 5 万/秒的要求;同时,使用 Redis sentinel 可以较好地解决高可用的问题;并且,Redis 是成熟的开源软件,开发和运维都比较容易。

因为试卷是结构简单的数据,所以使用 Redis 的 String 类型来存放,具体的结构如下:

key: 学校 id+试卷 id

value: 试卷内容


  1. 读写流程:

考试当天,提前读取所需试卷及答案(标准考试的答案,比如选择题答案)到 Redis。考生开考时下载到终端进行考试。Redis 的高 QPS 的特性可以满足超过 5 万/秒的 QPS。不过需要注意的系统流量带宽。

考生答题的结果临时存储在本地文件,提交的时候,标准题目可以立刻依据答案进行批改,整个答题结果提交到答题系统的 MySQL 系统存储,那里面带有学生信息,各题目信息以及解答信息。以供老师批改试卷(如果有必要),及后续分析学生的答题/学习情况。

考试结束的时候,系统将考生信息、试卷及答题和批改情况全部上传到 HBASE,留档,供永久保存,备查。


  1. Redis sentinel 架构:

根据以上的复杂度分析,Redis sentinel 需要支持 5 万/秒的 QPS,这对 Redis 来说不是问题。只需采用一主两备的方案即可。架构图如下:


一个 Redis master, 两个 replica,每个节点安装一个 sentinel,作监控和故障切换节点。三个 sentinel 能够保证在 master 出现故障的时候,R2 或 R3 能够进行 fail over,保证系统继续可用。

发布于: 刚刚阅读数: 3
用户头像

库尔斯

关注

还未添加个人签名 2018.04.10 加入

还未添加个人简介

评论

发布
暂无评论
架构实战营作业四_#架构实战营_库尔斯_InfoQ写作社区