Event Driven Architecture (Parte 1)

Olá pessoal!

Neste post veremos um conteúdo bastante interessante. Se você busca um estilo arquitetural que proporcione benefícios para sua organização como execução de processos de negócio em menor tempo, agilidade em resposta às mudanças e disponibilidade de informação para tomada de decisão, então você deveria dar uma olhada em “Event Driven Architecture”.

Neste artigo entenderemos o conceito de eventos e eventos de negócios, veremos porque uma arquitetura orientada a eventos é importante e como tal arquitetura se realiza de forma lógica. Já na parte 2 desta série, veremos como a arquitetura lógica vista aqui se realiza fisicamente (quais são os produtos envolvidos) e alguns princípios que devem ser considerados ao se estabelecer tal arquitetura.

O conteúdo deste post foi baseado no livro Event Processing: Designing IT Systems for Agile Companies, de K. Chandy e W. Schulte. O livro traz tópicos como Padrões de Processamento de Eventos em Negócios, Arquitetura de Processamento de Eventos, O Papel de Processamento de Eventos em SOA, dentre diversos outros. Eu recomendo!

Vamos começar então pelo começo. O que é um evento? Um evento é qualquer coisa que acontece. Já um evento de negócio é um evento que é significante para a execução de atividades da sua organização, seja ela de qualquer ramo. Exemplos de eventos de negócios incluem o recebimento de um pedido de um cliente, a realização de um pagamento bancário, a alteração de um endereço de um cliente, a detecção de sinais de um atentado de fraude, a alteração do status de entrega de um pedido, etc.

Uma organização é dita como orientada a eventos quando ela responde diretamente a eventos, de forma que os eventos funcionem como estímulos, acionando determinadas ações. Considere como exemplo uma organização que percebe que a demanda pelo seu produto aumenta em uma determinada região (evento) e então aumenta sua produção e distribuição de tal produto em tal região (resposta).

A essa altura você deve estar se perguntando: E por que ser orientado a eventos é importante? Segundo o livro Event Processing: Designing IT Systems for Agile Companies, cenários de mercado atuais levam a adoção de estratégias de gerenciamento que por sua vez introduzem requisitos para a área de TI que são melhor endereçados através de uma arquitetura orientada a eventos. Considere o esquema representado na figura a seguir.

Motivadores para uma arquitetura orientada a eventos

No esquema apresentado, os cenários de mercado (identificado na figura como “Pressões de Negócios”) são o aumento no número de concorrentes, globalização, consolidação de mercados (para redução de custos / aumento de competitividade), melhora em serviços ao consumidor, questões regulamentares e agilidade nos negócios. Tais questões levam a adoção de estratégias de negócios em específico, como por exemplo, Agile enterprise e Adaptive enterprise (temas bastante difundidos em negócios atualmente), que por sua vez se traduzem em demandas sistêmicas ou requisitos para TI, que incluem orientação a tempo (timeliness), agilidade (agility) e disponibilidade de informação (information availability). Vejamos mais detalhes sobre cada um destes requisitos a seguir.

Orientação a tempo (Timeliness)

Pode ser entendido como a identificação da oportunidade de execução de um processo de negócio end-to-end em um tempo menor. Considere o exemplo onde uma seguradora que atualmente atende 90% dos seus sinistros em 25 dias úteis, passa a atender os mesmos 90% em 9 dias úteis. O benefício de tal redução de tempo se realiza através do aumento na satisfação do cliente, levando a maior lucratividade.

Agilidade (Agility)

Uma empresa ágil pode ajustar rapidamente seu comportamento em resposta a mudanças ambientais ou internas, como por exemplo, mudanças em demandas de clientes, ações da concorrência, questões regulatórias, tendências econômicas, etc. A principio, o conceito de agilidade pode ser confundido com o de “Orientação a tempo”, porém, agilidade se refere à capacidade da organização de mudar suas ações em resposta a tais eventos, ao invés de apenas fazer as coisas mais rapidamente. Considere o cenário em que ocorre uma mudança na situação econômica de um país e a demanda para a indústria automobilística que antes era por SUVs passa a ser por carros de pequeno porte e econômicos. Uma vez identificada tal mudança, organizações devem agir rapidamente mudando seus processos e infraestruturas internas de fabricação para atender ao novo cenário.

Disponibilidade de Informação (Information Availability)

Dentro da disciplina de gerenciamento da informação, o conceito de disponibilidade de informação, no contexto de processamento de eventos, pode ser dividido em três partes: Consistência de dados (Data consistency), Disseminação de informações (Information dissemination) e Consciência de situação (Situation awareness).

O objetivo de iniciativas de consistência de dados é manter diversas unidades de negócios e seus respectivos sistemas e bancos de dados de forma a ter uma visão única sobre os fatos. Já a disseminação de informações é uma necessidade básica tanto para os negócios como para a vida. Informações podem identificar a chagada de um pedido em uma organização ou antecipar situações anormais, como por exemplo, a chegada de uma tempestade. A consciência de situação implica em ter um entendimento atualizado sobre o que está acontecendo na organização de forma a viabilizar tomadas de decisões bem embasadas. Este conceito vai além da disseminação de informações, dado que ele implica em ter algo ou alguém interpretando e sintetizando diversas fontes de informações de forma a desenvolver uma visão consolidada do que está acontecendo.

