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:
- List the key non-functional requirements (e.g. low latency, scalability, reliability, etc.)...
- creation of shortened url
- redirection service of existing urls
- low latency, cached responses
- load balancer
- 1 month life in cache
- redirection service
- rate limiter
API Design
Define the APIs expected from the system. This is your chance to analyze and define the read and write paths so that you can come up with the high-level design...
# Requests Short URL
POST {
url: long URL
returned_url: short URL
}
# Accesses Short URL
GET https://short_url
302 redirect to long URL
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.
# user requests a shortened URL
api gateway / rate limter takes the request and sends to load balancer
load balancer sends to short url, which could be any number of duplicated services
URL_Shortening_Service generates the new id, stores in database and caching service
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.