架构实战 模块四作业
0. 作业要求
1. Redis 数据结构设计
1.1. 考生读取试卷
试卷在 redis 中采用字符串数据类型,设计思路如下:
虽然有 1000 万学生要进行考试,但是考卷的类型要远远小于这个数量级,课程英文名称:试卷模板 ID 作为 key
将考卷的试题内容处理为 JSON 字符串,作为 value
并设置为期 2 小时的过期时间
复制代码
1.2. 考生提交试卷时
试卷在 redis 中同样采用列表(即 list)数据类型,设计思路如下:
lpush + brpop,将 redis 当做队列使用
提交试卷时,只进行试题答案的提交,课程英文名称:日期 yyyymmdd 作为 key,考卷的答案处理为 JSON 字符串,作为 value
复制代码
2. 读写流程
2.1. 考生读取试卷
浏览器:考生登录学生管理系统
浏览器:选择当日考试科目,点击访问
后台应用:接到请求,根据前台提供的学生信息、考试科目信息,生成 key 课程英文名称:试卷模板 ID
后台应用:根据 Redis Sentinel 访问 Redis 数据库,获取考卷
浏览器:得到考卷内容,浏览器进行渲染,生成考卷
2.2. 考生提交试卷
浏览器:考生提交考卷,浏览器仅将学生信息、考试科目信息、试卷答案提交给后台
后台应用:接到请求,根据前台提供的学生信息、考试科目信息,生成 key 课程英文名称:试卷模板 ID:考生学号
后台应用:根据 Redis Sentinel 访问 Redis 数据库,保存本次考试结果
浏览器:得到考卷保存提示
3. 服务器数量和性能
Sentinel 服务器,3 节点,4C 8G
Redis 服务器,3 节点,4C 32G
读取试卷,每秒 5 万的 QPS,3 个节点读写分离,单机平均每秒 1.7 万/QPS 的请求,可以满足
提交试卷,每秒 1700 的 TPS,单机性能是足以满足的
评论