写点什么

模块四作业

用户头像
河马先生
关注
发布于: 1 小时前

【作业要求】

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

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

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

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

【提示】

1. 性能可以有一定冗余。

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


1. 存储性能预估

1.1 存储假设和预估

每门学科每学期 2 次考试,每个学生平均一学期 20 门课,考试采取机考的方式,每门考试的答案 20 判断题、20 选择题、4 道大题。

  • 假设每道判断题 50 个字符,全部为中文,采用 UTF-8 字符存储,每个中文字符 3 个字节存储,判断题占用 20*50*3B = 3KB;

  • 假设每道选择题 50 个字符,全部为中文,且每题 4 个选项,每个选项 50 个字符,采用 UTF-8 字符存储,每个中文字符 3 个字节存储,选择题占用 20*50*3B + 20*4*50*3B = 15KB;

  • 假设每道大题 200 个字符,全部为中文,采用 UTF-8 字符存储,每个中文字符 3 个字节存储,大题占用 4*200*3B=3KB;

一份试卷需要占用 20KB 左右存储。

每个学生 20 门课,假设每 200 个学生是一个院系,使用一份相同的试卷

一次考试试卷占用存储:1000 万*20(课程)*20KB(每课试卷存储)/200 ≈20GB

一年考试试卷占用存储:20GB*2(次考试)*2(学期) ≈160GB

过完一学期可以将试卷转存到 HBase 中,保证 Redis 存储中只保留一个学期的试卷数据 40GB

1.2 读写请求假设和预估

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

因此估算如下:

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

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

2. 存储系统选型

  1. 为应对请求试卷 QPS 为 5 万/秒的要求,采用 Redis 存储

  2. 由于试卷都是提前编辑好,保存到存储系统的,考试的时候只需要读请求,因此直接使用 Redis 的主从存储方案

  3. 为了能够保证考试时存储系统高可用的要求最终采用 Redis Sentinel 存储架构

  4. 对于历史学期考试试卷使用 HBase 来存储

3. 存储方案设计

3.1 考试时 Redis 数据结构设计

Key:学校 ID+年份+学期+考试 ID。

Value 格式:String

3.2 Redis Sentinel 架构


3.3 读流程

  1. 教师提前将试卷编辑好,存入到 Redis 中

  2. 进行考试时,直接根据学校 ID +考试 ID,获取考试试卷内容

  3. 一学期结束后,会将 Redis 内的数据转存到 HBase 中

  4. 读取历史的试卷,根据年份+学期来判断是否为历史考试试卷,为历史试卷则从 HBase 中读取试卷信息

3.4 Redis Sentinel 集群服务器数量和性能

  • Redis 服务器 3 台, 每台 4C / 64GB ,一主两从搭建主从部署,三个服务器可以同时提供读请求

  • Redis Sentinel 在每台服务器上部署一个,三个 Redis Sentinel 组成一个集群


用户头像

河马先生

关注

还未添加个人签名 2019.04.16 加入

还未添加个人简介

评论

发布
暂无评论
模块四作业