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