1)Url Shortening: When user request with a URL, the api provided should shorten the URL as well as store the mapping and return the shortened url.
2) It should be able to redirect to the expected URL.
1) Availabiliy: Service should be able to generate the shortened URL
2) Scalability: able to Handle requests for large no.of URLs
3) Recovery: If the service goes down, then it should be able to recover the lost URLs and be serviceable again.
Let say we are getting 10 req every min.
And URL expiration is around 2 days.
Max we will have to store:
10*60*24*2 = 28800 URLs in our database
getTinyUrl( URL) -> api which converts the original URL to shortened URL and stores the mapping in database and Hashmap as a lookup.
We will have two coloumns in our database:
1) Actual URL
2) Tiny URL
Where none of the two should repeat, so both these coloumns are primary keys.
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. If you are unfamiliar with the tool, you can simply describe your design to the chat bot and ask it to generate a starter diagram for you to modify...
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...
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...
Explain any trade offs you have made and why you made certain tech choices...
Try to discuss as many failure scenarios/bottlenecks as possible.
What are some future improvements you would make? How would you mitigate the failure scenario(s) you described above?