⚠ Switch to EXCALIDRAW VIEW in the MORE OPTIONS menu of this document. ⚠

Text Elements

Requirements:

  • 1 on 1 messaging in real-time
  • sent, delivered, read receipts
  • group messaging?
  • online status
  • sending images/videos

client 2

client 1

websocket

message1

message1

sent

received

delivered

read

read

session db

on login: load balance and save session machine id

on open chat: connect to friend’s machine

image service

upload image

object storage

enqueue save image

session service

message service

save message

message db

save

sender_id, recipient_id, content, timestamp

cache

retrieve

save picture link as message

message queue

save image

user_id, connected_machine, last_action

  • everytime user makes action, update timestamp for last_action

  • images/videos could be distributed geographically with CDNs

NoSQL - no relationships, just storing data

NoSQL - just storing rows of data

  • multiple of these, sessions service will store which machine each user is connected to

group service

find who belongs to a group

groups db

many to many, SQL group_id, user_id

cache

on login: retrieve all messages missed since last active

cache

WhatsApp System Design

notification service

SMS notification service

iOS notification service

  • these send notifications back to the client