A arquitetura orientada por eventos (EDA) é reactiva a eventos ou mensagens e desencadeia acções específicas em vez de depender de uma comunicação direta e síncrona. A EDA é assíncrona, o que permite que os componentes funcionem de forma independente, melhorando a capacidade de resposta e o desempenho do sistema com cargas de trabalho variáveis.
Considere dois exemplos simples: carregamento de ficheiros e registo de novos utilizadores. Ambas as operações podem ocorrer através de um fluxo síncrono de pedido-resposta (ou seja, API REST), mas seria necessário efetuar um novo pedido para obter uma atualização do estado do carregamento de ficheiros ou para desencadear a ação seguinte após a inserção dos dados do novo utilizador na base de dados. Imagine que tem um grupo de executores de tarefas a sondar continuamente as mensagens; eles trabalham incansavelmente durante períodos de silêncio de rádio ou conversas não relacionadas para ocasionalmente receberem uma mensagem sobre a qual podem atuar. Pode ver que esta não é a utilização mais eficiente da elasticidade dos recursos de computação em nuvem a pedido. A EDA resolve este problema com uma abordagem baseada em envio.
Os sistemas orientados para eventos podem ser rapidamente escalados, adicionando ou removendo componentes conforme necessário, e podem ser altamente resistentes a falhas, uma vez que o sistema pode continuar a funcionar mesmo que um componente não esteja disponível. A EDA também é adequada para o processamento em tempo real e para o tratamento de grandes volumes de dados, uma vez que os componentes podem reagir a eventos e processar dados à medida que estes chegam, sem esperar por um conjunto de dados completo.
Porque é que deve considerar a EDA?
- Maior flexibilidade do sistema: A natureza fracamente acoplada de uma arquitetura orientada para eventos permite-lhe modificar, adicionar ou remover facilmente componentes sem afetar todo o sistema, tornando-o adaptável a requisitos em mudança.
- Escalabilidade melhorada: A EDA suporta um escalonamento horizontal fácil, permitindo que as empresas lidem com cargas de trabalho ou tráfego maiores, adicionando mais instâncias de componentes ou serviços conforme necessário.
- Maior resiliência do sistema: A comunicação assíncrona e os componentes desacoplados da EDA contribuem para uma maior tolerância a falhas, uma vez que a falha de um componente não provoca necessariamente uma paragem em todo o sistema.
- Capacidades de processamento em tempo real: A EDA permite o processamento em tempo real de grandes volumes de dados e de padrões de eventos complexos, o que a torna adequada para empresas que requerem conhecimentos imediatos ou respostas a condições em rápida mudança.
- Utilização optimizada de recursos: Ao reagir a eventos apenas quando estes ocorrem, a EDA ajuda a otimizar a utilização de recursos e reduz a necessidade de processos em execução contínua, o que pode levar a poupanças de custos e a uma maior eficiência.
Computação sem servidor nativa na nuvem
A EDA permite modelos de desenvolvimento de aplicações como a computação sem servidor, permitindo que o código seja portátil e independente do fornecedor, para que possa escolher o seu fornecedor de serviços em nuvem com base nas funcionalidades, na linguagem suportada, nos custos, etc. O Functions-as-a-Service (FaaS) é um produto popular oferecido por muitos fornecedores de serviços em nuvem, que permite aos utilizadores gerir funções e infraestruturas de aplicações numa só. O fornecedor de serviços em nuvem funciona como a camada de responsabilidade, tratando da infraestrutura subjacente, incluindo o aprovisionamento, o dimensionamento e a manutenção do servidor, permitindo que os programadores se concentrem na escrita de código.
Serviços FaaS conhecidos, como AWS Lambda, Azure Functions e Google Cloud Functions, são o que chamamos de nativos da plataforma. Eles geralmente prendem você ao uso de um provedor de nuvem específico, sem uma maneira fácil de migrar. Você nos ouvirá falar muito sobre o Knative como uma plataforma de código aberto baseada em Kubernetes para executar serverless, o que significa que ele pode escalar seu aplicativo de 0 a N número de réplicas em poucos segundos. Escalar para 0 é fantástico porque permite que o Kubernetes e o Knative realoquem recursos conforme necessário.
O seu único trecho de código pode escalar recursos automaticamente porque pode ser invocado várias vezes em paralelo. Em sua essência, as ofertas de FaaS nativas da plataforma que mencionamos anteriormente não são favoráveis por causa dos preços imprevisíveis. Ao executar o Knative em nossas instâncias de computação por meio de nosso serviço Kubernetes gerenciado, você paga um preço fixo e previsível e não precisa se preocupar com o preço de pagamento por execução que entra em ação após algumas camadas gratuitas.
Por que você deve considerar o Serverless?
- Eficiência de custos: O modelo de preços "pay-as-you-go" da computação sem servidor pode levar a poupanças de custos, uma vez que as empresas pagam apenas pelo tempo de computação que utilizam, sem atribuir recursos antecipadamente.
- Escalabilidade melhorada: A computação sem servidor pode escalar automaticamente os recursos para atender à demanda, garantindo que os aplicativos possam lidar com cargas de trabalho maiores sem intervenção manual ou tempo de inatividade.
- Redução da sobrecarga operacional: Com a computação sem servidor, o fornecedor da nuvem gere a infraestrutura subjacente, libertando as equipas de TI para se concentrarem no desenvolvimento de aplicações, na inovação e noutras iniciativas estratégicas.
- Tempo de colocação no mercado mais rápido: Os processos simplificados de desenvolvimento e implantação oferecidos pela computação sem servidor podem ajudar as empresas a acelerar o lançamento de novos recursos, atualizações e correções de bugs, aumentando sua vantagem competitiva.
- Flexibilidade e adaptabilidade: A computação sem servidor permite que as empresas criem e implementem aplicações utilizando uma variedade de linguagens de programação e tecnologias, facilitando a adaptação a requisitos em mudança ou a incorporação de novas tecnologias conforme necessário.
Como mencionei anteriormente, a computação sem servidor baseia-se numa arquitetura orientada para eventos, o que significa que as funções são desencadeadas por eventos como pedidos HTTP, uploads de ficheiros, actualizações de bases de dados, etc. Isto pode ajudar a simplificar a arquitetura da aplicação e a melhorar a escalabilidade.
As funções sem servidor também devem ser stateless. Elas não armazenam nenhum dado ou estado entre as invocações, garantindo que as funções sejam facilmente escaláveis e que você possa substituí-las se elas falharem. Elas também devem ser de curta duração, garantindo que os recursos não sejam desperdiçados e que a função possa ser escalada rapidamente. Se a tarefa de uma função for de longa duração, avalie se um serviço em execução constante é mais adequado.
Não se esqueça também de monitorizar e registar as suas funções sem servidor para garantir que estão a funcionar como esperado e identificar quaisquer problemas ou erros. Use ferramentas como agregadores de log e ferramentas de monitoramento de desempenho de aplicativos (APM), como Prometheus e Grafana. E não se esqueça de proteger suas funções usando práticas recomendadas, como autenticação, autorização e criptografia. Isto garante que a aplicação é segura e que os dados sensíveis estão protegidos. Teste-as exaustivamente antes de as implementar na produção para garantir que funcionam como esperado e que não têm vulnerabilidades.
A computação sem servidor pode ser económica, mas é importante utilizar técnicas de otimização de custos, como a otimização de funções, a partilha de recursos e o escalonamento automático para reduzir os custos e melhorar a eficiência. Avalie sua carga de trabalho, padrões de uso e requisitos para determinar se a computação sem servidor é econômica para seu caso de uso específico. Considere os padrões de uso esperados, os requisitos de desempenho e a estrutura de preços da plataforma sem servidor que você escolher usar.
Comentários