Requirements
Functional Requirements:
- Users can see available shows.
- Users can view a seating map to pick seats.
- Users can choose their desired seats, make an order and pay for tickets
- Users can choose different level of tickets and pricing will be different
- Users can cancel tickets according to the cancellation policy
- Users can modify bookings (changing seats, upgrading) according to the change policy
- The system sells exactly the amount of tickets for an event
Non-Functional Requirements:
- 10-20 million DAU
- Peak QPS to be between 100k to 1 million
- SLA 99.9%
- Backup systems and recover quickly from outages
- Should be able to scale horizontally
- Monitoring for: number of tickets sold per second, number of failed purchases, number of failed payment,
- Alarm: Spike in number of failed purchases or number of failed payment
API Design
Get /v1/events: show available events
GET /v1/events/{eventId}/seats: show seatmap for specific event
POST /v1/events/{eventId}/seats/reserve: reserve particular seats. Response contains a list of seats which will be reserved.
POST /v1/events/{eventId}/seats/unreserve: cancel reserve particular seats
GET /v1/events/{eventId}/seats/reserved: Check reserved seats for current user. Returns a list of
POST /v1/events/{eventId}/booking: Make a booking with a list of reserved seats. Returns the booking result and a booking id
POST /v1/events/{eventId}/booking/
High-Level Design
Describe the overall system architecture. Identify the main components needed to solve the problem end-to-end. Use the diagramming tool to create a block diagram.
Detailed Component Design
Deep dive into 2-3 key components. Explain how they work, how they scale, discuss tradeoffs, capacity, and any relevant algorithms or data structures.