写点什么

【架构实战营作业】模块四——学生管理系统存储

用户头像
聆息
关注
发布于: 刚刚

一、估算性能需求

1、用户量估算:1000 万

2、关键行为:

  • 登陆注册

  • 文件上传下载

  • 选课

  • 考试

3、试卷存储和访问性能需求

题目中要求对考试试卷的存储方案的设计,所以这里引用视频中预估的考试系统的性能分析,主要数据有:


估算中试卷的请求 QPS 达到了 5w/s,但这是高并发下的读请求场景,试卷由老师提前上传(这里暂时不考虑 ABC 卷的情况),考试开始后并不会对试卷进行修改操作。因此此场景可以选用 Redis 来对试卷作缓存,以此来抵挡试卷请求这一大流量读操作。


二、Redis 简单介绍

1、Redis 是一个开源的,基于内存的数据结构存储系统,它可以用作数据库、缓存和消息中间件。实现语言是 C 语言,基于内存,核心计算线程是单线程,因此又没有线程上下文切换带来的性能开销。新版本的 Redis 又采用了 IO 多路复用,使得性能又大大提高。

2、考虑到 Redis 基于内存并要保证考试中试卷读操作的高可用,所以要采用 Redis 的主从 + 哨兵(Redis sentinel)设计。


三、选用 Redis 数据结构

基于以上综合分析得出,考试试卷的存储和访问可以采用 Redis 存储系统.

数据结构选择:若试卷的存储格式为 Json 便可以直接采用 Redis 的 String 数据结构存储整个试卷对象,也可以将所有题分开,按照题号有序的存储于 Redis 的 List 数据结构中

key:学校 + 年级 + 专业 + 学科

value:

(1)若采用 String,直接存储整个试卷内容对象;

(2)若采用 List,一个节点存储一个题对象。


四、考试试卷存储主要涉及以下行为

1、学生

  • 开考时读取试卷

  • 考试中临时保存答案

  • 最终提交答案

  • 查看考试成绩

2、老师

  • 考前生成或修改试卷完成最终提交

  • 批改试卷并评分

该过程具体读写流程如下图:



五、Redis sentinel 集群数量和性能

根据估算性能得出的试卷请求峰值 QPS 为 5w/s,而单台多核高性能服务器部署 Redis 的读请求 QPS 基本上是可以支撑这一访问量的,所有理论上一台 Redis 服务即可支撑试卷读请求,由于单台 Redis 可能会丢失数据又考虑到减轻单台 Redis 的压力,可以再加上一台从机服务,实现 Redis 的主从同步。也就是一台 master,一台 salve,这样就可以分摊读请求了。又考虑到要保证考试试卷访问和存储的高可用,应该使用 Redis sentinel(哨兵)来保证高可用。

当 Redis 的主机出现问题或宕机时,Redis sentinel 服务之间是需要进行内部的选举的,又该设计中 Redis 服务只需要一主一从,所有只搭建 3 台服务组成 Redis sentinel 集群即可,具体的 Redis 架构如下图:


用户头像

聆息

关注

还未添加个人签名 2018.11.19 加入

还未添加个人简介

评论

发布
暂无评论
【架构实战营作业】模块四——学生管理系统存储