Projete um sistema de chat
Entregue mensagens em tempo real, em ordem, a usuários que entram e saem.
- Escolher um transporte em tempo real e rotear mensagens entre servidores de conexão.
- Ordenar as mensagens de uma conversa com números de sequência.
- Entregar a usuários offline e acompanhar a presença.
Requisitos. Chats individuais e em grupos pequenos, entrega em tempo real, histórico de mensagens em vários dispositivos, presença online e entrega para usuários que estão offline. Não funcionais: baixa latência, mensagens nunca podem se perder depois de confirmadas, e a ordem precisa ser consistente dentro de uma conversa.
Conexões, roteamento e armazenamento
- Transporte: os clientes mantêm um WebSocket persistente, para o servidor poder enviar mensagens na hora. Long polling é uma alternativa de reserva.
- Gateways com estado: os servidores de WebSocket mantêm conexões abertas, então têm estado. Um registro de sessões (por exemplo, no Redis) mapeia cada usuário online para o gateway que segura a conexão dele. Mantenha a lógica de negócio em serviços separados, sem estado.
- Roteamento: o serviço de chat persiste a mensagem, descobre o gateway de cada destinatário e publica nele (via pub/sub). Destinatários offline recebem uma notificação push.
- Armazenamento: as mensagens são particionadas por
conversation_ide ordenadas por um número de sequência por conversa - um encaixe natural para um banco de colunas largas.
Um exemplo: um cliente com as mensagens 1, 2, 4 e 5 percebe que falta a 3 e pede essa mensagem ao servidor.
Os números de sequência permitem que os clientes detectem buracos e sincronizem ao reconectar, pedindo “as mensagens depois da sequência N”. Quem atribui os números é o servidor, porque os relógios dos clientes não concordam. O servidor armazena a mensagem antes de confirmá-la ao remetente, então uma mensagem confirmada sobrevive a uma queda. A presença usa heartbeats: um usuário que perde vários heartbeats é marcado como offline. Em chats de grupo, o serviço faz o fan-out de cada mensagem para o gateway de cada membro.
Prática: acompanhe uma mensagem
Experimente
Até 15 XPLeve uma mensagem de ponta a ponta
Conseguir fazer isso em voz alta é o coração da resposta na entrevista. Preveja cada etapa antes de ela acontecer.
Prática: depure uma reconexão
Experimente
Até 15 XPLeia um log de sincronização do cliente
Um usuário diz que algumas mensagens sumiram depois que o trem dele saiu de um túnel. Clique na linha que explica o que aconteceu.
Onde o cliente deveria ter percebido que precisava sincronizar?
Juntando tudo: uma simulação de entrevista
Experimente
Até 15 XPApresente um projeto em voz alta
Explique o seu projeto como faria na sala e percorra uma mensagem de ponta a ponta.
“Projete um app de chat como os que você usa todo dia.”
Avalia: Entrega em tempo real
A pergunta fica oculta até você começar. Responda em voz alta, como faria na entrevista.
Principais conclusões
Conexões persistentes dão estado aos gateways; um registro mapeia usuários para gateways.
Armazene antes de confirmar, e ordene por números de sequência atribuídos pelo servidor.
Usuários offline recebem notificações push e sincronizam as mensagens perdidas ao reconectar.
Quiz da aula
6 perguntas · aprovação com 5 acertos · até 50 XP
Ao passar, você conclui a aula e mantém sua sequência. As perguntas erradas voltarão em sessões de revisão.
Dúvidas sobre esta lição
Travou em algum ponto? Pergunte. Descobriu algo? Compartilhe. Explicar também é uma ótima forma de aprender.
Carregando publicações…