写点什么

架构实战训练营模块四作业

用户头像
NewBranSTONE
关注
发布于: 1 小时前
架构实战训练营模块四作业

设计千万级学生管理系统的考试试卷存储方案

【作业要求】

基于模块 4 第 6 课的估算结果和 Redis sentinel 的初步方案设计,完善考试试卷存储方案,具体包括:

• 完善 Redis 的数据结构设计,明确具体使用哪种 Redis 数据结构。

• 设计具体的读写流程(可以文字描述也可以序列图描述,序列图要有文字辅助说明)。

• 对照模块 4 第 6 课的性能估算结果,计算 Redis sentinel 集群的服务器数量和性能。

【提示】

1. 性能可以有一定冗余。

2. 如果对 Redis sentinel 不熟悉,请参考官方文档:https://redis.io/topics/sentinel

存储性能估算和建模

千万级别的学生,按照学院划分,一个学院期末考试总共需要考试 20 门,集中请求考试试卷请求主要发生在考试前的一分钟,提交答案集中在考试结束前的三十分钟,因此估算如下:

  1. 请求试卷:1000 万 * 20(课)/ 20 (周末不考试)/ 4 (每天 4 堂考试)/ 1 分钟 = 250 万请求 / 分钟 ≈ 5 万 / 每秒。

  2. 提交试卷:1000 万 * 20 (课)/ 20 (周末不考试) / 4 (每天 4 堂考试)/ 30 分钟 = 1700 / 每秒。

存储方案设计

  • 数据结构

采用 Redis 的 List,Key 为考试日期 + 科目 ID + 年级 ID,List 中 每一个 Value 以 Json 格式保存一道考试题目,因为考试题目会有选择题、判断题、简答题等类型以及题目数据,前端可以根据这个题目类型渲染不同的题目格式,所以需要以 Json 格式封装起来。

读写流程

  1. 老师在后台管理中提交试卷题目,按照 Key = 考试日期 + 科目 ID + 年级 ID ,Value 为具体的题目类型以及题目内容保存到 Redis 中。

  2. 考生在加载考试试卷的时候,根据考试日期 + 科目 ID + 年级 ID 寻找 Redis 中保存的 Value 值,将 Value 值返回给前端。

Redis Sentinel 集群服务器数量和性能

Redis 服务器 12G 内存,分片数 3 个,大概能支持 8 万的 QPS,最大接入数量 40000/ 分片。


用户头像

NewBranSTONE

关注

还未添加个人签名 2017.10.27 加入

还未添加个人简介

评论

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