Artigos Internos

Arquiteturas Orientadas a Eventos

Então, o que é uma Arquitetura Orientada a Eventos?

No mundo real, as coisas acontecem e nós reagimos a elas, o mesmo acontece em qualquer negócio; os eventos são o que os mantêm a funcionar, seja uma venda, uma consulta de cliente, uma tentativa maliciosa de violar o seu site ou um erro numa das suas aplicações principais. Tal como no mundo real, o seu negócio deve reagir a estes eventos; nem todos têm a mesma prioridade ou são importantes para o mesmo público na sua empresa.

Embora o último parágrafo possa parecer senso comum para a maioria das pessoas, uma grande maioria das arquiteturas em que as empresas operam não tem a capacidade de partilhar estes eventos com todas as partes que possam ter interesse neles. Os eventos são geridos pelas aplicações de um certo domínio, por exemplo, uma venda é gerida pela aplicação POS, uma fatura ou um recibo é gerado por essa ou outra aplicação do mesmo domínio, mas, se precisar de informar o seu departamento de manutenção que há outro produto vendido de que eles precisam de estar cientes, isso ocorrerá num processo em lote durante a noite e só estará disponível para eles no dia seguinte. Se o seu departamento de marketing quiser saber quais clientes compraram um determinado produto para criar uma nova campanha, ele pedirá a alguém do departamento de vendas que pedirá a alguém do departamento de TI para executar uma consulta e obter um relatório com essa informação.

Essa é a beleza das arquiteturas orientadas a eventos, você produz um evento, e todos os que possam ter interesse nele terão a oportunidade de reagir a ele.

Então, o que é uma Arquitetura Orientada a Eventos?

A arquitetura orientada a eventos é um padrão de design onde diferentes aplicações, desacopladas entre si, publicam assincronamente eventos num intermediário de eventos que pode ser posteriormente subscrito e consumido. Uma vez enviado um evento, qualquer aplicação que tenha acesso a esse tipo de evento poderá reagir a ele. A aplicação que enviou o evento não precisa de ter conhecimento sobre as outras aplicações que irão consumir esse evento. O contrário também é verdadeiro, um consumidor não precisa de saber onde um evento se originou.

Como funcionam as arquiteturas orientadas por eventos?

De uma forma simplista, existem produtores de eventos e consumidores de eventos, e existem duas formas comuns de lidar com os eventos:

  • Pub/Sub – Onde os produtores de eventos são publicadores e, quando publicam um evento, este é disponibilizado a todos os consumidores inscritos como subscritores para esse tipo de evento. Se um novo subscritor se inscrever, terá acesso apenas aos novos eventos publicados após a inscrição.
  • Streaming de Eventos – Todos os eventos produzidos são armazenados num registo, ordenados, e qualquer consumidor que tenha acesso ao stream pode ler todos os eventos e é responsável por saber quais os eventos que já foram consumidos. Desta forma, um novo consumidor pode reproduzir eventos passados criados antes de ter tido acesso ao stream.

Em ambos os casos, a responsabilidade do produtor termina no momento em que entrega o evento ao broker de eventos. O produtor não sabe quem o irá consumir, e a sua lógica de negócio não pode depender da suposição de que um determinado consumidor estará atento para o consumir.

Quando usar arquitetura orientada a eventos?

Existem alguns cenários-chave onde este tipo de arquitetura é fundamental:

  • Arquiteturas orientadas a eventos são particularmente adequadas para sistemas baseados em microsserviços, pois permitem que diferentes serviços comuniquem e reajam a alterações noutros serviços de forma assíncrona.
  • Análise em tempo real: Com arquiteturas orientadas a eventos, é possível processar fluxos de dados de alto volume quase em tempo real, o que é útil para aplicações como deteção de fraude em tempo real, seguimento do comportamento do cliente em tempo real e gestão de inventário em tempo real.
  • IoT: Sistemas IoT geram enormes quantidades de dados de sensores que podem ser inseridos numa arquitetura orientada a eventos para processamento e monitorização em tempo real.
  • Automação de Processos de Negócio: Arquiteturas orientadas a eventos podem ser usadas para automatizar processos de negócio que abrangem múltiplos sistemas, como processamento de encomendas, faturação e gestão de inventário.
  • Monitorização em tempo real: Ao utilizar uma arquitetura orientada a eventos, é possível monitorizar diferentes partes dos sistemas e acionar alertas ou outras ações em tempo real.
  • Arquiteturas de back-end para aplicações móveis: Uma arquitetura orientada a eventos pode ser útil na construção de back-ends para aplicações móveis, pois permite que diferentes partes do sistema reajam a eventos em tempo real, como notificações push, atualizações de localização ou alterações nos dados do utilizador.

Em geral, as arquiteturas orientadas a eventos são muito adequadas para casos de uso que exigem processamento em tempo real, escalabilidade e flexibilidade. Podem ajudar diferentes equipas a trabalhar em paralelo e com serviços desacoplados.

