Design WhatsApp/Messenger
Design a real-time messaging application like WhatsApp supporting 1:1 chat, group chat, media sharing, and delivery receipts.
Solution Overview
Use WebSockets for real-time communication, message queues for reliability, and separate services for different message types.
Use WebSockets for real-time communication, message queues for reliability, and separate services for different message types.
Consider message ordering in distributed systems
How do you handle offline users?
Think about group message fanout
functional
- •1:1 messaging
- •Group chat
- •Media sharing
- •Read receipts
- •Online status
- •Push notifications
non functional
- •Real-time delivery
- •Message ordering
- •At-least-once delivery
- •End-to-end encryption
messages per day
100B messages
daily active users
2B DAU
concurrent connections
500M WebSocket connections
protocols
real time
WebSocket with fallback to long polling
encryption
Signal Protocol for E2E encryption
components
- •WebSocket Servers
- •Message Service
- •Group Service
- •Presence Service
- •Push Notification Service
- •Media Service
presence
Heartbeat-based with Redis pub/sub for status updates
message ordering
Use Lamport timestamps or vector clocks per conversation
offline handling
Queue messages, deliver on reconnect
send
- •Client sends to WebSocket server
- •Server validates and stores
- •Queue message for recipient
- •Deliver via WebSocket or push
acknowledgments
- •Sent (server received)
- •Delivered (recipient received)
- •Read (recipient opened)
large groups
Fan-out on read, members pull messages
small groups
Fan-out on write, send to all members