写点什么

模块四作业:千万级试卷结构设计

用户头像
吴传卜
关注
发布于: 1 小时前

复杂度来源:

  1. 考试过程:考试题的 redis 内存结构,试题加载到学生客户端

  2. 考试历史:考试完后的考试结果存储


结构设计

考试试卷内容分析和估算

试卷内容:

频率:每学期 20 门课程,每年考试 2 次,每次考试 1 小时,每天考 4 课

内容:20 道判断题,20 道选择题,4 道大题

性能:在校生 1000 万,每次考试为 1 小时,每个学生最大容量为 1000 万人同时考一门课程

1000 万人最大并发请求一份试卷

1000 万人要考试,(每天考 4 堂),平均到每分钟 60 秒, 约等于 5 万/秒的并发量


关键行为分析:

  1. 运营后台系统录入考试题

  2. 考题加载 redis 准备开始考试

  3. 开始考试每个学生生成一份考卷

  4. 考试结束后试卷在 Redis 中存储一个月,判卷完成,成绩封存后结果保存到 mysql


Redis 试卷存储结构设计:

整体架构采用哨兵模式



Redis 试卷存储方案设计

【基于 Hash 结构的课程试卷设计】

一个课程可能有多套试卷

key: 课程试卷前缀+课程 id

hash:field: 课程对应的试卷序号

hash:value: 单个试卷的 key

【试卷读写分析】

运营后台可为一个课程管理多套试卷和考题

【基于 zset 结构的单个试卷设计】

key: 试卷类型前缀+课程 id+试卷序号(单个试卷的 key)

value: 字符串 json,{试题类型,试题内容,试题分数}

scores: 加载的前后顺序

【试卷读写分析】

学生根据考试的课程随机选择一份试卷或指定试卷进行考试

学生个人考卷存储方案

【基于 Hash 结构的试卷设计】

key: 考试结果前缀+学生 id

hash:field: 课程 id

hash:value: 课程考试结果 json{试卷 Key,试题答案内容:{},试题分数}

【试卷读写分析】

根据学生 id 保存全部学生的试卷答题结果


读写流程


服务器数量和性能设计


32 核服务单机 5~10 万 tps,而我们预估的并发在 5 万/秒

sentinel 节点采用 3 台 4 核 16G 的主机实例,

Redis 部署采用一主二从的主从部署结构,3 台机器采用 32 核 128G 配置


用户头像

吴传卜

关注

https://www.cnblogs.com/buoge 2017.11.10 加入

https://www.cnblogs.com/buoge

评论

发布
暂无评论
模块四作业:千万级试卷结构设计