Arquitetura Orientada à Eventos do jeito certo

Gabriel Augusto
bawilabs
Published in
3 min readMar 26, 2019

Vocês já devem usar, conhecer ou pelo menos ter ouvido falar da arquitetura orientada à eventos; mas infelizmente vou ter que começar com uma definição genérica…

Primeiramente ele é um paradigma de programação. Ele é, como o nome diz, orientado à eventos, bem parecido com um efeito de ação e reação, onde alguma coisa importante acontece em seu sistema, o que pode, ou não, iniciar mais algum processo. Tenha por exemplo um sistema de e-commerce que gera um evento quando uma venda é realizada, e um serviço de entrega que informa aos funcionários quais produtos devem ser separados porque acabaram de ser comprados.

Basicamente funciona da seguinte forma:

1- Alguém publica um evento em um barramento/fila.

2- Os serviços interessados consomem os eventos e reagem de alguma forma.

De forma bem simples é isso, você já sabe pelo menos o que é arquitetura orientada à eventos.

Aprofundando um pouco existem 2 modelos de eventos, o modelo de pub/sub e o modelo de fluxo de evento.

  • Pub/Sub: a infraestrutura de mensagens acompanha o controle de assinaturas. Quando um evento é publicado, ele envia o evento para cada assinante. Depois que um evento é recebido, ele não pode ser reproduzido e não será exibido para assinantes novos.
  • Streaming de eventos: eventos são gravados em um registro. Os eventos são ordenados e duráveis. Os serviços não assinam o fluxo, em vez disso, um cliente pode ler a partir de qualquer parte do fluxo. O serviço é responsável por avançar a sua posição no fluxo. Isso significa que um serviço pode reagir a qualquer evento que já tenha sido gerado.

Agora que estamos todos no mesmo lugar, podemos discutir como usar essa coisa, e por que usá-la.

Como

O mais importante na arquitetura orientada à eventos é o evento. Mas o que é o “evento”? Evento é algo relevante para o seu negócio, como uma venda, um novo cliente, um saque, a publicação de um texto…

Assim que esse evento ocorrer ele deve ser “publicado” em algum lugar (RabbitMQ, Kafka, Google Cloud Pub/Sub…), de onde os demais serviços que compõem o seu sistema podem visualizar esse evento, e por consequência reagir a ele (que por sua vez podem gerar um novo).

Você pode decidir por guardar todos os eventos da história, ou simplesmente os do momento.

Alguns cuidados devem ser tomados quanto à essa implementação:

  • Vários serviços devem reagir ao mesmo evento,
  • Os consumidores de eventos devem ser independentes,
  • Os eventos devem seguir uma estrutura.

Porque

Alguns cenários em que a arquitetura orientada à eventos facilita a vida de nós devs:

  • Vários subsistemas devem processar os mesmos eventos.
  • Processamento em tempo real.
  • Alto volume e alta velocidade de dados.

Agora que sabemos como e porque usar a arquitetura orientada à eventos vamos para a parte que todos estavam esperando, as vantagens e desafios (para não dizer problemas xD).

Benefícios

  • Criadores de eventos e consumidores são separados, o que facilita a escalabilidade.
  • É fácil adicionar novos consumidores ao sistema.
  • Os consumidores podem responder aos eventos imediatamente assim que chegarem.
  • Altamente escalonável e distribuído.

Desafios

  • Garantir entrega dos eventos, sem eventos sem sistema.
  • Ordenação dos eventos (em alguns casos é irrelevante).

Como todas os outros paradigmas, deve-se pesar os prós e contras da arquitetura antes de usá-la e tentar construir um sistema robusto o suficiente para contornar os problemas e extrair o máximo de suas virtudes.

--

--