A computação na nuvem é um marco na história da tecnologia que ampliou a segurança e trouxe versatilidade aos usuários. O desenvolvimento e implantação de aplicações também foi favorecido pela nuvem e é justamente neste contexto que se encontra a Arquitetura Serverless.
Profissionais da área de tecnologia da informação devem conhecer o seu conceito, fundamentos, vantagens, desvantagens e melhores práticas. Pensando nisso, desenvolvemos este guia completo que reúne as principais informações sobre o tema.
Continue a leitura e entenda como a abordagem da Arquitetura Serverless pode simplificar seus projetos, reduzir custos e aumentar a escalabilidade da sua aplicação!
O que é Arquitetura Serverless?
Arquitetura Serverless é um modelo de desenvolvimento nativo em nuvem que permite aos desenvolvedores criarem e executarem aplicações sem a necessidade de gerenciamento de uma infraestrutura de servidores.
Isso não significa que os servidores não são usados, os servidores físicos ou virtuais ainda existem e são utilizados para executar o código das suas aplicações. No entanto, essa é uma camada de infraestrutura que fica completamente oculta para o desenvolvedor.
Desta maneira, os detalhes sobre como esses servidores são provisionados, configurados, escalados e mantidos são ocultados do desenvolvedor, fazendo com que ele não precise se preocupar com a infraestrutura subjacente, como escolher o tipo de servidor, instalar sistemas operacionais ou configurar bancos de dados.
Com a Arquitetura Serverless, o desenvolvedor só precisa se preocupar em escrever o código da aplicação. A parte de gerenciamento dos servidores fica por conta da plataforma na nuvem. É como se você entregasse seu código pronto para uma fábrica, e ela se encarregasse de transformá-lo em um produto final.
É como se um chef alugasse uma cozinha industrial e pudesse se dedicar apenas à elaboração dos pratos. A empresa que aluga a cozinha cuidaria do resto: limpeza, gestão da água e gás, utensílios, entre outros.
Como ela surgiu e evoluiu?
Tudo começou com o uso de servidores físicos para rodar as aplicações. Naquele momento, o desafio era ter servidores suficientemente robustos capazes de suprir as demandas. O grande problema é que a necessidade de comprar uma máquina com alta capacidade se refletia em gastos expressivos.
Isso fazia com que a maior parte dos usuários optasse pela aquisição de várias máquinas com menor capacidade, que eram usadas em conjunto, trazendo um controle mais eficiente dos servidores, especialmente em termos de custos.
Com o avanço da tecnologia e o desenvolvimento de novas soluções, surgiu a virtualização, movimento no qual se realizava uma simulação do hardware por meio do software. Com a redução na necessidade de aquisição de hardwares, os custos foram consideravelmente reduzidos.
Pouco tempo depois, observou-se o início da chamada “era Cloud”, no Brasil, “era da tecnologia na nuvem“. O primeiro grande movimento nesse sentido foi marcado pelo que chamamos de Infrastructure as a Service (IaaS) ou “Infraestrutura como serviço”.
A IaaS é um conceito que parte da ideia de funcionamento baseado em demanda, ou seja, ela fornece a infraestrutura dos servidores, de armazenamento e conexão. Os desenvolvedores cuidavam da aplicação — software, dados e serviço.
Depois da IaaS veio a Platform as a Service (PaaS) ou “Plataforma como serviço”, que, diferente da anterior, fornece uma plataforma com toda a infraestrutura necessária para criar e gerenciar as aplicações. Assim, os desenvolvedores ficam responsáveis apenas pela tecnologia usada, serviços e dados tratados.
A diferença entre o IaaS e o PaaS é que são dois modelos de computação em nuvem que oferecem diferentes níveis de abstração e controle para os usuários.
Enquanto o IaaS fornece recursos de infraestrutura, mas mantêm o usuário responsável por gerenciar o sistema operacional, aplicativos e outros componentes da infraestrutura, o PaaS fornece uma plataforma completa para desenvolvimento, teste e implantação de aplicativos. Assim, no PaaS o usuário se concentra no desenvolvimento e gerenciamento dos aplicativos, enquanto a plataforma cuida da infraestrutura subjacente.
Foi justamente a partir do PaaS que surgiu a ideia da Arquitetura Serverless, uma plataforma visando dar suporte para o gerenciamento de toda a infraestrutura por trás das aplicações.
Como funciona a Arquitetura Serverless?
Diferente dos modelos tradicionais de computação em nuvem, como a IaaS, o serverless transfere a responsabilidade de gerenciar a infraestrutura inteiramente para o provedor de nuvem. Enquanto no IaaS você “aluga” servidores que rodam 24/7, mesmo quando sua aplicação está inativa, no serverless, os recursos são provisionados sob demanda.
Isso significa que sua aplicação é executada em contêineres que são iniciados apenas quando necessário, garantindo a otimização e reduzindo custos.
Na IaaS, os clientes adquirem infraestrutura computacional que está sempre disponível, como se estivessem alugando servidores físicos. Assim, mesmo quando a demanda por sua aplicação é baixa, a infraestrutura contratada continua alocada e sendo cobrada. Para atender a picos de demanda, é necessário provisionar infraestrutura adicional com antecedência, o que pode levar a custos variáveis e imprevisíveis.
No Serverless, a lógica é outra, já que ele cobra apenas pelo tempo de execução real da aplicação. Ou seja, os são alocados dinamicamente, somente quando necessário, e liberados assim que a tarefa é concluída.
Essa é uma abordagem que elimina a necessidade de manter servidores sempre ativos, mesmo em períodos de baixa demanda, resultando em uma maior eficiência e economia. Isso também reflete na automática adaptação à carga de trabalho.
É válido destacar que arquitetura serverless libera os desenvolvedores de tarefas operacionais complexas, como gerenciar sistemas operacionais, aplicar patches de segurança e ajustar a capacidade dos servidores e essa é uma das suas grandes vantagens.
Com algumas responsabilidades totalmente assumidas pelo provedor de nuvem, os desenvolvedores podem se concentrar em criar funcionalidades e entregar valor ao negócio de forma mais rápida.
Escalabilidade serverless
No modelo serverless, a escalabilidade automática se adapta aos recursos computacionais, atendendo às demandas em tempo real. Ou seja, quando a carga de trabalho aumenta, a plataforma serverless adiciona automaticamente novos contêineres para executar as funções, implementando a escalabilidade horizontal.
Assim, o número de instâncias da função é aumentado para lidar com o aumento da demanda. Por outro lado, quando a carga diminui, a plataforma remove os contêineres ociosos, reduzindo os custos.
Essa flexibilidade é possível graças à abstração da infraestrutura, onde o provedor de nuvem gerencia a alocação e o dimensionamento dos recursos de forma otimizada, sem a necessidade de intervenção manual do desenvolvedor.
Quais as etapas da Arquitetura Serverless?
Como você pode ver, esse modelo de arquitetura muda a forma como as aplicações são desenvolvidas e operadas. Em termos práticos, isso é refletido no trabalho dos desenvolvedores, que encontram a possibilidade de criar uma abordagem para execução de código em ambientes de nuvem mais eficientes.
Para compreender melhor as suas etapas, primeiro, você precisa entender o que é FaaS. O Function as a Service (FaaS) é uma implementação específica da arquitetura serverless. Nessa abordagem, o usuário divide a aplicação em pequenas funções independentes que são executadas em resposta a eventos. Cada função é um container isolado que é provisionado e escalado automaticamente pela plataforma FaaS.
O FaaS é a maneira mais pura de experimentar os benefícios da arquitetura serverless, por meio dele o usuário adota uma abordagem de desenvolvimento de software altamente escalável, eficiente e focada em eventos. Para entender melhor como o FaaS funciona, confira cinco das suas principais etapas.
Criação das funções
A etapa inicial é onde se criam as funções que serão usadas quando os eventos forem acionados. Ou seja, o desenvolvedor escreve o código da função em uma linguagem de programação específica (como Python, JavaScript etc.), definindo as ações que a função deve realizar quando for executada.
Deploy das funções
Com as funções criadas, o desenvolvedor envia o código da função para a plataforma serverless (provedor de nuvem), que se encarrega de armazenar e preparar a função para ser executada.
Provedor de nuvem
Agora, o provedor de nuvem gerencia toda a infraestrutura necessária para executar as funções, incluindo servidores, sistemas operacionais, redes e bancos de dados. Ele também é responsável por escalar os recursos automaticamente para atender à demanda.
Acionamento da função
Um evento (como uma requisição HTTP, uma mensagem em uma fila ou uma alteração em um banco de dados) aciona a execução da função. O provedor de nuvem detecta o evento e inicia a execução da função em um ambiente isolado.
Cobrança
O provedor de nuvem cobra com base no tempo de execução da função e nos recursos computacionais utilizados. Quanto mais tempo a função leva para executar e quanto mais recursos ela consome, maior será o custo.
Perceba que a arquitetura serverless FaaS permite que os desenvolvedores se concentrem na lógica de negócio, sem se preocupar com a infraestrutura. O provedor de nuvem cuida de tudo, desde o provisionamento de recursos até a cobrança. Essa abordagem oferece diversos benefícios, como você verá a seguir.
Quais as vantagens e desvantagens?
A arquitetura serverless é uma alternativa interessante e que oferece vantagens e desvantagens. A seguir, exploramos os dois lados dessa solução.
Vantagens
Certamente, há inúmeras vantagens associadas ao seu uso, entre elas destacamos: aumento de produtividade, facilidade na adoção de práticas de DevOps, incorporação de soluções BaaS e redução de custos. Entenda!
Aumento da produtividade
A arquitetura serverless agiliza o processo de desenvolvimento, permitindo que novas funcionalidades sejam entregues mais rapidamente. Simplificando o gerenciamento de infraestrutura, ela reduz a complexidade e facilita a colaboração entre equipes, refletindo no ganho de produtividade.
Eliminando a necessidade de gerenciar servidores, os desenvolvedores não precisam se preocupar com detalhes como configuração de sistemas operacionais, instalação de softwares e escalabilidade de recursos.
Com menos tarefas operacionais, os desenvolvedores podem dedicar mais tempo à criação de funcionalidades e à resolução de problemas complexos, acelerando o desenvolvimento de novos produtos e serviços.
Incorporando práticas de DevOps
A automação inerente à computação serverless simplifica a adoção de DevOps. Tarefas como provisionamento e gerenciamento de infraestrutura são automatizadas, reduzindo a necessidade de coordenação entre equipes e acelerando a entrega de valor.
Soluções BaaS
Muitas soluções Backend as a Service (BaaS) são implementadas utilizando a arquitetura serverless. Os provedores de BaaS aproveitam os benefícios da escalabilidade automática, do pagamento por uso e da abstração de infraestrutura oferecidos pela Serverless para fornecer seus serviços.
Assim, na hora de desenvolver um software, é possível utilizar módulos prontos e completos oferecidos por outras empresas, como as soluções BaaS. Desta forma, em vez de construir do zero funcionalidades como bancos de dados, autenticação de usuários, notificações e outras, é possível simplesmente integrá-las ao projeto.
Isso agiliza o desenvolvimento, pois não há necessidade de se preocupar com a infraestrutura e a complexidade dessas funcionalidades, permitindo que o profissional se concentre na lógica de negócio principal do seu aplicativo.
Redução de custos operacionais
Como já destacamos, o serverless oferece um modelo de pagamento por uso, onde os custos são diretamente proporcionais ao tempo de execução das funções. Diferente do que ocorre com os servidores tradicionais, que demandam custos fixos mesmo em períodos de baixa utilização, a serverless permite escalar os recursos de forma automática e granular, otimizando os gastos.
Desvantagens
Assim como há benefícios, é importante que o desenvolvedor avalie também as desvantagens, isso trará mais segurança na tomada de decisão e na implementação das soluções de desenvolvimento.
A migração para modelos de computação como Serverless, embora ofereça diversas vantagens, não está isenta de desafios. Uma das principais preocupações é a perda de controle sobre a infraestrutura e a lógica do sistema.
Transferindo a gestão do servidor para um provedor de nuvem, os desenvolvedores podem se deparar com restrições sobre como interagir com os componentes, limitando a flexibilidade e a personalização dos sistemas.
Em ambientes BaaS, essa dependência se torna ainda mais evidente, pois os desenvolvedores utilizam serviços com código que não podem ser modificados diretamente. Essa falta de controle sobre o código-fonte pode dificultar a resolução de problemas específicos e limitar a capacidade de adaptar o sistema a necessidades futuras.
Outra desvantagem é o aumento da dependência do fornecedor. Transferindo a gestão da infraestrutura para um terceiro, as empresas ficam mais suscetíveis a mudanças nas políticas e preços dos provedores. Somado a isso, a troca de provedor pode ser um processo complexo e custoso, exigindo a migração dos dados e a adaptação dos sistemas às novas especificações.
Ou seja, embora a Arquitetura Serverless ofereça agilidade e escalabilidade, é fundamental considerar os trade-offs envolvidos. A perda de controle sobre a infraestrutura e a dependência de terceiros podem ser desafios de alto impacto para algumas empresas.
Qual o passo a passo para iniciar?
Você já conseguiu entender melhor o funcionamento, vantagens e desvantagens da Arquitetura Serverless. Agora, é hora de conhecer um passo a passo para começar o seu uso. Confira, a seguir, as nossas dicas!
Escolha o provedor de nuvem
O primeiro passo é um dos mais importantes e precisa ser estudado com atenção. Considere as necessidades da empresa, os recursos oferecidos, eventuais limitações e preços. A ideia é que o usuário invista em um provedor que atenda às demandas específicas do seu projeto.
Planeje a aplicação
Como vimos, a Arquitetura Serverless promove um modelo de desenvolvimento orientado a eventos, onde funções são executadas em resposta a estímulos externos. Essa abordagem, modular e escalável, permite criar sistemas mais flexíveis.
Imagine um cenário em que o upload de uma imagem desencadeia uma série de funções para processamento, notificação e armazenamento, tudo de forma automatizada.
Inicie o desenvolvimento das funções
Cada função deve ser pequena e focada em uma única tarefa, facilitando a reutilização e a manutenção. Evitando o compartilhamento de estado entre as funções, você garante a independência e a escalabilidade do sistema.
Teste as funções
Para garantir a qualidade das funções, promova testes antes da implantação. Plataformas como o Serverless Framework e AWS SAM oferecem ambientes de desenvolvimento local e simulados, facilitando a criação e execução de testes unitários e integrados.
Implante
Realizados os testes e estando tudo dentro das expectativas é hora da implementação. Considere que o processo varia de acordo com o provedor de nuvem que está sendo utilizado.
Monitore
Depois da implementação é necessário estar atento ao monitoramento e desempenho das funções, ferramentas como Google Stack Driver e AWS CloudWatch podem auxiliar nesta etapa.
Atenção para a segurança
Para garantir a segurança de aplicações, implemente práticas como o gerenciamento de identidades e acessos, a criptografia de dados em repouso e em trânsito. A realização regular de testes de segurança também devem ser incluídos no cronograma do projeto.
Lembre-se que o processo de desenvolvimento é um ato contínuo e que não pode estagnar. Por isso, é recomendado que o desenvolvedor continue interagindo, buscando novas práticas e aperfeiçoando as funções.
Quais as práticas para garantir a segurança da Arquitetura Serverless?
A segurança em Arquiteturas Serverless é necessária para a proteção dos dados e a integridade das aplicações. Entre as práticas que podem ser adotadas neste sentido, destacamos:
- gerenciamento de identidade e acesso com controle de permissão e acesso de acordo com a função de cada usuário, regras rigorosas de autenticação e implementação de autorização granular;
- uso de protocolos HTTPS para proteger a comunicação entre os componentes da aplicação;
- criptografia de dados armazenados em bancos de dados ou outros serviços de armazenamento;
- uso de serviços como AWS KMS para gerenciar chaves criptográficas;
- implementação da rotação regular das chaves para minimizar os riscos de comprometimento;
- validação e sanitização das entradas de usuários e implementação de mecanismos de tratamento de erros;
- manutenção das atualizações para correção de eventuais vulnerabilidades;
- monitoramento e detecção de ameaças por meio de análise de logs, configuração de alertar e uso de Web Application Firewall (WAF); e
- realização de testes regulares de penetração.
Somado a isso, é fundamental investir no treinamento contínuo dos profissionais envolvidos no uso dos sistemas e elaborar um plano de resposta a incidentes — ele servirá de suporte caso alguma invasão aconteça.
Vale a pena usar a Arquitetura Serverless?
A resposta não é tão simples já que a escolha depende da análise das necessidades de cada negócio. Desta forma, a escolha entre arquitetura serverless e tradicional envolve uma série de considerações.
A serverless, com sua capacidade de escalar automaticamente e de provisionar recursos sob demanda, é ideal para projetos que exigem rápida prototipagem e alta escalabilidade, como MVPs e aplicações com picos de demanda imprevisíveis.
No entanto, para sistemas que demandam um alto nível de controle sobre a infraestrutura e a personalização do ambiente de execução, a arquitetura tradicional pode ser mais adequada.
Antes de escolher, é interessante considerar que a serverless introduz uma dependência de terceiros, o que pode afetar a disponibilidade e a segurança da aplicação em caso de interrupções nos serviços do provedor de nuvem. A decisão final deve ser tomada com base em uma análise cuidadosa dos requisitos do projeto, dos recursos disponíveis e dos riscos envolvidos.
Podemos afirmar, sem dúvida, que a Arquitetura Serverless é uma solução para times que estão à procura de uma combinação entre escalabilidade e velocidade. Porém, para times mais exigentes com relação à segurança e disponibilidade, ela pode não ser a melhor opção.
Como vimos ao longo deste guia, essa abordagem tem transformado a maneira como se desenvolvem e se escalam as aplicações, eliminando a necessidade de gerenciar infraestrutura e permitindo que os profissionais se concentrem na lógica do desenvolvimento.
A Arquitetura Serverless oferece diversos benefícios, como maior escalabilidade, redução de custos, agilidade no desenvolvimento e menor tempo de lançamento no mercado. No entanto, é preciso estar ciente de que essa abordagem não é uma solução mágica para todos os problemas. Existem desafios a serem considerados, como a dependência de serviços de terceiros, a complexidade de gerenciar funções sem estado e os custos associados a chamadas de função excessivas.
Para acertar na escolha é necessário entender as necessidades do projeto, os trade-offs envolvidos e as melhores práticas de implementação. A partir da análise das demandas do seu projeto, fica mais fácil escolher a melhor solução, usufruindo dos benefícios da abordagem por meio da construção de aplicações de alta qualidade que atendam às demandas do mercado.
Não esqueça que, para construir aplicações de sucesso, é preciso combinar essa abordagem com outras tecnologias e práticas de desenvolvimento, como DevOps, microsserviços e design de API. A combinação inteligente de necessidades, tecnologias e expectativas, permite usufruir o que há de melhor em termos de desenvolvimento de software.
Você gostou de conhecer mais sobre a Arquitetura Serverless? Aproveite para assinar a nossa newsletter e receber outros conteúdos sobre desenvolvimento e tecnologia.