Design BookMyShow A System Design Interview Question (original) (raw)

Last Updated : 31 Mar, 2026

Designing BookMyShow is a popular system design interview question that tests your ability to build scalable, high-performance systems. It involves creating a platform where users can search for movies, select seats, and book tickets while handling high traffic and real-time updates. This article will guide you through key aspects, to demonstrate how such a system can be efficiently designed.

1. System Requirements

This section defines what the system must do to meet user needs and expectations.

1. Functional Requirements

This describes the features and capabilities the portal must provide to users.

2. Non-Functional Requirements

This outlines the quality attributes and performance expectations of the system.

2. Theatres Integration in BookMyShow

When you visit any third-party application/movie tickets aggregator using the mobile app or website, you see the available and occupied seats for a movie show in that theatre. Now the question is how these third-party aggregators talk to the theatres, get the available seat information, and display it to the users. Definitely, the app needs to work with the theatre's server to get the seat allocation and give it to the users. There are mainly two strategies to allocate seats to these aggregators:

3. Checking Available Seats

There are mainly two ways to get this information...

Handling Concurrent Seat Bookings

This explains how theatres handle temporary locks to prevent double bookings.

4. High-Level Design

BookMyShow is built on microservice architecture. The key Components of the system include:

bookmyshow

HLD

1. Load Balancer

A load balancer is used to distribute the load on the server and to keep the system highly concurrent when we are scaling the app server horizontally. The load balancer can use multiple techniques to balance the load.

2. Frontend Caching and CDN

We do frontend caching using Varnish to reduce the load from the backend infrastructure. We can also use CDN Cloudflare to cache the pages, API, video, images, and other content.

3. App Servers

There will be multiple app servers and BookMyShow uses Java, Spring Boot, Swagger, and Hibernate for the app servers. We can also go with Python-based or NodeJS servers (Depending on requirements). We also need to scale these app servers horizontally to take the heavy load and handle a lot of requests in parallel.

Elastic search is used to support the search APIs on Bookmyshow (to search movies or shows). Elastic search is distributed and it has RESTful search APIs available in the system. It can be also used as an analytics engine that works as an App-level search engine to answer all the search queries from the front end.

5. Caching

To save the information related to the movies, seat ordering, theatres, etc, we need to use caching. We can use Memcache or Redis for caching to save all this information in Bookmyshow. Redis is open-source and it can be also used for the locking mechanism to block the tickets temporarily for a user. It means when a user is trying to book the ticket Redis will block the tickets with a specific TTL.

6. Async Workers

The main task of the Async worker is to execute the tasks such as generating the pdf or png of the images for booked tickets and sending the notification to the users. For push notifications, SMS notifications, or emails we need to call third-party APIs. These are network IO and it adds a lot of latency. Also, these time-consuming tasks can not be executed synchronously.

7. Business Intelligence and ML

For data analysis of business information, we need to have a Hadoop platform. All the logs, user activity, and information can be dumped into Hadoop, and on top of it, we can run PIG/Hive queries to extract information like user behavior or user graph.

8. Log Management

ELK (ElasticSearch, Logstash, Kibana) stack is used for the logging system. All the logs are pushed into the Logstash. Logstash collects data from all the servers via Files/Syslog/socket/AMQP etc and based on a different set of filters it redirects the logs to Queue/File/Hipchat/Whatsapp/JIRA etc.

5. Database Design

We need to use both RDBMS and NoSQL databases for different purposes. Let's analyze what we need in our system and which database is suitable for what kind of data:

**1. RDBMS

We use RDBMS (Relational Database Management System) to handle structured data that requires relationships and transactions, such as:

**2. NoSQL

We also have a huge amount of data like movie information, actors, crew, comments, and reviews. RDBMS can not handle this much amount of data so we need to use the NoSQL database which can be distributed.

6. Low-Level Design

This section dives into the internal components and data flow of the system for implementation.

Step-By-Step Working

APIs Needed

This section lists the key APIs required for communication between the platform, theatres, and users.

**1. GetListOfCities():

Retrieves a list of cities where events or movies are available.

**2. GetListOfEventsByCity(CityId):

Returns events or movies running in a specified city.

**3. GetLocationsByCity(CityId):

Fetches all locations (cinemas or venues) in the given city.

**4. GetLocationsByEventandCity(cityid, eventid):

Retrieves the locations hosting a specific event in a given city.

**5. GetEventsByLocationandCity(CityId, LocationId):

Lists events available at a specific location in a city.

**6. GetShowTiming(eventid, locationid):

Provides show timings for a specific event at a given location.

**7. GetAvailableSeats(eventid, locationid, showtimeid):

Returns the seating availability for a specific show.

**8. VarifyUserSelectedSeatsAvailable(eventid, locationid, showtimeid, seats):

Checks if the user-selected seats are still available.

**9. BlockUserSelectedSeats():

Temporarily blocks the user-selected seats to prevent others from booking them.

**10. BookUserSelectedSeat():

Confirms the booking for the user-selected seats.

**11. GetTimeoutForUserSelectedSeats():

Provides the timeout duration for holding user-selected seats before release.

Technologies Used

This section outlines the tools, frameworks, and platforms used to build and maintain the system.