Design WhatsApp
Learn to design a system similar to WhatsApp.
Overview
In today’s technological world, WhatsApp is an important messaging application that connects billions of people around the globe. Many users start their day by reading or sending WhatsApp messages to their friends and family. According to July 2021 estimates, WhatsApp has two billion active users worldwide. Further, an average WhatsApp user spends approximately 19.4 hours per month on the application.
In December 2020, the WhatsApp CEO tweeted that WhatsApp users share more than 100 billion messages per day, an increase of approximately 54% since 2018. The increase in messages sent globally per day is depicted in the following chart:
Design problem
As system designers, we should be aware of the growth rate of users. There are many interesting questions about WhatsApp:
- How is this application designed?
- How does it work?
- What are the different types of components involved in it?
- How does WhatsApp enable billions of users to communicate with each other?
- How does WhatsApp keep all that data secure?
We’ll focus on the high-level and detailed design of the WhatsApp application to answer the above questions.
Requirements
Our design of the WhatsApp messenger should meet the following requirements.
Functional requirements
-
Conversation: The system should support one-on-one and group conversations between users.
-
Acknowledgment: The system should support message delivery acknowledgment, such as sent, delivered, and read.
-
Sharing: The system should support sharing of media files, such as images, videos, and audio.
-
Chat storage: The system must support the persistent storage of chat messages when a user is offline until the successful delivery of messages.
-
Push notifications: The system should be able to notify offline users of new messages once their status becomes online.
Non-functional requirements
-
Low latency: Users should be able to receive messages with low latency.
-
Consistency: Messages should be delivered in the order they were sent. Moreover, users must see the same chat history on all of their devices.
-
Availability: The system should be highly available. However, the availability can be compromised in the interest of consistency.
-
Security: The system must be secure via end-to-end encryption. The end-to-end encryption ensures that only the two communicating parties can see the content of messages. Nobody in between, not even WhatsApp, should have access.
Design and building blocks
The design of WhatsApp utilizes the following building blocks that have also been discussed in the initial lessons:
- Databases are required to store users’ and groups’ metadata.
- Blob storage is used to store multimedia content shared in messages.
- A CDN is used to effectively deliver multimedia content that’s frequently