System Design - Design a URL Shortener
In this wiki, we will explore an approach to design a URL shortener service.
Requirements:
- Shortened URLs’ length should be as short as possible
- Shortened URL should contain only ASCII characters
- Shortened URLs are not updated
- System should have high availability, scalability, and fault-tolerance
Back of the envelope estimation:
- Write operations: 100 million URLs generated per day => 1160 operations/sec
- Read operations: Assuming a ratio of read operations to write operations to be 10:1, read operations ~11600 operations/sec
- Assuming service would run for 10 years: 100 million * 365 * 10 => 365 billion records
- Assuming average URL length of 100 bytes, storage requirement: 365 billion * 100 bytes => 36.5 PB
API endpoints:
POST api/v1/shorten
- request payload: {longUrl: string}
GET api/v1/shortUrl
- Return the long URL for HTTP redirection
- Response status code of 301 redirect for permanent redirect: Browser caches the redirection response
- Response status code of 302 redirect for temporary redirect: Used for analytical purposes, where the server needs to be aware of every query
High-level diagram:
Written on August 31, 2025