System Design

Case Study: WhatsApp

Requirements

Functional

Scale

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:

2. Connection management:

3. Offline messages:

4. Group chat:

Scaling

2B users, 50M concurrent connections:

Keyingi dars: Uber loyihalash.