File Storage System Design
Table of content:
File Hosting Service like Dropbox enables users to store their data on cloud. These servers are maintained by cloud storage providers and made available to users over a network.
Functional Requirements
- User should able to upload/download files
 - System should sync files across all devices
 
Non-Functional Requirements
- System should highly reliable/scalable
 - System should be highly available with eventual consistency
 
Capacity Estimation
Throughput
- Read and Write heavy System
 - DAU : 1M users and 10 files upload/day
 - 100 uploads/sec
 
Storage
- 100MB X10M -> 1000 TB/day - 1 Peta Byte/day
 
High Level System Design
 
	- Internal Metadata: Will keep track of all the files, chunks, their versions and their location in the file system
 - Chunker split the files smaller pieces called chunks. it will also be responsible for reconstructing a file from its chunks.
 - Watcher monitor the local workspace folders and notify the indexer of any file changes
 - Indexer communicate with the remote synchronization service and internal metadata DB.