Comunicação Síncrona vs Assíncrona
Síncrona = Telefonema
Você liga. A pessoa atende. Vocês conversam em tempo real. Se a pessoa não atender, você espera tocando. Se a linha cair, vocês param.
Características:
- Cliente espera a resposta.
- Acoplamento forte: se o servidor cair, o cliente quebra.
- Simples de raciocinar.
- Latência aparece direto pro usuário.
Exemplos: HTTP REST, gRPC, chamada de função em RPC.
Assíncrona = Carta
Você escreve a carta, joga no correio e continua sua vida. A carta vai chegar (em algum momento), e o destinatário vai ler quando puder. A resposta, se vier, chega depois.
Características:
- Cliente não espera a resposta imediatamente.
- Acoplamento fraco: se o servidor estiver fora, a mensagem fica esperando.
- Mais robusta a falhas.
- Mais difícil de raciocinar (e de debugar).
Exemplos: Kafka, RabbitMQ, AWS SQS, e-mail.
Tabela Comparativa
| Aspecto | Síncrona (HTTP) | Assíncrona (Kafka) |
|---|---|---|
| Tempo de resposta | Imediato | "Quando der" |
| Acoplamento | Forte | Fraco |
| Resiliência a falha | Baixa | Alta |
| Complexidade | Baixa | Alta |
| Throughput | Limitado | Muito alto |
| Caso típico | Login, consulta de saldo | Notificações, eventos, ETL |
Event-Driven Architecture (EDA)
Em arquiteturas tradicionais, serviços chamam uns aos outros dizendo "faça isso":
flowchart LR P[Pedidos] -->|"crie nota fiscal"| F[Faturamento] P -->|"reduza estoque"| E[Estoque] P -->|"envie e-mail"| N[Notificações]
O serviço de Pedidos precisa conhecer todos os outros. Se amanhã surgir um novo serviço (ex: pontos de fidelidade), você precisa mexer no serviço de Pedidos. Isso é chamado acoplamento.
Em EDA, o serviço apenas anuncia o que aconteceu:
flowchart LR P[Pedidos] -->|"PedidoCriado"| B[[Broker]] B --> F[Faturamento] B --> S[Estoque] B --> N[Notificações] B --> Fi["Fidelidade (novo!)"]
O Pedidos não sabe quem está ouvindo. Ele só publica um evento. Quem se importar, escuta. Adicionar um novo serviço é só plugar ele no evento — zero alteração no serviço original.
Analogia: o jornal. O Estado de São Paulo não liga pra cada leitor todo dia. Ele publica o jornal. Quem quiser, assina e lê. Novos leitores aparecem? Ótimo, sem mudar nada na redação.
Conceitos-chave de EDA:
- Evento: algo que aconteceu no passado (
PedidoCriado,PagamentoAprovado). Note o tempo verbal: passado. - Producer/Publisher: quem emite o evento.
- Consumer/Subscriber: quem reage ao evento.
- Broker: o intermediário que entrega os eventos.