Entrevista de Design de Sistemas: Projete o WhatsApp

"Projete o WhatsApp" testa a entrega em tempo real em escala massiva, o armazenamento durável de mensagens, a presença (online/visto por último) e o problema de gerenciamento de conexões de manter centenas de milhões de dispositivos ativos. Como sempre, o entrevistador quer o seu raciocínio e os seus trade-offs, não uma cópia do sistema real.

Avance de forma metódica: esclareça os requisitos, estime a escala, projete o caminho de conexão e entrega, decida como as mensagens são armazenadas, e então trate o chat em grupo e as arestas difíceis, como entrega offline e ordenação. O guia abaixo segue esse caminho.

1. Esclarecer os requisitos

Primeiro, defina o escopo. O núcleo é a mensagem um para um com entrega confiável; esclareça se chat em grupo, mídia e criptografia de ponta a ponta estão no escopo desta rodada.

  • Funcional: enviar/receber mensagens, confirmações de entrega e leitura, presença online, chat em grupo, entrega offline quando um destinatário está desconectado.
  • Não funcional: baixa latência, alta disponibilidade, durabilidade (nenhuma mensagem perdida), ordenação dentro de uma conversa.
  • Esclarecer: criptografia E2E e tratamento de mídia — reconheça-os e decida explicitamente se entram ou não no escopo.

2. Estimar a escala

Defina os números que orientam o design. Suponha ~2 bilhões de usuários e dezenas de bilhões de mensagens por dia; isso dá centenas de milhares de mensagens por segundo no pico, e centenas de milhões de dispositivos conectados simultaneamente — o gerenciamento de conexões se torna um problema de primeira ordem.

3. Caminho de conexão e entrega

A mensagem precisa de uma conexão persistente, não de polling de requisição/resposta. Os dispositivos mantêm um WebSocket aberto com um servidor gateway. Um componente central precisa saber qual gateway mantém atualmente a conexão de cada usuário, para que uma mensagem possa ser roteada ao servidor correto.

  • Gateway WebSocket: mantém as conexões ativas dos dispositivos, trata envio/recebimento.
  • Registro de sessão/presença: mapeia usuário → servidor gateway atual (ex.: no Redis), atualizado ao conectar/desconectar.
  • Roteamento de mensagens: o gateway do remetente consulta o gateway do destinatário e repassa; se estiver offline, a mensagem é colocada em fila.

4. Armazenamento de mensagens e entrega offline

As mensagens precisam sobreviver a um destinatário desconectado. Persista cada mensagem de forma durável e acompanhe o estado de entrega por destinatário; entregue imediatamente se o destinatário estiver online, ou armazene e repasse quando ele se reconectar.

Um padrão de acesso intensivo em escrita, com chave por conversa, favorece um armazenamento de colunas largas como o Cassandra (alto throughput de escrita, escala horizontal) em vez de um único banco relacional. Uma vez confirmada a entrega de uma mensagem a todos os destinatários, ela pode ser excluída ou expirada, já que o WhatsApp não retém mensagens entregues no servidor indefinidamente.

5. Chat em grupo

A mensagem em grupo é um fan-out: um envio se torna N entregas. Para tamanhos de grupo típicos, o fan-out-on-write (empurrar para o caminho de entrega de cada membro) é simples e rápido de ler. Note o trade-off — grupos muito grandes tornam o fan-out-on-write caro, por isso grupos de transmissão enormes são um problema de design diferente.

6. Trade-offs a verbalizar

Encerre com as tensões: ordenação (números de sequência por conversa versus ordenação global), consistência versus disponibilidade para confirmações (eventual é aceitável para 'visto por último', mais forte para entrega), e fan-out-on-write versus on-read para grupos. Apontar isso explicitamente é o que torna a resposta de nível sênior.

Pratique o design de sistemas do WhatsApp com ajuda em tempo real

O assistente de entrevistas de design de sistemas da Natively pode te manter estruturado durante uma rodada em tempo real — sugerindo a próxima dimensão a cobrir e mostrando os trade-offs em tempo real, tudo no seu próprio dispositivo.

Instale no seu próprio computador.

Um assistente para conversas em tempo real que roda localmente. Nada sai do seu computador.

macOS 12+ · Windows 10/11

© 2026 Natively AI Private Limited

Código-fonte disponível sob a Natively Personal Use Source License v1.0 · Geolocalização por IP por DB-IP