Requirements
Functional Requirements:
- Create a short URL for a given long URL.
- Return the long URL associated with a given short URL.
Non-Functional Requirements:
- Availability
- Low Latency
API Design
API expects a string url denoting full url and returns a string custom shortened url.
High-Level Design
We just need 3 layers
- A light weight service, where the business logic resides.
- A database, postgres. Since request response is defined.
- A redis cache layer for storing the url mapping.
Detailed Component Design
Deep dive into 2-3 key components. Explain how they work, how they scale, discuss tradeoffs, capacity, and any relevant algorithms or data structures.