System Design Basics for Backend Developers · Aula

Projetando um Sistema de Chat em Tempo Real

Percorra a arquitetura de um aplicativo de chat em tempo real, abrangendo conexões, entrega de mensagens, armazenamento e escalabilidade.

Aula 4 de 413 etapas

Projetando um Sistema de Chat em Tempo Real é uma aula grátis de System Design Basics for Backend Developers no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de System Design Basics for Backend Developers, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de System Design Basics for Backend Developers inclui 4 aulas no total.

Partes desta aula ainda não foram traduzidas e aparecem em inglês.

The Problem

Design a chat system like WhatsApp or Slack: users send messages that appear on recipients' devices instantly, with history, online presence, and delivery receipts — at the scale of millions of concurrent users.

Requirements

Clarify scope first:

  • Functional: 1:1 and group chat, message history, presence, delivery/read receipts
  • Non-functional: low latency, high availability, ordered delivery, horizontal scale

Why Not Plain HTTP?

Classic HTTP is request-response — the server cannot push. Polling wastes resources and adds latency. Real-time chat needs a persistent, bidirectional connection.

WebSockets

WebSockets upgrade an HTTP connection into a long-lived, full-duplex channel. The server can push a message the instant it arrives. This is the backbone of real-time chat.

GET /chat HTTP/1.1
Upgrade: websocket
Connection: Upgrade

# After upgrade: server can push frames anytime

Connection Servers

A fleet of connection servers holds the open WebSockets. Since a sender and recipient may be connected to different servers, you need a way to route a message from one server to another.

Routing Between Servers

A presence/session store (e.g. Redis) maps each user to the connection server holding their socket. A message broker or pub/sub forwards messages to the right server so it can push to the recipient.

user_to_server = {
  'alice': 'conn-3',
  'bob': 'conn-7'
}
# alice -> bob: route message to conn-7

Storing Messages

Chat is write-heavy with huge volume. A wide-column store like Cassandra suits it: partition by conversation id, cluster by timestamp, so fetching recent history in order is fast.

PRIMARY KEY ((conversation_id), message_ts)
WITH CLUSTERING ORDER BY (message_ts DESC)

Delivery Guarantees

Use a per-user inbox queue and acknowledgements. Mark messages sent, delivered, and read. If a recipient is offline, queue the message and deliver when they reconnect; retries plus message IDs keep it idempotent.

Ordering

Messages must appear in a consistent order. Attach a monotonic sequence or timestamp per conversation. Clients sort by it, so even out-of-order network delivery is corrected on display.

import time
base = int(time.time() * 1000)
seq = [base, base + 1, base + 2]
print('ordered message ids:', seq)

Group Chat at Scale

Group messages fan out to every member. For small groups, push directly; for large ones, write once to the conversation and let members pull, or fan out asynchronously via the broker to avoid a write storm.

Putting It Together

The full picture: clients hold WebSockets to connection servers, a presence store routes via pub/sub, messages persist in a wide-column store, and queues plus receipts handle offline delivery and ordering. Each piece scales horizontally.

Quick Check

Test your understanding of real-time chat design.

Recap

You designed a real-time chat system:

  • WebSockets give persistent bidirectional connections
  • A presence store plus pub/sub routes messages between connection servers
  • A wide-column store holds ordered history
  • Queues and receipts handle offline delivery; ordering uses per-conversation sequences
Grátis para começar

Aprenda System Design Basics for Backend Developers com um tutor de IA — grátis

Escreva e execute código real no seu navegador, obtenha ajuda instantânea de um tutor de IA 24/7 e continue de onde parou na web ou no app.

Cursos
12
Aulas
48

Perguntas Frequentes

A aula “Projetando um Sistema de Chat em Tempo Real” é grátis?

Sim — o texto completo de “Projetando um Sistema de Chat em Tempo Real” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de System Design Basics for Backend Developers, atualize para CoddyKit PRO. O curso de System Design Basics for Backend Developers inclui 4 aulas no total.

O que vou aprender em “Projetando um Sistema de Chat em Tempo Real”?

Percorra a arquitetura de um aplicativo de chat em tempo real, abrangendo conexões, entrega de mensagens, armazenamento e escalabilidade. Você pratica System Design Basics for Backend Developers com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar System Design Basics for Backend Developers?

Nenhuma experiência prévia é necessária. System Design Basics for Backend Developers no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.

Quanto tempo leva a aula “Projetando um Sistema de Chat em Tempo Real”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de System Design Basics for Backend Developers?

Sim. Cada aula de System Design Basics for Backend Developers inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Projetando um encurtador de URLs
  2. Criando um feed de mídia social
  3. Escalando uma plataforma de comércio eletrônico
  4. Projetando um Sistema de Chat em Tempo Real
← Voltar para System Design Basics for Backend Developers