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:
- Horizontally Scalable i.e system should be able to serve high traffic
- Durability
- High Availability : 99.99 availability with no downtime
- Low Latency i.e SLA < 100ms
API Design
- POST /generate?url={longUrl}
Response : {
"shortUrl" : "sample short url"
}
- GET /fetch/original?url={shortUrl}
Response : {
"originalUrl" : "longUrl"
}
High-Level Design
Describe the overall system architecture. Identify the main components needed to solve the problem end-to-end. Use the diagramming tool to create a block diagram.
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.