模块四课程作业
前言
本文是就千万级学生管理系统的考试试卷存储方案进行设计和说明。
词汇表
Redis:Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用 ANSI C 语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value,并提供多种语言的 API。
Redis sentinel:Redis Sentinel 为 Redis 提供了高可用解决方案。
1、业务背景
千万级学生管理系统学生人数为 1000 万,每个学生平均一学期有 20 门课程,每年有 2 次考试,每次考试有 20 道判断题、20 道选择题,4 道大题,学校的考试都安排在某一个月内,考试的时候请求试卷,提交答案,中间答题过程浏览器本地完成,由于考试集中在上午 4 小时和下午 4 小时,
且请求试卷集中在考试开始的前 1 分钟,提交答案集中在考试结束前的 30 分钟,因此估算如下:
• 请求试卷:1000 万 * 20(课)/ 20(周末不考试) / 4(每天 4 堂考试)/ 1 分钟 = 250 万请求/分钟 ≈ 5 万/每秒。
基于以上场景进行设计,千万级学生管理系统存储架构分为了三种:试卷采用 redis sentinel 的模式,老师试卷分析采用 mysql 分区的模式,学生试卷则采用 HBase 进行存储。
本文要重点讨论的是 redis sentinel 的设计部署方案。
2、约束和限制
无
3、总体架构
3.1 架构分析
试卷采用 redis 的主要原因是 TPS 比较大,redis sentinel 支持主从的模式,因此性能比较好。另外,考试时间是一定的,需要系统具备较高的高可用性。redis sentinel 是 redis 官方提供的高可用解决方案。
3.2 总体架构
redis 支持 String、List、Set、Sorted Set、hash 以下五种类型。
试卷采用 hash 的形式进行存储,key 为考试的期数+科目,value 为试卷中所有的题目。
redis 读写流程为:
1、考试开始之前,管理后台通过 redis 客户端将试卷内容写入 redis;
2、考试开始时,学生在考试管理系统中从 redis 读取试卷内容;
3、考试管理系统根据从 redis 中读取的 value 值进行解析,并将试卷内容展示出来。
经上网查询:
以下系统参数配置,常用的 GET/SET/INCR 等命令,都在 8W+ QPS 以上。
系统 :CentOS 7.6 64 位
CPU :4 核
内存 :8 GB
磁盘 :40 GB ESSD 云盘
Redis :5.0.5
为保障冗余性,采用 8 核、16G 内存,80GB ESSD 的云盘。
评论