List functional requirements for the system (Ask the chat bot for hints if stuck.)...
List non-functional requirements for the system...
Estimate the scale of the system you are going to design...
As per the requirement we have 10M traffic daily.
Traffic per minute = 10000000 / 24 * 60 = 6,944.4444444444 = ~7K rpm.
Since this is a read heavy system then it means we must focus on the reading part from the system.
Define what APIs are expected from the system...
We will be making 2 apis
Defining the system data model early on will clarify how data will flow among different components of the system. Also you could draw an ER diagram using the diagramming tool to enhance your design...
For database I am not thinking that this will be very complex. It will simply have a database that will store two values unique identifier (unique_identifier) vs original link(original_link) along with the TTL.
Furthermore we can have a cache mainly Redis. We will store the repeatedly requests into the redis cache.
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...
High level design is described in the diagram.
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...
For Database I will be using Mysql, for cache we will be using Redis. We using Mysql because the data that is present to us is more of a structured data and Mysql is very efficient in that case. Also I picked Redis because it is widely used cache as it is open source and gives faster response. We can also use in memory cache as well, depending on the requirement.
Try to discuss as many failure scenarios/bottlenecks as possible.
There can be some bottleneck scenarios like
What are some future improvements you would make? How would you mitigate the failure scenario(s) you described above?
Improvements