Isto não significa que só faça sentido nestes cenários e, mesmo que não tenha um destes cenários neste momento, se o seu objetivo é fazer crescer o seu negócio, tal acontecerá mais cedo do que pensa. E, então, terá um conjunto de benefícios potenciais que o ajudarão a responder mais rapidamente às mudanças nas condições de negócio e a lidar com o aumento do tráfego e do volume de dados à medida que escalam. Podem ajudar a melhorar o desempenho geral do sistema, a melhorar a colaboração e a tornar o processo de desenvolvimento mais tranquilo.

Se é fantástico, porque é que nem todas as empresas o utilizam?

Bem, há alguns desafios a superar ao usar arquiteturas orientadas a eventos:

  • Gestão do esquema de eventos: Com uma arquitetura distribuída orientada a eventos, pode ser desafiador manter a consistência e a compatibilidade na estrutura dos eventos que estão a ser produzidos e consumidos entre diferentes sistemas.
  • Versionamento de eventos: Quando o produtor do evento altera o seu esquema, os consumidores do evento precisam de ser atualizados em conformidade. Num sistema de grande escala, isto torna-se muito desafiador.
  • Testes: Devido à natureza distribuída das arquiteturas orientadas a eventos, pode ser difícil testar e validar o comportamento geral do sistema, especialmente ao lidar com eventos em tempo real.
  • Segurança: À medida que os eventos fluem através de múltiplos sistemas, pode ser difícil garantir que estão devidamente protegidos e seguros contra acesso não autorizado ou adulteração.
  • Latência: Se o tempo necessário para que um evento seja entregue e processado for demasiado elevado, pode ser desafiante implementar aplicações em tempo real.
  • Escalabilidade: À medida que o volume de eventos aumenta, pode ser um desafio escalar uma arquitetura orientada a eventos para suportar a carga acrescida.
  • Idempotência e ordenação de eventos: Em arquiteturas orientadas a eventos, os eventos podem ser entregues várias vezes. Garantir que o mesmo evento não seja processado mais do que uma vez pode ser uma tarefa difícil.
  • Depuração: Quando as coisas correm mal numa arquitetura orientada a eventos, pode ser um desafio identificar a causa raiz do problema e corrigi-lo.

Embora estes desafios possam parecer assustadores, muitas ferramentas modernas, frameworks e bibliotecas podem ajudar a mitigar algumas destas questões e tornar as arquiteturas orientadas a eventos mais fáceis de implementar e manter.

Existem algumas ferramentas que me podem ajudar a alavancá-lo?

Sim, atualmente existem várias ferramentas que o ajudam a implementar uma Arquitetura Orientada a Eventos. Esta lista não é exaustiva, mas inclui algumas das ferramentas mais populares:

  • Apache Kafka: Uma plataforma de streaming de eventos de código aberto que consegue lidar com um grande número de eventos e com elevada taxa de transferência.
  • RabbitMQ: Um agente de mensagens de código aberto que pode ser usado para implementar arquiteturas de pub/sub ou de transmissão de eventos.
  • Apache Pulsar: Um sistema de mensagens distribuído do tipo publicação/subscrição que suporta múltiplos modelos de mensagens, incluindo streaming de eventos.
  • Apache Storm: Um sistema distribuído de computação em tempo real que pode ser usado para processar fluxos de dados em tempo real.
  • AWS Kinesis: Um serviço gerido fornecido pela Amazon Web Services para o processamento em tempo real de dados em fluxo.
  • Azure Event Grid: Um serviço gerido fornecido pelo Microsoft Azure para encaminhamento e processamento de eventos.
  • Google Cloud Pub/Sub: Um serviço gerido fornecido pelo Google Cloud para mensagens em tempo real e streaming de eventos.
  • Apache NiFi: Uma ferramenta de código aberto para integração de dados e processamento de dados em tempo real.
  • Apache Flink: Um framework de processamento de fluxos de código aberto para aplicações distribuídas de dados em fluxo.
  • Apache Samza: Um framework de processamento de streams concebido para lidar com um grande número de eventos e com um elevado débito.
  • Confluent: Uma plataforma popular para streaming de eventos construída sobre o Apache Kafka. Inclui funcionalidades e capacidades adicionais como um registo de esquemas, proxy REST e motor de consulta SQL para Kafka.

É importante mencionar que, dependendo do seu caso de uso, certas ferramentas podem ser mais adequadas do que outras, e ferramentas diferentes podem ter conjuntos de funcionalidades e capacidades distintas.

Em conclusão, as arquiteturas orientadas para eventos permitem que as empresas reajam a eventos de forma flexível e escalável, permitindo-lhes responder mais rapidamente às necessidades e oportunidades de negócio em constante mudança. Ao desacoplar os produtores e consumidores de eventos, as empresas podem manter maior agilidade e resiliência, e evitar o risco de serem abaladas por sistemas monolíticos difíceis de alterar. Embora a implementação de arquiteturas orientadas para eventos possa ser desafiadora, os benefícios de velocidade, flexibilidade e escalabilidade aumentados tornam-na uma consideração valiosa para qualquer empresa que procure crescer e prosperar no ambiente competitivo e acelerado de hoje.

 

António Rodrigues

Diretor de Tecnologia

Artigos Internos

Artigos Relacionados