Design a File Storage Service
Upload and share large files with resumable transfer, versions and safe metadata changes.
Backend and product engineers designing software behavior.
Your approach: Use diagrams, tables or prose for customer contracts, state transitions and data ownership; include APIs only to the depth the question requests.
The problem
Design a file storage and sharing service for web and desktop clients. Separate file bytes from metadata and permissions, and explain resumable uploads, downloads and version creation. Define what a user sees after an interrupted upload or conflicting edits from two devices.
- Support 1 million users uploading 100 TB/day in total; files range from 1 KB to 10 GB.
- Networks can disconnect mid-upload and desktop devices may edit offline.
- Users can share a folder with named collaborators and revoke access later.
Work within these constraints
Declare the maximum supported single-file size.
Required target: ≥ 10 GB
Do not publish metadata pointing to an incomplete or missing file version.
Define authorization for bytes and metadata, including the lifetime of already-issued download links.
What to deliver
Metadata and versions
Define ownership, folders, permissions, version identity and conflict behavior.
Transfer protocol
Describe multipart upload, retry verification, completion and download access.
Storage and cleanup
Estimate daily and retained byte volume; handle unreferenced chunks and deleted versions.
Failure walkthrough
Trace a dropped upload, simultaneous edits and access revocation; compare two conflict policies.