shortening url
retrieving the original url
availability
scalability
100000 DAU
2 short url per user -> 2 write RPS
10 redirect clicks -> 10 read RPS
POST /api/v1/short
request {
"url" : "example.com/very/long/url"
}
response {
"short_url": "shorten.com/abc123"
}
POST url /api/v1/long -> sen short URL -> receive original URL
CREATE TABLE users (
user_id INT PRIMARY KEY
password TEXT
email TEXT
registered_at DATETIME
modified_at DATETIME
)
CREATE TABLE urls (
short_url TEXT PRIMARY KEY
long_url TEXT
user_id INT FOREIGN KEY
created_at DATETIME
expired_at DATETIME DEFAULT NULL
)
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?