Requirements of WhatsApp’s Design
Define the functional and non-functional requirements for a highly scalable chat service like WhatsApp. Learn how to balance consistency, security, and low-latency needs. Practice resource estimation to calculate the necessary storage, bandwidth, and server capacity for billions of daily messages.
Requirements
Let’s scope the WhatsApp design by identifying the following requirements.
Functional requirements
Conversation: Support one-on-one and group conversations.
Acknowledgment: Provide message delivery status (sent, delivered, and read).
Sharing: Enable sharing of media files, including images, videos, and audio.
Chat storage: Persist messages for offline users until they are successfully delivered.
Push notifications: Notify offline users of new messages when they reconnect.
Note: “Offline” refers to users disconnected from the internet. The system sends push notifications when they reconnect. “Online” users are actively connected and receive real-time messages.
Non-functional requirements
Low latency: Deliver messages with minimal delay.
Consistency: Deliver messages in order and ensure chat history is consistent across all user devices.
Availability: Prioritize high availability, though trade-offs may be made to ensure consistency.
Security: Implement end-to-end encryption so only communicating parties can access message content.
Scalability: Support an increasing number of users and daily messages.
Resource estimation
For capacity ...