架构训练营 - 模块四作业
背景
试题数量: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 存储方案设计
数据结构设计
采用 set 进行数据存储
key: 学校 ID+课程+学级+考次
考次:以学级开始,然后以次从 1 开始递增
key 示例
1001(学校)02(课程)2005(学级)01(一学年第一次)
1001(学校)02(课程)2005(学级)02(一学年第二次)
....
1001(学校)02(课程)2005(学级)06(三学年第二次)
Value:试题 JSON 字符串
读写分析
考试读试卷分析
考生在进入考试系统,单击“开始考试”时,通过考虑的学号获取获取考生的学校、学级和考次,再加当前考试的课程,拼接成 Key,直接通过 Key 获取,序列图如下:
组合试卷 Key 说明:通过学生信息获取 学校 Id,学级 Id,再通过传入课程 Id、考次,进行 Key 的组合
老师制作试卷写分析
教师在制卷功能中,单击“制卷”通过 Key 对 Redis 中缓存数据进行更新
通过教师的任课信息,获取学校 Id、任课学级 Id
再通过输入或者选择的方式,获取课程 Id,和考次信息
再组合试题并存储
说明
Key 的格式设计,是确保学生只需要查询一次 Redis 就可获取试卷数据
考虑到试卷更新不频繁,而读取频繁,所以 Value 设计为 JSON 字符串
Redis 集群规模
由试卷存储容量为 7GB 条件,得出服务器内存配置为 16GB 即可;
由于 Value 为试卷内容 JSON 字符串,字符串较长,所以预估单台 Redis 的 QPS:4w,所以 5w/s,数据服务器:需要 3 台服务器(两台可以承载所有 QPS,多加一台是用于考虑冗余)
用 3 台服务器作为 sentinel,来保证集群的高可用
合计:3 台数据服务器、3 台 sentinel 服务器,共 6 台
版权声明: 本文为 InfoQ 作者【Sam】的原创文章。
原文链接:【http://xie.infoq.cn/article/e12506d837b3a72214db674fb】。文章转载请联系作者。
评论