⚠ 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