写点什么

架构实战 模块四作业

作者:mj4ever
  • 2022 年 1 月 09 日
  • 本文字数:1026 字

    阅读完需:约 3 分钟

0. 作业要求



1. Redis 数据结构设计

1.1. 考生读取试卷

试卷在 redis 中采用字符串数据类型,设计思路如下:

  • 虽然有 1000 万学生要进行考试,但是考卷的类型要远远小于这个数量级,课程英文名称:试卷模板 ID 作为 key

  • 将考卷的试题内容处理为 JSON 字符串,作为 value

  • 并设置为期 2 小时的过期时间

set mathematics:20220109001 '[{\"题号\":1,\"类型\":\"判断题\",\"题目\":\"redis处理速度快,是因为采用了多线程\",\"答案\":\"\"},{\"题号\":2,\"类型\":\"选择题\",\"题目\":\"以下哪一个不是redis处理速度快的原因:A-内存访问 B-非阻塞IO C-单线程 D-多线程\",\"答案\":\"\"},{\"题号\":3,\"类型\":\"简答题\",\"字数限制\":200,\"题目\":\"以下哪一个不是redis处理速度快的原因:A-内存访问 B-非阻塞IO C-单线程 D-多线程\",\"答案\":\"\"}]' ex 7200
复制代码

1.2. 考生提交试卷时

试卷在 redis 中同样采用列表(即 list)数据类型,设计思路如下:

  • lpush + brpop,将 redis 当做队列使用

  • 提交试卷时,只进行试题答案的提交,课程英文名称:日期 yyyymmdd 作为 key,考卷的答案处理为 JSON 字符串,作为 value

lpush mathematics:20220109 '{\"20220109001:990411005\":{\"1\":\"错\",\"2\":\"D\",\"3\":\"1、纯内存访问,Redis将所有数据放在内存中,内存的响应时长大约为100纳秒;2、非阻塞I/O,Redis采用epoll作为I/O多路复用技术的实现,再加上Redis自身的事件处理模型将epoll中的连接、读写、关闭都转为事件,不在网络I/O上浪费过多的时间;3、单线程避免了线程切换和竞争态的消耗\"}}'
brpop mathematics:20220109 0
复制代码



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,单机性能是足以满足的

用户头像

mj4ever

关注

还未添加个人签名 2017.10.18 加入

还未添加个人简介

评论

发布
暂无评论
架构实战 模块四作业