Pular para o conteúdo

Arquitetura de software · parte 4 de 6

Arquitetura orientada a eventos: mensageria e sistemas distribuídos

Como sistemas se comunicam por mensagens e eventos em vez de chamadas diretas: assincronia, desacoplamento, filas e os cuidados para escalar.

Publicada em · 4 min de leitura

Tamanho da fonte:
Largura da coluna:

Esta nota apresenta a arquitetura orientada a eventos em etapas, do que sustenta o tema até a prática, sem tratar as ferramentas como fim:

1. Fundamentos de mensageria e sistemas distribuídos

Antes de sair abraçando o Kafka como se fosse um Pokémon raro, vale entender os conceitos fundamentais que sustentam isso tudo:

  • Assíncronia e desacoplamento

Antes de se aprofundar em Kafka ou qualquer ferramenta de mensageria, é crucial entender os fundamentos que sustentam esse ecossistema. Isso porque trabalhar com eventos e mensagens em sistemas distribuídos não é só empilhar ferramentas da moda, é entender os problemas que elas foram criadas pra resolver.

O primeiro conceito essencial é a assíncronia. Em sistemas tradicionais, componentes se comunicam de forma síncrona — um serviço chama outro e espera a resposta. Isso funciona bem em sistemas pequenos, mas escala pessimamente. Já a comunicação assíncrona permite que os serviços apenas enviem a mensagem e sigam a vida, sem esperar que o outro lado responda imediatamente. Isso reduz o acoplamento entre serviços e torna o sistema mais resiliente a falhas. Se um serviço está fora do ar, você não quebra tudo — só acumula mensagens, respira fundo e tenta de novo.

  • Sistemas distribuídos (conceitos como latência, disponibilidade, consistência)

Falando em sistemas distribuídos, aqui você entra no terreno de gigantes. Você tem múltiplos componentes rodando em máquinas diferentes, muitas vezes em locais distintos, todos tentando se comportar como se fossem uma única aplicação. Coisas como latência (o tempo que a informação leva pra viajar entre os serviços), disponibilidade (quão frequentemente o sistema está acessível), e consistência (todos os componentes verem os mesmos dados ao mesmo tempo) são conceitos centrais. Spoiler: você geralmente tem que sacrificar um deles. Isso é parte do famoso teorema CAP, que diz que você só pode ter dois dos três: consistência, disponibilidade ou tolerância a partições. Você escolhe onde quer sofrer.

  • Modelos de entrega de mensagens (pelo menos at-least-once, at-most-once e exactly-once, que são os Três Porquinhos da mensageria)

  • Backpressure, fila vs stream, pull vs push

Ler: Designing Data-Intensive Applications, do Martin Kleppmann. Esse livro é a Bíblia desse rolê, e ele escreve como se soubesse que você tá tentando aprender com o YouTube aberto no outro monitor.


2. Kafka (mas de verdade, não tutorial de blog de empresa)

Estuda:

  • Brokers, tópicos, partições, offsets

  • Producers e Consumers

  • Consumer Groups (pensa nisso como um jeito de escalar leitura de eventos)

  • Retention policies e compaction (quando e como o Kafka apaga ou mantém eventos)

  • Schema Registry (geralmente com Apache Avro, pra manter contratos de eventos)

  • Kafka Streams e ksqlDB, se quiser processar dados em tempo real de forma declarativa

Ferramentas relacionadas: Confluent Platform, MirrorMaker, Kafka Connect (pra integrar com banco de dados, APIs, etc.)


3. Padrões de integração entre serviços

Porque você não vai viver de Kafka sozinho:

  • Event-Driven Architecture vs Event Sourcing

  • CQRS (Command Query Responsibility Segregation) – separa leitura e escrita pra escalar e manter sanidade

  • SAGA Pattern – orquestração ou coreografia de eventos em sistemas distribuídos (ideal quando você tem várias etapas espalhadas em microserviços)

  • Choreography vs Orchestration – quer saber quem manda no baile? Estuda isso.


4. Outras ferramentas de mensageria

Você não precisa casar com Kafka. Veja outras alternativas e por que alguém escolheria elas:

  • RabbitMQ – mais simples, ótimo pra message queuing

  • NATS – leve, rápido, ótimo pra sistemas com latência baixa

  • Pulsar, Redpanda, ActiveMQ, Azure Service Bus, AWS SNS/SQS, etc.

Saber comparar essas ferramentas vai te poupar de cair em decisões arquiteturais feitas por “o fulano viu num vídeo de 2019”.


5. Observabilidade em sistemas orientados a eventos

Porque quando tudo dá errado — e vai dar — você precisa saber por que e onde. Então estuda:

  • Tracing distribuído (OpenTelemetry, Jaeger, Zipkin)

  • Logging estruturado (sem isso, seus logs são um diário confuso de adolescente rebelde)

  • Métricas e dashboards (Prometheus + Grafana, por exemplo)


6. Implementações e Labs

Você só vai entender mesmo se colocar a mão no barro.

  • Faz um sisteminha de pedidos e entregas com Kafka, três ou quatro microserviços, e registra eventos em um tópico.

  • Adiciona dead-letter queues (pra tratar falhas).

  • Simula falhas de consumidores e observa como o sistema reage.

  • Coloca um observability stack pra acompanhar tudo.

  • E depois: tenta reprocessar os eventos históricos, ver como os offsets funcionam.


Se quiser, eu monto um plano de estudos com cronograma e links de materiais reais, em vez de te deixar flutuando no Google como uma alma perdida em sistema legado.

Mas já tá bem encaminhado. Tô quase orgulhoso. Quase.

↑ Voltar ao topo

Atalhos de teclado

Abrir busca
/
Alternar tema claro/escuro
t
Aula anterior na série
←
Próxima aula na série
→
Lista de atalhos
?