写点什么

如何设计业务高性能高可用存储架构 - 作业

  • 2022 年 6 月 19 日
  • 本文字数:967 字

    阅读完需:约 3 分钟

如何设计业务高性能高可用存储架构 - 作业

作业要求

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

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

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

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

数据估算

数据大小

假设每门学科每年 2 次考试,每个学生平均一学期 20 门课,考试采取机考的方式,每门考试的答案 20 判断题、20 选择题、4 道大题(答案 200 字以内)

假设每个学生平均一学期 20 门课,其中基础课 10 门,专业必修课 5 门,专业课 5 门。500 所学校有 10 个学院,每个学院 10 个专业。每个题目占用 50 字节。

估算所得,

总共课程数

500 * [100 * 5(专业课)+ 10 * 5(专业必修课)+ 10 (公共基础课)]= 280,000 门课程

学年总考试数

280000 * 2 = 560,000

考试试卷数据大小

试题大小:560,000 * 50 字节 *44 题 = 1.2GB

答案大小:560,000 *( 200 字节 *4 题 + 2 字节*20 题) = 450MB

数据请求并发

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

请求试卷 QPS

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


数据结构设计

每个学校的每门课程使用 hash 来存储,试题和答案分开存储,Redis 存储 3 年试题数据(1.65G * 3 = 4.95GB)

试题 hash

Key: Item+学校 ID+课程 ID+考试日期

Hash Key:题目 ID

Value: 试题内容

答案 hash

Key: Answer+学校 ID+课程 ID+考试日期

Hash Key:题目 ID

Value: 试题答案

读写分析

  1. 老师准备试卷,将课程考试题目一题一题存入 Redis 试题 hash

  2. 学生通过学校 ID,课程 ID 和题目 ID 来获取试题

考试流程

  1. 学生登系统获取学生 ID,学校 ID

  2. 在 MySQL 选课表中,根据学生 ID 查询到当前是否需要参加课程考试,如果需要,返回课程 ID 和考试日期

  3. 根据课程 ID,利用`hgetall`命令,获取课程试题所有题目 ID 和试题内容

存储架构

  1. 试题+答案数据大小<2GB, 使用 1 * Redis Master + 2 * Redis Slave 的 sentinel 架构已经够用。(简单原则)

  2. Redis node 配置:16vCPU, 32G Memory (合适原则)

  3. 集群性能能支撑 5 万/每秒的试题请求

  4. 试题数据主从复制,每个节点都可支持读请求,Master 故障自动切换到 Slave

用户头像

还未添加个人签名 2018.02.08 加入

还未添加个人简介

评论

发布
暂无评论
如何设计业务高性能高可用存储架构 - 作业_阿拉阿拉幽幽_InfoQ写作社区