Chat Application
Design a real-time messaging system like WhatsApp/Slack
Design: Chat Application
Requirements
- 1:1 messaging and group chats
- Real-time message delivery
- Offline message queuing
- Read receipts and typing indicators
- Message history and search
- Scale: 50M DAU, 500M messages/day
Chat System Architecture
Key Design Decisions
- WebSocket for real-time bidirectional communication
- Sticky sessions (via user ID hash) to maintain WS connections
- Redis Pub/Sub for cross-server message routing
- Cassandra for message storage (write-heavy, partitioned by chat_id)
- Push notifications for offline users via APNs/FCM
- Message ordering: use timestamps + sequence numbers per chat
- End-to-end encryption: Signal Protocol (client-side key exchange)