Design cloud storage with quotas and compression
Company: Instacart
Role: Software Engineer
Category: System Design
Difficulty: hard
Interview Round: Take-home Project
Design a multi-tenant cloud storage service. Requirements:
1) Support adding (uploading) new files, retrieving files, and copying files; define APIs and copy semantics (server-side copy, deep copy, copy-on-write) and how metadata and permissions propagate.
2) Support adding users with per-user capacity limits and tiers; describe quota accounting, enforcement at upload time, and how copies and compression count toward quotas.
3) Support compressing files on upload and decompressing on download; choose algorithms, placement in the data path, metadata storage, and trade-offs between CPU cost, latency, and storage savings.
4) Ensure durability, availability, scalability, and consistency; detail components (object store, metadata service, index), partitioning, replication, background tasks, and failure recovery.
5) Cover security (authentication, authorization/ACLs), auditing, versioning, and monitoring; propose APIs/methods for each feature and outline tests.
Quick Answer: This question evaluates a candidate's ability to design a multi-tenant cloud storage system, testing competencies in API design, quota accounting, compression strategies, distributed storage architecture (partitioning, replication/erasure coding), consistency models, security, versioning, and observability.