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.