Katkat

Design a Ticketmaster-like ticketing system

MicrosoftSoftware Engineer · Onsite

Last updated

This problem tests your ability to design a high-concurrency reservation system that prevents overbooking while ensuring fairness and low latency during peak traffic.

Design a Ticketmaster-like Ticketing System

Design a backend service that allows users to browse events and purchase tickets. The system must handle massive spikes in traffic during "on-sale" events (e.g., popular concerts) without crashing or double-booking seats.

Requirements

Functional Requirements:

  • Users can view event details and available seat maps.
  • Users can select seats and place them in a temporary hold (e.g., 10 minutes) before purchasing.
  • Users can complete a payment to finalize the purchase.

Non-Functional Requirements:

  • High availability and scalability: Support millions of concurrent users during a ticket drop.
  • Strong consistency: No two users should be able to book the same seat simultaneously.
  • Performance: Low latency for seat selection and checkout processes.

Your Task

Provide a high-level architecture including:

  1. API Design: Define the core endpoints for viewing availability, holding a seat, and completing a payment.
  2. Data Model: Propose a database schema for Events, Seats, and Transactions, considering the choice between SQL and NoSQL.
  3. Concurrency Control: Explain how you will handle race conditions during the "seat hold" phase to prevent double-booking.
  4. Scalability: Describe strategies to handle read/write traffic during peak load (e.g., caching, queueing, database sharding).

Hints

Hint 1

Consider using a distributed locking mechanism or optimistic locking on the seat status to ensure that only one user can hold a specific seat at a time.

Hint 2

For massive traffic spikes, consider implementing a virtual waiting room or message queue to throttle incoming requests and protect the core database.

Hint 3

Use a cache like Redis for seat status tracking to offload read-heavy requests from the primary database while using a reliable store for final transactions.

Follow-up questions

  • How would you integrate a third-party payment provider and handle cases where the payment succeeds but the database update fails?
  • What specific measures would you implement to prevent bots from scraping seat availability or scalping tickets?
  • How would you handle the 'event cleanup' process, such as releasing held seats that were never purchased?