存储性能需求估算
【用户量预估】
1. 如果是给教育部做系统,那就直接推算;
2. 如果创业公司做系统,那就按照“规划”来推算。
这里确定为1000万。
【关键行为】
1. 登录注册;
2. 文件上传下载;
3. 选课;
4. 考试。
用户行为建模和性能估算 – 登录注册
【登录】
学生管理系统主要管理学生的信息管理、作业、考试等,其中交作业是高频场景,每个学生每天都要交作业。
假设每个学生每天提交4次作业,登录的次数就是 1000万 * 4 = 4000万,考虑到提交作业一般是在晚上18:00~22:00,因此登录 TPS 要求为:4000万/(4 * 3600) = 3000/s。
登录会产生一条登录记录,因此每天有4000万条登录记录要存储,登录记录保存3个月,总的数据条数为:4000万 * 3 * 30 = 36亿条,每条记录包含学生 ID(4字节)、登录时间(4字节)、登录 IP(4字节),总大小为 36亿条 * 12 = 43G。
登录记录主要是为了事后查验,学生和老师极少主动去查询学生登录信息,因此读取性能可以忽略。
【注册】
总共1000万学生,每年只有新生注册,不同学校新生开学时间是分散的,而且注册可以在入学后完成,因此我们假设每年250万新生需要注册,注册时间分散在9.1~9.30这30天内,则注册每天请求次数为:250 万 / 30 = 8.3 万,考虑到开学第一天人数会多一点,计算结果调整为
10万每天,且主要在12小时内操作,因此 TPS 计算为:10万/(12 * 3600) ≈ 3 /s。
学生注册后需要存储学生信息,学生信息主要包含学号(10字节)、身份证(19字节)、头像(图片,不超过1M)、专业(4字节)、家庭信息(100字节)等,且学生信息要永久保存,即使毕业后也不能删除,因此存储分为两部分:
• 在校学生数据存储量 = 1000万 * 200字节 = 2G,图片数据:1000万 *1M = 10T。
• 离校学生数据存储量 = 按年增长,只做备份,每年的数据 = 1/4 在校学生数据存储量。
用户行为建模和性能估算 – 考试
【考试】
假设每门学科每年2次考试,每个学生平均一学期20门课,考试采取机考的方式,每门考试的答案20判断题、20选择题、4道大题(答案200字以内),考试结果永久保存,在校学生能够看到自己曾经的考试结果,
则考试结果记录的存储量为:
• 在校学生:1000万 * 20(课)* 2(考试次数) * 1000(答案)* 2(学期) * 3(只有前三年考试)= 2.4T。
• 离校学生:每年250万,存储量为 0.6T。
假设学校的考试都安排在某一个月内,考试的时候请求试卷,提交答案,中间答题过程浏览器本地完成,由于考试集中在上午4小时和下午4小时,且请求试卷集中在考试开始的前1分钟,提交答案集中在考试结束前的30分钟,因此估算如下:
• 请求试卷:1000万 * 20(课)/ 20(周末不考试) / 4(每天4堂考试)/ 1分钟 = 250万请求/分钟 ≈ 5万/每秒。
• 提交试卷:1000万 * 20(课)/ 20(周末不考试) / 4(每天4堂考试)/ 30分钟 = 1700/每秒。
存储性能需求汇总
【登录】
1. 登录次数:3000/s;
2. 登录记录:存储数据量36亿条,存储容量43G,写入 TPS = 登录 TPS = 3000/s,读取 TPS 无需特别设计。
【注册】
1. 注册 TPS = 3/s,可以忽略不计;
2. 在校学生数据存储:基本数据 = 2G,图片数据 = 10T;
3. 离校学生数据存储:基本数据每年增长 500M,图片数据增长 2.5T。
【考试】
1. 在校学生考试结果存储:2.4T;
2. 离校学生考试结果存储:每年增长 0.6T;
3. 试卷请求 QPS:5万/s;
4. 提交试卷 TPS:1700/s。
2.选择存储系统
存储架构选择逻辑
登录注册存储架构分析
登录注册存储架构图
考试存储架构图
合并存储架构设计
3.设计存储方案
HBase 存储方案设计 – 学生图片信息
【数据结构设计】
Key:学校 ID + 学号 ID + pic。
Column Family:info。
Column:pic。
【读写分析】
1. 学生登录后,在界面上显示头像,直接按照 key 读取即可;
2. 管理员查看班级所有同学头像,可以按照学号前缀里面的班级信息 scan,例如20080100代表2000级8系10班。
HBase 存储方案设计 – 学生登录记录
【数据结构设计】
Key:学校 ID + 学号 ID + timestamp。
Column Family:login。
Column:IP。
【读写分析】
1. 学生查看自己的登录记录,直接按照前缀来查询即可。
HBase 存储方案设计 – 学生考试结果
【数据结构设计】
Key:学校 ID + 学号 ID + 考试 ID。
Column Family:test。
Column:result, score, 其中 result 是 JSON 格式。
【读写分析】
1. 学生提交考试结果,直接按照 key 保存 result;
2. 老师改卷后,直接写入 score;
3. 学生查看自己的成绩,按照 key 读取 result 和 score,可以看到得分和具体错在哪里。
原文始发于微信公众号(二进制跳动):千万用户管理系统的存储架构和方案怎么设计
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/166926.html