面试题 | 设计文件托管服务dropbox/google drive

本文介绍了设计一个类似Dropbox或Google Drive的文件托管服务,涉及用户上传/下载文件、多设备同步、离线编辑等功能。设计包括分布式存储系统、元数据服务、同步服务等关键组件,以及数据库设计和扩展性考虑。针对文件一致性、大文件传输优化和并发控制提出了解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目

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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值