We can also assume there are 1 million people browsing the platform every day and they will visit the system 10 times and generate one purchasing record each day. So there would be 1,000,000 * 1 * 365 = 3.65 * 10^8 records in each year. Each recrod would be stored for two years. So there would be totally about 10^9 records. Assume each records has 100 KB (0.1 MB) so the total storage would be 10^9 * 0.1 / 1000 = 10^5 GB = 100 TB. We would use about 10 database servers.
QPS = 1,000,000 / 24 / 3600 * 10 = 110. But people tend to visit the system during the free time, so we assume the QPS is 500. And when there are hot movies in the show, I believe the QPS could reach 5,000. So the service servers would also be 10.
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...
The user will search the theaters nearby according to their location. The request will go to CDN firstly. It contains local theaters and their recent hot movies. Thus, if the user search the movies, CDN may return the results quickly. If the results are not in CDN, then the request will go to redis, because we can assume a user is likely to browse repeated information like theaters, movies, and so on in a short time. It's suitable to store the information in redis. If there are no results in redis, then the request will go to the database and write back to redis. After the user places an order, the request will be sent to a message queue for servers to deal with, and finally the notification will be sent to the user.
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?