写点什么

架构训练营 - 模块四作业

作者:Sam
  • 2023-02-12
    重庆
  • 本文字数:771 字

    阅读完需:约 3 分钟

背景

试题数量:20(课) * 2(考试次数) * (20 (判断题) + 20(选择题) + 4(大题)) * 3(只有前三年考试) = 5280 道题

试卷存储容量估算

1. 判断题:100 字;选择题:100 字;大题:1000 字

2. 100 * 20 + 100 * 20 + 1000 * 4 = 8000 字,约:16000 字节(Byte)

3. 单张试卷:16000 / 1024 = 20KB(约)

4. 单个学校:20(课) * 2(考试次数) * 3(只有前三年考试)  * 20KB = 2400KB = 3M

5. 200(学校) * 3M = 600M ,放大 10 倍:6000M = 7GB(约)

Redis 存储方案设计

数据结构设计

  1. 采用 set 进行数据存储

  2. key: 学校 ID+课程+学级+考次

  3. 考次:以学级开始,然后以次从 1 开始递增

  4. key 示例

  5. 1001(学校)02(课程)2005(学级)01(一学年第一次)

  6. 1001(学校)02(课程)2005(学级)02(一学年第二次)

  7. ....

  8. 1001(学校)02(课程)2005(学级)06(三学年第二次)

  9. Value:试题 JSON 字符串

读写分析

考试读试卷分析

  1. 考生在进入考试系统,单击“开始考试”时,通过考虑的学号获取获取考生的学校、学级和考次,再加当前考试的课程,拼接成 Key,直接通过 Key 获取,序列图如下:

组合试卷 Key 说明:通过学生信息获取 学校 Id,学级 Id,再通过传入课程 Id、考次,进行 Key 的组合

老师制作试卷写分析

  1. 教师在制卷功能中,单击“制卷”通过 Key 对 Redis 中缓存数据进行更新

  2. 通过教师的任课信息,获取学校 Id、任课学级 Id

  3. 再通过输入或者选择的方式,获取课程 Id,和考次信息

  4. 再组合试题并存储

说明

  1. Key 的格式设计,是确保学生只需要查询一次 Redis 就可获取试卷数据

  2. 考虑到试卷更新不频繁,而读取频繁,所以 Value 设计为 JSON 字符串

Redis 集群规模

  1. 由试卷存储容量为 7GB 条件,得出服务器内存配置为 16GB 即可;

  2. 由于 Value 为试卷内容 JSON 字符串,字符串较长,所以预估单台 Redis 的 QPS:4w,所以 5w/s,数据服务器:需要 3 台服务器(两台可以承载所有 QPS,多加一台是用于考虑冗余)

  3. 用 3 台服务器作为 sentinel,来保证集群的高可用

  4. 合计:3 台数据服务器、3 台 sentinel 服务器,共 6 台

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

Sam

关注

还未添加个人签名 2018-11-19 加入

还未添加个人简介

评论

发布
暂无评论
架构训练营 - 模块四作业_架构实战营_Sam_InfoQ写作社区