网盘设计
前言
文件图片等诸多文件,无U盘无法copy到其他地方使用,期望实现一个网盘,实现文件的上传、下载、共享
产品命名:DBox
一、需求分析
功能分析
性能分析
[每个需求的目标如何制定的,每个活跃用户每天上传下载个数是如何确认的,这里其实有些存疑如何调研的]
目标支持10亿用户注册使用,每个用户免费1TB,预计日活用户2亿,每个用户每日上传、下载4个文件
-
总存储量
最大免费容量 = 10亿*1TB
考虑到很多人不会完全使用掉这个空间,且设计优化为相同文件只会存一份,因此大约需要10%的容量
-
吞吐量
-
QPS
2亿 * 4 / 24 * 60 * 60 ≈ 1万
高峰2倍则2万
-
TPS
写入同QPS
-
-
网络带宽
假设上传文件平均大小1M,所以需要带宽是10GB/s,按照高峰期评估则20GB/s
非功能需求
- 高可靠。TP6个9。100万个文件允许一个文件损坏
- 高可用。TP4个9。
- 数据安全性。文件访问的安全性需要保证
- 避免重复上传。若不同人传的文件相同,则无需重复上传,直接指向即可,实现“秒传”
- 可断点上传与下载。
二、概要设计
关注点分离(元数据与文件内容的分离存储与管理)
整体架构图
查询调用时序图
下载调用时序图
三、详细设计
元数据库设计
限速设计
根据元数据中用户是否是会员,限制并发下载的block服务器数、block数、和下载block的线程数
秒传设计
user表:按照userId分区
logic_file表:按照userId分区
physics_file表:按照fieldId分区;同时建立MD5分区映射fieldId
block表:按照field分区