MEDIUMReal-time Systemssenior engineer
Design WhatsApp/Messenger
Design a real-time messaging application like WhatsApp supporting 1:1 chat, group chat, media sharing, and delivery receipts.
Estimated Time: 45 minutes
#messaging#websocket#real-time#chat#encryption
Solution Overview
Use WebSockets for real-time communication, message queues for reliability, and separate services for different message types.
Hints to Get Started
1
Consider message ordering in distributed systems
2
How do you handle offline users?
3
Think about group message fanout
Requirements
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
Capacity Estimation
messages per day
100B messages
daily active users
2B DAU
concurrent connections
500M WebSocket connections
High-Level Architecture
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
Deep Dives
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
Message Flow
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)
Group Messaging
large groups
Fan-out on read, members pull messages
small groups
Fan-out on write, send to all members