写点什么

架构实战营模块四作业

作者:孙志强
  • 2021 年 11 月 21 日
  • 本文字数:708 字

    阅读完需:约 2 分钟

考试试卷存储方案设计

一、redis 数据结构

试卷内容

类型:string

key: 试卷 id

value:试卷 json 字符串

过期时间:依赖实际的考试时效来确定

理由:

试卷内的题目数量一般不会太多,不会造成 redis 大 key 问题,直接使用 string 来存储即可,简单高效。

考试列表

学生登录后,根据学生选择的课程信息班级信息会看到待考试列表

类型:zset

key: 班级 ID/课程 ID 具体取决于考试的维度,以班级为单位组织考试就存储班级 id,以课程为单位组织考试就存储课程。

field: 考试元数据信息 json(考试 id、试卷 id、考试分数、考试开始时间、结束时间等)

score: 考试开始时间戳(秒级)

过期时间:数据量不大,可不设过期时间;或者在 mysql 中存储数据,支持穿透到 mysql 读取这部分数据

理由:

1.考试列表支持按考试开始时间排序

2.高效的清理过期的考试


二、读写流程

学生获取考试列表

1.学生查询考试系统获取考试列表

2.考试系统查询本地缓存,如果没有就穿透到 redis 查询结果,将结果缓存到本地,缓存 5 分钟。

3.考试系统将考试列表返回给学生。

学生获取试卷

1.学生查询考试系统获取试卷信息

2.考试系统查询本地缓存,如果没有就穿透到 redis 查询,本地缓存 5 分钟

3.考试系统将试卷信息返回给学生

添加考试

1.教务在管理后台创建考试。

2.考试系统将考试信息和试卷信息存储到 redis 中。

三、服务器数量和性能

服务器数量

Sentinel 节点

数量:3 台(保证高可用,奇数保证选主)

规格:4 核 4G 服务器

redis 数据节点

数量:2 台,1 主 1 从

规格:2 核 8G 服务器

性能

sentinel 节点主要是管理 redis 集群的心跳和选主,不会存在性能问题。

redis 节点 2 核 8G 的 1 台服务器足够支持 5 万 qps 的访问,再加上我们在应用服务器上增加一层本地缓存,穿透到 redis 上的请求就更少了,2 台服务器来做 1 主 1 从保证集群的高可用。


用户头像

孙志强

关注

还未添加个人签名 2018.11.24 加入

还未添加个人简介

评论

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