写点什么

架构实战营模块 4 作业

发布于: 4 小时前

【作业题目】

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

【作业要求】

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

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

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

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

【提示】

1. 性能可以有一定冗余

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


性能分析

假设每个大学平均 5 万人,1000 万人大概有 200 所大学,假设每所大学平均 100 个专业,每个专业设置 20 门课,则试题种类有 200(所大学)*100(个专业)*20(门课程)=40 万种试题

假设每道题题目描述平均 300 字,每个试卷的大小为:44(道题)*200(中文字)*3(字节,UTF8 编码)=26400 字节 大约为 26Kb

那么一年的考试试卷需要的存储空间为 40 万*26Kb*2(次考试)=20800000Kb 大约为 20GB,此外,还需要预留一定空间来存储


该容量单机内存足够存储,因此 redis sentinel 数据节点采用一主两从,每台内存为 32G,sentinel 节点采用 3 个,总服务器至少 6 台。


由于 1000 万学生的答题信息比较庞大,对读写性能要求比较高,可以可以存放在 hbase


如果题目和答案涉及图片,图片存储在专门的 oss 图片服务器上,利用 cdn 加速


根据之前第 6 课对于 QPS 的预估为 5W,根据 redis 的读性能,足够满足


数据结构

redis 数据结构

考试信息

采用 list 结构

key:学校 id+考试 id

value:list 存放习题 id+习题内容


hbase 数据结构

对于客观题,只需要一张表

(习题成绩表)

table:成绩反馈表

row key:学生 id+考试 id+习题 id

column:题目信息,习题答案,学生答题情况,得分,答题反馈,考试信息,答题时间


对于主观题,需要两张表

数据结构 1

table:答题情况表

row key:学生 id+考试 id+习题 id

column:题目信息,习题答案,学生答题情况,答题时间

数据结构 2(习题成绩表)

table:成绩反馈表

row key:学生 id+考试 id+习题 id

column:题目信息,习题答案,学生答题情况,得分,答题反馈,考试信息,批改时间


读写场景

考试前一天,试卷加载到 Redis 保存,设置试卷数据保存时间为一天。

  • 学生在考试开始 1 分钟前,通过(学校 id+考试 id)请求试卷

  • 从 Redis 获取考试数据(JSON 格式),存储在浏览器缓存里

  • 学生提交考试,考试结果和答案存储在 HBase 集群。

  • 老师批改作业,查看学生答题

  • 学生查看成绩,可以通过学生 id+考试 id 在 hbase 查询成绩表


  • 用户头像

    还未添加个人签名 2018.05.02 加入

    还未添加个人简介

    评论

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