System requirements


Functional:

generateShortUrl(orginal_url)

redirect_orginal_url(short_url)




Non-Functional:

Highly scalable can

Highly available can handle man millions request a day




Capacity estimation

Let's say the url contains 7 degits including lower upper case alphabetic and 0-9 digits, it will be 62 ^ 7, ardound 3 trillion URLs we can use in total.

with I million short URLs being used, we can have 3000 years to left to use.




API design

generateShortUrl(orginal_url) return shortURL

redirect_orginal_url(short_url) return orginal_url




Database design

a key-value pair NoSql would be ideal for this.




High-level design

You should identify enough components that are needed to solve the actual problem from end to end. Also remember to draw a block diagram using the diagramming tool to augment your design...






Request flows

Explain how the request flows from end to end in your high level design. Also you could draw a sequence diagram using the diagramming tool to enhance your explanation...






Detailed component design

Dig deeper into 2-3 components and explain in detail how they work. For example, how well does each component scale? Any relevant algorithm or data structure you like to use for a component? Also you could draw a diagram using the diagramming tool to enhance your design...






Trade offs/Tech choices

Explain any trade offs you have made and why you made certain tech choices...






Failure scenarios/bottlenecks

Try to discuss as many failure scenarios/bottlenecks as possible.






Future improvements

What are some future improvements you would make? How would you mitigate the failure scenario(s) you described above?