ByteByteGo Logo
architecture messaging

Designing a Chat Application

Explore the architecture of chat apps like WhatsApp and Messenger.

The diagram below shows a design for a simplified 1-to-1 chat application.

User Login Flow

  • Step 1: Alice logs in to the chat application and establishes a web socket connection with the server side.

  • Steps 2-4: The presence service receives Alice’s notification, updates her presence, and notifies Alice’s friends about her presence.

Messaging Flow

  • Steps 1-2: Alice sends a chat message to Bob. The chat message is routed to Chat Service A.

  • Steps 3-4: The chat message is sent to the sequencing service, which generates a unique ID, and is persisted in the message store.

  • Step 5: The chat message is sent to the message sync queue to sync to Bob’s chat service.

  • Step 6: Before forwarding the messaging, the message sync service checks Bob’s presence:

    • If Bob is online, the chat message is sent to chat service B.

    • If Bob is offline, the message is sent to the push server and pushed to Bob’s device.

  • Steps 7-8: If Bob is online, the chat message is pushed to Bob via the web socket.