À medida que novas tecnologias como 5G e edge computing nos levam continuamente em direção à Quarta Revolução Industrial, caracterizada pela automação, robótica e aprendizagem de máquinas, a necessidade de processamento de dados em tempo real está se tornando cada vez mais importante. Desde empresas que dependem de Big Data para coletar insights dos clientes até aplicações de IoT que alavancam a aprendizagem de máquinas e IA, estamos gerando uma grande quantidade de dados - muitos dos quais devem ser instantaneamente analisados e executados para garantir sua relevância.
Para adaptar a escala e sofisticação desse intenso ambiente de processo, sensível ao tempo e com grande consumo de dados, é necessário um novo tipo de arquitetura de aplicação - um modelo que possa fornecer processamento em tempo real com escalabilidade, resiliência e uso eficiente de recursos. A arquitetura orientada a eventos, ou EDA - do inglês Event-driven Architecture -, proporciona esses benefícios substituindo o tradicional paradigma de request-response por um que automaticamente produz, detecta e reage a eventos. Este post proporcionará uma visão geral introdutória da EDA, incluindo suas principais definições e características, como funciona, seus casos de uso e suas vantagens.
O que é EDA?
Um artigo de 2020 da DZone define EDA como “um método de desenvolvimento de software para criar aplicações que se comunicam ou se integram de forma assíncrona com outras aplicações e sistemas através de eventos”. Embora esta definição forneça clareza para aqueles familiarizados com programação, precisa ser mais detalhada para os leigos no assunto.
O que são Eventos?
Em EDA, um evento é qualquer ocorrência que resulte em uma mudança de estado na aplicação. Os eventos podem originar-se de um usuário interagindo com um sistema (um comando de voz ou clique de mouse), uma fonte externa (um sensor que detecta mudanças de luz ou temperatura) ou dentro de um sistema (carregamento de um programa). Exemplos de eventos incluem:
- segurança doméstica: movimentos são detectados do lado de fora;
- semáforo inteligente: um motorista ultrapassa um sinal vermelho;
- e-commerce: um usuário cancela um pedido;
- envio de mercadoria: um item chega ao seu destino.
Embora alguns eventos possam não justificar qualquer ação, outros podem desencadear uma ou mais ações pré-determinadas. Por exemplo:
- a câmera começa a gravar e as luzes acendem;
- uma foto do veículo é tirada e transmitida;
- um reembolso é emitido, um e-mail é enviado e o estoque é atualizado;
- o remetente recebe uma notificação e o pedido é fechado.
Comunicação Síncrona vs. Assíncrona
Na comunicação síncrona, os processos devem ocorrer em uma ordem específica, e todas as outras atividades são bloqueadas até que uma resposta seja recebida ou o tempo do processo expire. Imagine o processo síncrono como se fosse uma fila para pagar sua compra numa mercearia, onde cada cliente deve ser atendido em sequência com a mesma prioridade. Nenhum cliente (ou seja, processo) pode ser encaminhado para o início da fila caso possua atributos especiais.
Isso não é um problema para aplicações monolíticas legadas, que consistem em processos fortemente acoplados que são dependentes uns dos outros. No entanto, as aplicações modernas são fracamente acopladas, consistindo em muitos processos independentes chamados microsserviços que se comunicam por meio de chamadas de API. Isso torna a programação síncrona problemática porque, de acordo com Stack Overflow, “se um serviço tem recursos bloqueados (por exemplo: um thread está pendurado), os timeouts agora são exponenciais”. Como resultado, a latência aumenta com a complexidade de uma aplicação, confundindo a capacidade de processamento em tempo real.
Diferentemente, a comunicação assíncrona não precisa ocorrer em uma ordem específica, permitindo que os processos ocorram simultaneamente e independentemente uns dos outros. Em vez de um modelo de response-request, a comunicação flui em uma única direção, o que elimina a necessidade de esperar por uma resposta antes de executar o código e, como resultado, reduz a latência e elimina o risco de timeouts. Voltando ao nosso exemplo da fila na mercearia, o modelo assíncrono é semelhante a um caixa que acelera o processo de pagamento da compra e reduz o tamanho da fila ao priorizar clientes que têm dinheiro ou cartões de crédito em mãos, enquanto coloca os clientes que emitem cheques em outra fila para terminar de preencher detalhes e autorizar o cheque.
Como funciona a EDA?
Componentes da EDA
A arquitetura EDA é composta por produtores de eventos, canais de eventos e consumidores de eventos. Um artigo do InfoQ 2020 distingue entre os três componentes:
- produtores de eventos: enviam dados para canais sempre que um evento ocorre;
- canais: enviam dados recebidos dos produtores de eventos para os consumidores;
- consumidores do evento: assinam os canais e consomem os dados.
Em outras palavras, os produtores são responsáveis por detectar eventos e enviar dados relevantes aos canais. Esses canais determinam para onde enviar notificações de que um evento ocorreu. As mensagens são recebidas por um ou mais consumidores, que podem agir em resposta aos eventos ou simplesmente observar que eles ocorreram.
Características da EDA
A utilização de canais de eventos como intermediários permite que os produtores de eventos sejam dissociados de consumidores de eventos. Como resultado, eles podem agir independentemente uns dos outros, possibilitando maior escalabilidade e tolerância a falhas. Além disso, a organização de aplicações envolvendo eventos permite que o código seja executado de forma assíncrona e automática, sem interação do usuário.
Em outras palavras, a EDA é baseada em push, onde os dados são transmitidos aos usuários, dispositivos e aplicações, em vez de pull, o que significa que os consumidores de dados tomam ações sobre os dados à medida que os mesmos são recebidos, em vez de quando solicitados. Por exemplo, nos primórdios do uso de e-mail utilizava-se um sistema baseado em pull, em que os usuários tinham que conectar-se à internet e clicar em um botão a fim de verificar a existência de e-mail. Agora, as notificações são enviadas aos usuários, alertando-os sempre que um novo e-mail é recebido, o que elimina a necessidade de verificar periodicamente se há novos e-mails.
As características do EDA incluem:
- comunicação baseada em push;
- componentes desacoplados escaláveis e disponíveis por projeto;
- fluxo de trabalho unidirecional assíncrono centrado em eventos, ao invés de bancos de dados mutáveis.
Exemplos de sistemas EDA
Um exemplo de EDA é um sistema de detecção de fraude. À medida que os bancos online e o e-commerce continuam a crescer em popularidade, os criminosos cibernéticos têm mais oportunidades de praticar fraudes na internet, usando estratégias que são mais difíceis de detectar do que nas transações presenciais. Em tais situações, uma ação imediata é fundamental para mitigar danos financeiros e capturar os cibercriminosos. Com a EDA, padrões de comportamentos fraudulentos podem ser analisados, detectados e resolvidos em tempo real.
Por exemplo, um sistema de detecção de fraude baseado em EDA pode treinar algoritmos usando padrões de históricos de comportamento. Quando os produtores de eventos reconhecem esses padrões, eles podem enviar notificações por meio de canais de eventos, o que pode desencadear ações, como interrupção de pagamentos e alertas às partes interessadas, tais como titulares de cartão, suas empresas de cartão de crédito e o e-commerce. No caso de um falso positivo, como uma atividade irregular durante uma transação válida de e-commerce, o titular do cartão pode então verificar a transação como legítima, ativando eventos que validarão a compra, notificarão as partes interessadas e melhorarão o algoritmo de detecção de fraude com as novas informações coletadas.
Além da detecção de fraudes, o EDA é frequentemente usado em:
- monitoramento de saúde;
- marketing em tempo real;
- processamento de pagamentos;
- negociação financeira;
- segurança cibernética;
- uma grande variedade de casos de uso de IoT.
Benefícios da EDA
Os inúmeros benefícios da EDA fazem com que seja uma ferramenta crucial para resolver os problemas da internet moderna. A tolerância a falhas não é apenas cada vez mais importante à medida que mais e mais serviços de missão crítica são movidos para a cloud, a explosão de dados gerados por IoTs, negócios digitais e outros serviços online exigem o uso eficiente de recursos para mitigar o custo e o impacto ambiental do processamento desses dados. De acordo com o IDC, estima-se que 59 ZB de dados foram gerados em 2020, o que prevê que “A quantidade de dados gerados nos próximos três anos será superior aos dados gerados nos últimos 30 anos, e o mundo vai gerar três vezes mais dados nos próximos cinco anos do que gerou nos últimos cinco anos”.
Nesse ambiente, as aplicações não só precisarão ser escalonadas para atender aos picos de demanda, mas também serão diminuídas rapidamente para minimizar o desperdício de recursos que ocorreria devido à operação consistente em larga escala. Felizmente, a EDA é escalável por natureza, capaz de ter uma elasticidade refinada aumentando e diminuindo no nível de eventos individuais. Além disso, a recuperação de dados em tempo real é menos dispendiosa e consome mais recursos do que a pesquisa periódica de serviços remotos para mudanças de estado, o que reduz a utilização da rede e da CPU e resulta em menos handshakes SSL/TLS.
Outro problema causado pelo desenvolvimento de aplicações modernas é que o uso de uma grande variedade de serviços cria problemas com acesso a bancos de dados. Conforme observado em um post do Stack Overflow 2020, “quando vários serviços compartilham um banco de dados, você pode criar problemas como dependências entre equipes sobre mudanças de projeto ou problemas de desempenho”. E quando os desenvolvedores tentam resolver este problema usando um banco de dados separado por serviço, eles precisam “lidar com transações distribuídas e com a complexidade de manter múltiplos bancos de dados”. Entretanto, com EDA, os registros de eventos podem fornecer um armazenamento de dados centralizado que atua como uma single source of truth (SSOT) - do inglês única fonte de verdade - para aplicações distribuídas, o que é útil na auditoria central e na aplicação de políticas.
A EDA é vantajosa por:
- ser altamente escalável;
- ser tolerante a falhas;
- custo e eficiência de recursos;
- auditoria central em sistemas distribuídos.
Conclusão
Um comunicadoà imprensa do Gartner de 2017 observou a necessidade de mudar para uma estratégia de negócios centrada em eventos, observando que “Uma base de tecnologia de negócios digitais deve suportar disponibilidade contínua, grande escalabilidade, recuperação automática e extensibilidade dinâmica”. Devido a esses benefícios, o Gartner apontou a EDA como uma ferramenta crucial para apoiar a transformação dos negócios digitais.
Quase quatro anos depois, a EDA é mais relevante do que nunca. Pois, não apenas fornece processamento em tempo real para IoTs e sites de baixa latência, como também oferece escalabilidade sob demanda, tolerância a falhas para serviços de missão crítica, uma single source of truth (SSOT) para aplicações distribuídas, além de análise, monitoramento e registro eficientes de dados para redução de custos e utilização de recursos.
O Edge Functions da Azion ajuda as empresas a fazer a transição perfeita para uma arquitetura orientada a eventos, criando funções orientadas a eventos, cada uma projetada para realizar uma tarefa específica, reduzindo a necessidade de reescrever ou reconstruir grandes bases de código.
Usando nossa plataforma de edge, o Edge Functions é executado automaticamente no ponto de presença mais próximo dos usuários finais para a menor latência, custo e uso de recursos possíveis. Além disso, é possível acessar facilmente insights em tempo real sobre o desempenho dos aplicativos através do Real-Time Metrics, que se integra com as ferramentas populares Big Data e SIEM para analisar e responder aos eventos em tempo real.
Para saber mais sobre o Edge Functions, visite nossa página de produtos ou inscreva-se para obter uma conta grátis e começar a construir funções orientadas a eventos hoje mesmo.