Arquitetura Orientada a Eventos (EDA)
Visão consolidada do ecossistema de Event-Driven Architecture: padrões, brokers, plataformas cloud e estudos de caso. Baseado em documentação oficial e práticas de mercado.
Conceito
Arquitetura orientada a eventos é um padrão em que serviços desacoplados publicam, consomem ou roteiam eventos (mudanças de estado ou atualizações) em vez de se comunicarem por requisições diretas.
Componentes: producers, routers (brokers/buses), consumers.
Benefícios: escalabilidade independente, tolerância a falhas, processamento em tempo real, auditoria centralizada, maior agilidade.
Padrões principais
| Padrão | Descrição |
|---|---|
| Event Sourcing | Estado da aplicação modelado como sequência imutável de eventos em um log. Histórico completo, replay, auditoria. Confluent: conexão com Kafka |
| CQRS | Separação de comandos (escrita) e queries (leitura) em modelos distintos. Cada um otimizado para seu caso de uso. |
| Saga | Padrão de coordenação para transações distribuídas. Orquestra transações locais e ações de compensação em caso de falha. Saga e Outbox (Medium) |
| Transactional Outbox | Garante consistência: eventos gravados em tabela outbox na mesma transação do domínio; publicação assíncrona evita perda de eventos. |
| Change Data Capture (CDC) | Captura mudanças em bancos de dados e publica como eventos. Ex.: Debezium. |
Brokers e message buses
| Plataforma | Modelo | Pontos fortes | Estudo de caso |
|---|---|---|---|
| Apache Kafka | Log distribuído, "smart consumer" | Alto throughput, replay, streaming. Ideal para analytics, IoT, fraud detection. | Walmart: replenishment em tempo real, Deutsche Bahn: informações a passageiros |
| RabbitMQ | Filas, "smart broker" | Roteamento rico (direct, topic, fanout), menor overhead operacional. Bom para orquestração de microserviços. | Event Sourcing + CQRS (SlideShare) |
| Apache Pulsar | Brokers + BookKeeper | Separação storage/compute, streaming e filas, tiered storage. Adequado para cloud-native. | Benchmark Kafka vs Pulsar vs RabbitMQ (Confluent) |
| Redis Streams | Log leve | Simplicidade, baixa latência. Bom para filas e pub/sub leves. | — |
| Apache EventMesh | Serverless | CloudEvents, conectores Kafka/Pulsar/RabbitMQ/Redis. Workflows serverless. Docs | — |
Plataformas cloud (event buses)
| Serviço | Provedor | Propósito |
|---|---|---|
| Amazon EventBridge | AWS | Event bus serverless, roteamento de eventos AWS, SaaS e custom. Suporta CloudEvents. Estudo: MSK + EventBridge |
| Azure Event Grid | Microsoft | Eventos de recursos Azure e custom. Suporta CloudEvents v1.0. |
| Google Cloud Eventarc | GCP | Eventos de serviços GCP e terceiros. Managed, duas edições. |
| Alibaba EventBridge | Alibaba | Event bus serverless, CloudEvents. |
| Tencent EventBridge | Tencent Cloud | Event management, CloudEvents. |
Especificação CloudEvents
CloudEvents (CNCF) define um formato comum para dados de evento. Facilita interoperabilidade entre provedores e ferramentas.
- SDKs: Go, Java, JavaScript, C#, Python, Ruby, PHP, Rust
- Adotores: AWS EventBridge, Azure Event Grid, GCP Eventarc, Knative, Tekton, Debezium, Kafka, RabbitMQ (via conectores)
Frameworks e integrações
| Tecnologia | Uso em EDA |
|---|---|
| Spring Cloud Stream | Abstração sobre Kafka/RabbitMQ |
| Spring for Apache Kafka | Cliente Kafka nativo |
| Spring AMQP | RabbitMQ |
| Debezium | CDC → eventos (CloudEvents) |
| Knative Eventing | Eventos em Kubernetes, CloudEvents |
| Argo Events | Automação event-driven em K8s |
| Serverless Workflow | Orquestração de workflows, CloudEvents |
Quando escolher o quê
| Cenário | Sugestão |
|---|---|
| Alto throughput, replay, analytics | Kafka (ou Amazon MSK) |
| Roteamento rico, orquestração | RabbitMQ |
| Serverless, integração AWS/SaaS | EventBridge |
| Kubernetes, CloudEvents | Knative Eventing, Argo Events |
| CDC de bancos de dados | Debezium + Kafka |
Nota: Combinar tecnologias é comum (ex.: Kafka para streaming + EventBridge para eventos de negócio).