should the number of requests per second = 10.000 r/s
for saving the urls, let's say we're using rdbms database, if every url is to be saved for a long time (no expiration date), let's say 100 years,
1 url size ~ 300kb
100 x 365 x 86400 x 300 = 946080000000 kb ~ 946 tb
should we use redis for faster performance -> using 2:8 rule -> we're using redis 20% of our capacity
20% from 946 tb = 189 tb
shortening :
user_key -> for authentication (if guests then default from UI)
long_url -> long_url that is to be shortened
custom_url -> if user want to shorten url with customization
redirection :
should return 301 redirect
mysql or postgreql would be preferable
table user (
primary key id int,
username varchar,
email varchar,
password varchar,
)
table url(
primary key id int,
long_url varchar,
short_url varchar,
user_id foreignkey user
)
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?