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

  1. POST /generate?url={longUrl}

Response : {

"shortUrl" : "sample short url"

}

  1. 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.