> Ashraf Haib
# Designing a ticket reservation system
Tell me how you might design a system whose purpose is to reserve one or more available tickets for a given event name.
Your system should allow callers to reserve a number of tickets for the event for 20 minutes while payment for the tickets is secured by another system.
Assume for the purposes of this exercise:
* Events are at venues all over the world
* All tickets are of equal value (no "club seats", etc)
* All callers are equal (no tiered or preferred ticketholders, etc)
And here are some rough requirements for the system:
* You will need to handle requests for 10,000 active events at any given time
* The 10,000 active events will have between 1,000 and 100,000 tickets available for them
* At any given time, you might need to handle 100,000 concurrent callers to your system
* You should aim to minimize request latency for the system's globally-distributed users
* You should aim to minimize the impact of a regional failure to users outside of that region
Some questions to get you started:
* What might a top-level API for your system look like?
* What would a 1000-ft architecture of your system look like?
* How might you store the data involved in your system?
* What might the schema look like for the data involved in your system?
* What parts of the data might need to be cached, if any? What might you use for caching?
* How might you handle concurrent requests for the same event? For the same ticket blocks?
* How might you handle errors returned by the payment processing service?
* How might you think about the reliability and availability of your system? * How do you think about blast radius and handling failures across the various system components?
* What kind of mechanisms might you put in place to evolve the system over time?