Our URL shortener system should meet the specific requirements.
The following are functional requirements:
- Given an URL, our service should generate a shorter and unique alias of it
- When users access a shorter URL, our service should redirect them to the original link
The following are non-functional requirements:
- The system should be highly available. This is required because, if our service is down, all the URL redirections will start failing.
- URL redirection should happen in real-time with minimum latency.
- Shortened links should not be guessable (or predictable).
The following are extended requirements:
- Analytics, for example, how many times a redirection happened?
- Our service should also be accessible through REST APIs by other services
Let's calculate the size of the database and bandwidth required by the system to go live.