System Design: Online Ticket Booking System
Design an online ticket booking system that allows users to discover events and book tickets.
Assume the product supports:
-
Browsing/searching events (by city, venue, date, artist/category)
-
Viewing seat maps (for seated venues) or selecting quantity (for general admission)
-
Reserving seats during checkout to prevent double-sell
-
Payment and confirmation
-
Cancellations/refunds (optional but discuss)
Requirements
Functional
-
Search and list events.
-
Show event details, pricing tiers, and seat availability.
-
Create an order:
-
For seated events: choose specific seats.
-
For GA: choose quantity.
-
Prevent overselling (strong consistency for inventory).
-
Support payment, then issue a ticket/QR code.
-
Send confirmation notifications (email/SMS/push).
Non-functional
-
High read traffic (browsing) and bursty write traffic at on-sale time.
-
Low latency for seat selection (e.g., p95 < 200–500ms for key APIs).
-
High availability; graceful degradation when demand spikes.
-
Strong correctness for inventory (no double booking).
-
Auditability (payments, order state transitions).
Scale assumptions (you may pick)
-
Peak: 200k concurrent users during major ticket drops.
-
Inventory per event: up to 100k seats.