System Design
Case Study: WhatsApp
Requirements
Functional
- 1-to-1 messaging
- Group chat (256 members)
- Message delivery status
- Online/offline status
- Media sharing
Scale
- 2B users
- 100B messages/day
- Real-time delivery
Core: WebSocket Connections
Client ←→ WebSocket Server
↓
Message Queue
↓
Chat Server
↓
Database
Message Flow
1. User A sends message
2. WebSocket Server → Message Queue
3. Chat Server:
- Save to database
- Check if User B online
- If online: Push via WebSocket
- If offline: Queue for later (Push notification)
4. Delivery confirmation
Database Schema
-- Messages
CREATE TABLE messages (
id BIGSERIAL PRIMARY KEY,
from_user_id BIGINT,
to_user_id BIGINT,
content TEXT ENCRYPTED,
created_at TIMESTAMP,
delivered_at TIMESTAMP,
read_at TIMESTAMP
);
-- Sharding key: user_id % 4096
Key Design Decisions
1. End-to-End Encryption:
- Messages encrypted on device
- Server can’t read content
2. Connection management:
- Each user → 1 WebSocket connection
- Server tracks: user_id → connection_id
3. Offline messages:
- Store in database
- Push notification
- Deliver when user comes online
4. Group chat:
- Message replicated to all members
- Last seen per member
Scaling
2B users, 50M concurrent connections:
- 1 server = 10K connections
- Need 5,000 servers
- Load balancer with sticky sessions
Keyingi dars: Uber loyihalash.