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
MetaMicrosoftSlack
#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.

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