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.