Skip to content

System Design Revision Notes - URL Shortener

Goal

Convert

https://very-long-url.com/abc

https://tiny.ly/aB12X


Functional Requirements

  • Create short URL
  • Redirect to original URL
  • Support millions of URLs
  • Fast redirects
  • High availability

APIs

Create URL

POST /shorten

Request

{ "url":"https://google.com" }

Response

{ "shortUrl":"https://tiny.ly/aB12X" }


Redirect

GET /aB12X

Response

HTTP 302 Redirect

Location: https://google.com


High-Level Architecture

Client

Application Load Balancer

Application Servers

Redis Cache

Primary Database

(Optional) Read Replicas


Database Schema

Table: urls

Column Purpose
id Primary Key
short_code Unique short URL
original_url Actual URL
created_at Creation Time
expiry Expiry Date
click_count Analytics

Index

short_code


Request Flow

Client

ALB

Application Server

Redis

Cache Hit?

YES

Return Original URL

NO

Database

Update Redis

Return Original URL

This pattern is called:

Cache-Aside


Why Redis?

Because the system is

Read Heavy

Example

Create URLs

10 Million/day

Redirects

500 Million/day

Reads >> Writes

Redis reduces database load and improves response time.


Why Load Balancer?

Distributes traffic across multiple servers.

Benefits

  • High availability
  • Horizontal scaling
  • Fault tolerance

Why Stateless Servers?

Servers do not store user session or request state.

Any request can go to any server.

Easy to scale horizontally.


Short URL Generation Options

Option 1

Random String

Pros

  • Simple

Cons

  • Collision checks required

Option 2 (Preferred)

Auto Increment ID

Base62 Encoding

Pros

  • No collisions
  • Compact
  • Fast

Option 3

Hash Original URL

Pros

  • Deterministic

Cons

  • Collision handling required

Scaling Techniques

  • Redis Cache
  • Read Replicas
  • Database Indexing
  • Load Balancer
  • Horizontal Scaling
  • CDN (Global Access)

Failure Handling

Redis Down

Read directly from Database

System becomes slower

NOT unavailable


Analytics

Every redirect produces an event.

Instead of writing directly to the database:

Application

Kafka / SQS

Analytics Worker

Analytics Database

Benefits

  • Fast redirects
  • Asynchronous processing
  • Better scalability

Rate Limiting

Prevent abuse.

Example

100 URL creations per minute per user.

Can be implemented using Redis.


Interview Discussion Points

  • Functional Requirements
  • Non-functional Requirements
  • APIs
  • Database Schema
  • Cache Strategy
  • Read vs Write Ratio
  • Load Balancer
  • Stateless Servers
  • Short Code Generation
  • Scaling
  • Failure Handling
  • Analytics
  • Trade-offs

Trade-offs

Random String

  • Easy

  • Collision detection

Base62

  • No collisions

  • Predictable

Hash

  • Deterministic

  • Collision handling


Daily Checklist

□ Can I explain the API?

□ Can I draw the architecture?

□ Can I explain Cache-Aside?

□ Why Redis?

□ Why Load Balancer?

□ Why Stateless Servers?

□ Why Base62?

□ What happens if Redis fails?

□ How would I scale to 1 Billion redirects/day?

If you can answer these without looking, you understand the fundamentals of URL Shortener design.