【架构实战营作业】模块四——学生管理系统存储
一、估算性能需求
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 架构如下图:
评论