Orientação a tempo, agilidade e disponibilidade de informação não podem ser endereçados simplesmente pelo aumento na velocidade da execução de processos de negócios seja, por exemplo, pelo aumento no número de pessoas/hora que atuam em tal processo ou ainda pela atuação mais inteligente de tais pessoas com o suporte das aplicações existentes da forma como são. A adoção destes conceitos requerem mudanças arquiteturais em processos de negócios e nos sistemas que os suportam. Vejamos então a seguir o que seria uma arquitetura de referência para “Event-Driven Architecture”.

Arquitetura de referência de uma “Event-Driven Architecture”

Um arquitetura orientada a eventos é consistida de uma rede de processamento de eventos. Uma rede de processamento de eventos, por sua vez, é consistida de aplicações ou componentes de aplicações que processam objetos de eventos.

Uma arquitetura de referência define um template para o design de um sistema de um dado domínio. Ela descreve o vocabulário, componentes e o relacionamento entre os componentes dentro e fora do sistema. Na arquitetura de referência que veremos a seguir não entraremos em detalhes de implementação (como por exemplo, os produtos utilizados), mas ao invés, veremos os conceitos envolvidos de forma mais abstrata. Confira tal modelo no diagrama a seguir e posteriormente a descrição de cada componente envolvido.

Arquitetura de Referência para uma "Event-Driven Architecture"

Produtores (Producers)

Um produtor de eventos é um componente de software responsável por detectar eventos no ambiente. Considere o seguinte exemplo: Um leitor RFID identifica uma mudança em seu ambiente como um evento de negócio, criando um objeto de evento e colocando-o em uma mensagem de notificação, emitindo-a através de um canal. O produtor, neste exemplo, é um software distribuído junto ao leitor RFID.

Canal (Channel)

Um canal pode ser entendido como um meio de transmissão de uma notificação de um componente da rede de processamento de eventos para o outro. Um canal pode receber mais de um tipo de notificação, como por exemplo, “Pedido Aprovado” e ao mesmo tempo, “Pedido Rejeitado”. Canais podem receber eventos de múltiplos produtores e torna-los disponíveis para apenas um consumidor, o que caracteriza uma abordagem denominada “fan-in”. O inverso também é possível, ou seja, a existência de apenas um produtor e eventos sendo disponibilizados por um canal para múltiplos consumidores, o que caracteriza uma abordagem denominada “fan-out”. Canais podem funcionar enviando mensagens, colocando objetos de eventos em um local compartilhado por produtores e consumidores ou ainda tendo o produtor chamando diretamente o consumidor.

Consumidor (Consumer)

Um consumidor é um agente da rede de processamento de eventos que recebe objetos de eventos. Dado o recebimento de um evento, um consumidor pode processar o evento localmente, pode acionar um serviço ou um processo de negócio, emitir uma mensagem, salvar o objeto para uso futuro (veja Complex Event Processing) ou ainda descartar o evento sem fazer nada com ele. Consumidores também são conhecidos como “event handlers”, “listeners” ou ainda “responders”.

Intermediário (Intermediary)

Redes de processamento de eventos podem ser intermediadas por canais apenas ou por canais e agentes de processamento de eventos.

Um canal é entendido como um intermediário de baixo nível, pois, suas funções são limitadas a tarefas relacionadas à comunicação apenas. Enquanto intermediário, um canal não modifica o conteúdo da mensagem recebida antes que ela seja entregue ao seu consumidor.

Já um intermediário, do tipo agente de processamentos de eventos, difere de um canal pelo fato de possibilitar a modificação do conteúdo da mensagem. Nestes casos, tais intermediários funcionam como consumidores e produtores de eventos, uma vez que eles recebem notificações, interpretam, processam e emitem novas notificações.

Existem duas categorias de agentes de processamentos: Roteadores de eventos e Geradores de eventos. Os roteadores se limitam a apenas ler objetos de eventos, filtrar, descartar aqueles que não são necessários para nenhum consumidor, e direcionar os eventos remanescentes para destinatários com base em seu conteúdo, caracterizando o que é conhecido como “content-based-routing”. Já os geradores de eventos fazem mais do que apenas retransmitir eventos. Eles podem receber e descartar eventos recebidos, gerando novos eventos com base nestes, que podem ser criados a partir de cálculos em cima dos eventos recebidos. Geradores de eventos intermediários podem:

  • Copiar dados dos eventos base, alterar seu formato e reordená-los;
  • Enriquecer eventos pelo acréscimo de dados relevantes, através da obtenção de dados adicionais a partir de base de dados ou outras fontes;
  • Computar valores como totais, médias, mínimos e máximos a partir de múltiplos eventos;
  • Realizar outros tipos de processamento de eventos complexos (complex event processing – CEP).

E assim ficamos por aqui! Não deixe de conferir o post seguinte, onde veremos algumas formas de realização física da arquitetura de referência apresentada e também alguns princípios da orientação a eventos. Até lá!

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

*