Untitled

Problem Statement

Build a platform like TicketMaster where users can browse available seats from events, select tickets, and make purchases. The system should handle high traffic, especially during popular event releases. We have two design goals:

User flow

We will assume the user client is a web app and design the ticket booking experience by three flows.

  1. User view available seats from a given event

Illustration for user flow #1

                              Illustration for user flow #1
  1. The user choses one of the available seats and requests to book it. The user browser is directed to a third party payment processor – we will assume Stripe for easier discussion – where the payment happen. In the meantime, our service should hold this seat for the user – no other users can book it.
  2. Our system receives the payment processing result from Stripe and update our storage state accordingly; then our system notifies the user of the booking result. User notification is out of scope but leave here for completeness).

Illustration for user flow #2 and #3

                              Illustration for user flow #2 and #3

Identify hard questions

Our system allows concurrent booking on the same event and the same seat. Race conditions could lead to inconsistencies. We will address the following hard questions of this design

System Architecture

We will describe the system by how the three flows, mentioned above, are served.