千万用户管理系统的存储架构和方案怎么设计

存储性能需求估算

千万用户管理系统的存储架构和方案怎么设计

【用户量预估】

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

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!