Arquitetura de software · Estudos de caso · 8 min de leitura
Estudo de caso: projetando um app de chat
Mensagens em tempo real, entrega garantida, ordem dentro da conversa, status de lida e notificações para quem está offline.
Arraste para o lado para ver o diagrama inteiro.
Requisitos
- Conversas individuais e em grupo, entrega em tempo real.
- Nenhuma mensagem perdida; ordem correta dentro de cada conversa.
- Histórico, status de entregue/lida e notificação para quem está offline.
O fluxo de uma mensagem
O cliente mantém um WebSocket com um servidor de chat. Ao enviar, o servidor grava primeiro (com um ID ordenável por conversa) e confirma ao remetente; depois publica no canal da conversa. Os servidores que têm membros conectados recebem e entregam. Quem está offline recebe push e, ao voltar, busca as mensagens a partir do último ID que viu — o cliente reenvia com um ID próprio para que retries não dupliquem (idempotência).
Armazenamento e escala
- Particione as mensagens pela conversa: a leitura típica é “as últimas N mensagens desta conversa”, que fica num único lugar e em ordem.
- Grupos enormes: em vez de copiar para cada membro, cada um lê o canal do grupo.
- Presença (online/digitando) é efêmera: fica em memória com expiração, não no banco.
- Criptografia ponta a ponta muda o desenho: o servidor só retransmite conteúdo cifrado.
Em resumo
- WebSocket por usuário, pub/sub entre servidores.
- Grava antes de entregar; ID ordenado por conversa.
- Offline: push + sincronizar do último ID.
- Partição por conversa; presença em memória.