目录
题目
Use Cases
-
用户上传/下载文件
-
用户分享文件/文件夹给其他人
-
用户浏览自己账户下的文件
-
同一用户多个终端之间文件同步,一个设备修改文件,其他设备都同步
-
离线编辑功能
-
快照功能,回到文件的任意历史版本
约束
- 500M用户, DAU 1M
- 单个用户存储总量默认10GB,扩展可达到TB,根据付费扩容
- R/W = 100, 每天,每个用户写入(上传)文件(平均100MB)一个,1M,qps = 11
- 文件存储总量 500M * 10GB = 5000 PB ;文件总数量 50G
- 元数据存储总量 500M * 10GB/100MB * 2KB = 100 PB
High Level Design
-
本题关键在于 1)如何保证多客户端的一致性 2)如何优化大文件的传输效率,尤其是当只修改文件的一部分
-
分布式存储系统S3 + metadata service + synchronize service + upload service + download service + 消息队列服务 + client + api service
-
sync服务的定位是保证多个device的一致性;主动通知all clients
DB 设计
- 读多写少,读写都耗时,qps不高,数据库load不会很高
- 记录数量多,单条记录小
- 数据库关系不强,考虑到扩展性,使用NOSQL
DB schema
file_info:table
- PK: file_id:int
- name:varchar(20)
- file_path:varchar(256)
- file_size:int
- user_id:int
- private:int
- version_id:int
- created_at:datetime
- update_at:datetime
file_version_info:table
- PK: user_id, file_name, version_id
- user_id:int
- file_name:varchar(20)
- version_id:int
- file_id:int
- created_at:datetime
user:table
- PK:user_id:int
- name:varchar(20)
- email:varchar(20)
- quota:int
- used_space:int
- device: [device_