Event-Driven Architecture - EDA
A Event-Driven Architecture (EDA) tem sido cada vez mais popular devido à sua capacidade de lidar com grandes volumes de dados e eventos em sistemas distribuídos, especialmente por resolver problemas complexos, como fluxos de trabalho não determinísticos e sistemas altamente reativos e responsivos. A evolução de ferramentas, frameworks e serviços baseados em nuvem tornou o desenvolvimento e a implementação da EDA muito mais acessíveis. Como por exemplo: Apache Kafka, Azure event grid, Amazon eventgrid, Google cloud pub/sub, AWS Lambda, entre outros.
A arquitetura orientada a eventos é baseada no processamento assíncrono usando componentes altamente desacoplados que disparam e respondem a eventos. A topologia básica inclui quatro componentes principais:
Workflow
A Event-Driven Architecture (EDA) segue um fluxo de trabalho em que os sistemas reagem a eventos disparados de forma assíncrona, sem que haja uma necessidade de uma interação direta e síncrona entre componentes. A essência desse modelo é baseada na ideia de que os eventos (mudanças de estado ou ações) são produzidos e consumidos por diferentes partes da aplicação de forma desacoplada. A seguir, descrevo o workflow detalhado da EDA:
1. Detecção de um Evento (Produção)
Um evento é qualquer ocorrência que pode ser de interesse do sistema. Ele pode ser gerado por diferentes fontes, como uma mudança de estado em uma aplicação, uma ação do usuário, um sensor IoT, uma transação financeira, entre outros.
Exemplo: Quando um cliente realiza uma compra em um e-commerce, isso gera um evento que contém informações sobre o pedido.
Detalhe do Workflow:
Ferramentas associadas: sistemas produtores podem ser aplicações backend, gateways de APIs ou microsserviços que detectam mudanças de estado.
2. Publicação do Evento no Barramento
Após a detecção do evento, ele é publicado em um barramento de eventos, uma fila ou um stream de dados para ser distribuído aos sistemas interessados (consumidores).
Exemplo: Um sistema de e-commerce publica um evento "PedidoCriado" no Kafka, ou envia uma mensagem para um tópico no Google Cloud Pub/Sub.
Detalhe do Workflow:
Ferramentas associadas: Kafka, RabbitMQ, AWS SNS, Google Pub/Sub, Azure Event Grid.
3. Disseminação e Roteamento do Evento
Uma vez publicado no barramento de eventos, o sistema de mensageria é responsável por roteá-lo aos consumidores que estão interessados nesse tipo de evento. O roteamento pode seguir diferentes padrões, como publish/subscribe ou filas de processamento.
Exemplo: Todos os microsserviços que estão interessados em eventos "PedidoCriado" se inscrevem para receber esses eventos e são notificados.
Detalhe do Workflow:
Ferramentas associadas: Apache Kafka, AWS EventBridge, Azure Event Grid...
4. Processamento do Evento (Consumo)
O evento chega a um ou mais consumidores que foram configurados para reagir a esse tipo de evento. Cada consumidor pode realizar diferentes tipos de processamento com base nos dados do evento.
Exemplo: Um microsserviço de faturamento recebe o evento "PedidoCriado" e inicia o processo de geração de fatura, enquanto um serviço de inventário atualiza o estoque.
Detalhe do Workflow:
Recomendados pelo LinkedIn
Ferramentas associadas: AWS Lambda, Google Cloud Functions, Apache Flink (para processamento de eventos em stream),...
5. Atualizações e Notificações Resultantes
Com base no processamento do evento, outros eventos podem ser gerados ou o estado de um sistema pode ser alterado. Por exemplo, um serviço pode publicar um novo evento como resultado do processamento, criando um encadeamento de eventos.
Exemplo: Após o processamento de um pedido, um evento "PagamentoProcessado" é gerado e publicado no barramento de eventos, ou o sistema de email notifica o cliente que o pedido foi processado.
Detalhe do Workflow:
Ferramentas associadas: Serviços de notificação (AWS SNS, Firebase), sistemas de email, ou geração de eventos secundários no mesmo barramento.
6. Manutenção do Estado e Persistência
Durante o processamento de eventos, os sistemas podem precisar atualizar o estado de seus dados ou garantir a persistência de informações relacionadas a um evento.
Exemplo: Um microsserviço de inventário atualiza o banco de dados para refletir a diminuição do estoque com base no pedido realizado.
Detalhe do Workflow:
Ferramentas associadas: Bases de dados orientadas a eventos como Event Sourcing, bancos de dados NoSQL como MongoDB, ou arquiteturas CQRS (Command Query Responsibility Segregation).
7. Monitoramento e Observabilidade
Para garantir o funcionamento correto e a detecção de falhas no processamento de eventos, sistemas de monitoramento e observabilidade são fundamentais. Esses sistemas monitoram o fluxo de eventos, verificando se há atrasos, falhas ou outras anomalias.
Exemplo: O Datadog, Prometheus ou Grafana pode ser usado para monitorar o tráfego de eventos e gerar alertas caso um serviço de consumo não esteja funcionando adequadamente.
Detalhe do Workflow:
Ferramentas associadas: Datadog, Prometheus, Grafana, OpenTelemetry.
Principais Vantagens do Workflow EDA:
Referências:
Richards, Mark. Software Architecture Patterns. O'Reilly Media, 2015.
Bellemare, Adam. Building Event-Driven Microservices: Leveraging Organizational Data at Scale. O'Reilly Media, 2020.
Richardson, Chris. Microservices Patterns: With Examples in Java. Manning Publications, 2018.
Senior Software Engineer @ Cartão Elo, FinTech in Brazil
3 mParabéns pelo artigo Flávio!
Software Engineer Senior at Cartão Elo | Java, Python | React.js | Oracle DB | MySQL | AWS | Azure
3 mMuito bom esse artigo Flavio!
Cloud Solutions Architect | Arquitetura de Soluções em Itaú Unibanco | AWS Certified | ITIL Certified | MBA
3 mParabéns pelo artigo Flávio. Muito top!!! Me inspirou aqui.