Computação Serverless: Guia Completo para Iniciantes (Vantagens, Desvantagens & Mais!)

A ideia de computação “sem servidor” pode levar alguns a acreditar que este modelo dispensa a necessidade de servidores para a execução de código e outras tarefas de desenvolvimento. Contudo, essa é uma interpretação equivocada.

Após desmistificar essa noção, talvez você se pergunte sobre a lógica por trás do termo “sem servidor”.

Aqui está a chave: o termo “sem servidor” não se refere à ausência física de servidores, mas sim à forma como esses servidores são gerenciados e implementados.

Parece complexo?

Vamos explorar o conceito de serverless e termos relacionados para dissipar quaisquer dúvidas. O modelo serverless está ganhando crescente destaque. Estima-se que o mercado serverless alcance a marca de US$ 7,7 bilhões até 2021, um salto considerável em relação aos US$ 1,9 bilhão registrados em 2016.

A seguir, detalharemos o modelo serverless e tentaremos compreender sua popularidade crescente.

O que é Computação Sem Servidor?

A computação serverless, ou sem servidor, representa um modelo de execução em nuvem no qual os provedores de serviços disponibilizam recursos de máquina sob demanda, assumindo a responsabilidade pela gestão dos servidores, em vez dos clientes ou desenvolvedores. Essa abordagem combina serviços, estratégias e práticas que permitem aos desenvolvedores construir aplicações em nuvem, focando no código e não na infraestrutura do servidor.

Desde a alocação de recursos e planejamento de capacidade, passando pelo gerenciamento, configurações e escalonamento, até a aplicação de patches, atualizações, agendamento e manutenção, o provedor de serviços em nuvem (como AWS ou Google Cloud Platform) assume a gestão completa da infraestrutura. Isso permite que os desenvolvedores direcionem seus esforços e tempo à lógica de negócios de suas aplicações.

A arquitetura serverless não mantém recursos de computação em memória volátil; a computação ocorre de forma fragmentada e por curtos períodos. Se uma aplicação não está em uso, não há alocação de recursos para ela, garantindo que o pagamento seja referente aos recursos efetivamente utilizados.

O principal objetivo do modelo serverless é simplificar o processo de implantação de código em produção. Ele se integra com modelos tradicionais, como microsserviços. Após a implementação serverless, as aplicações respondem rapidamente às demandas, escalando automaticamente para cima ou para baixo conforme a necessidade.

A computação sem servidor utiliza um modelo orientado a eventos para dimensionamento. Assim, os desenvolvedores não precisam prever o uso de uma aplicação para definir a quantidade de servidores ou largura de banda necessária. É possível aumentar a capacidade de servidores e largura de banda conforme a demanda, sem reserva prévia, e reduzi-la sem complicações quando não for mais necessário.

A Evolução do Modelo Serverless

Sistemas tradicionais apresentavam desafios de escalabilidade e agilidade no desenvolvimento e implantação de aplicações. O aumento da demanda por aplicativos de alta qualidade e ciclos de lançamento mais curtos gerou a necessidade de sistemas mais eficientes em escalabilidade e agilidade, impulsionando a evolução da computação em nuvem e do modelo serverless.

O modelo serverless evoluiu em etapas, desde abordagens monolíticas até microsserviços e, finalmente, a arquitetura serverless ou Function-as-a-Service (FaaS).

  • A arquitetura monolítica é um modelo tradicional e unificado de desenvolvimento de software, onde todos os componentes e subcomponentes são compilados ou executados juntos. Se um serviço apresentar falha, todo o servidor de aplicações e os serviços nele contidos podem ficar indisponíveis.
  • A arquitetura de microsserviços é baseada em coleções de pequenos serviços dentro de uma grande aplicação, implementados de forma independente para funções específicas. Ela permite a entrega rápida de aplicativos em larga escala, proporcionando flexibilidade aos desenvolvedores através do uso de Infraestrutura como Serviço (IaaS) e Plataforma como Serviço (PaaS). No entanto, a escolha entre PaaS e IaaS pode ser desafiadora nesse modelo.
  • A arquitetura serverless evoluiu com a computação em nuvem, oferecendo mais escalabilidade e agilidade. Em vez de IaaS e PaaS, utiliza FaaS e Backend-as-a-Service (BaaS). Nessa abordagem, as aplicações são implementadas juntamente com os recursos necessários. O gerenciamento do servidor é desnecessário, e o pagamento cessa após a execução do código.

Características da Computação Sem Servidor

Algumas das principais características da computação sem servidor são:

  • A maioria das aplicações serverless consiste em funções únicas e pequenas unidades de código.
  • A execução do código ocorre sob demanda, geralmente em contêineres de software sem estado, escalando de acordo com a demanda.
  • Não há necessidade de gerenciamento de servidores por parte dos clientes.
  • A execução é baseada em eventos, criando o ambiente de computação quando uma função é acionada ou um evento é recebido para executar uma solicitação.
  • A escalabilidade é flexível, permitindo o aumento ou diminuição de recursos com facilidade. Após a execução do código, a infraestrutura cessa a operação, economizando custos. Da mesma forma, quando a função continua em execução, é possível escalar infinitamente, conforme necessário.
  • É possível usar serviços de nuvem gerenciados para lidar com tarefas complexas, como armazenamento de arquivos, filas, bancos de dados, entre outros.

Como o Modelo Sem Servidor Funciona?

A arquitetura serverless combina duas ideias principais: Function-as-a-Service (FaaS) e Backend-as-a-Service (BaaS). É baseada principalmente em FaaS, permitindo que serviços em nuvem executem código sem instâncias totalmente provisionadas. O FaaS consiste em funções sem estado, orientadas a eventos, escaláveis e do lado do servidor, totalmente gerenciadas por serviços em nuvem.

Este modelo permite que as equipes de DevOps escrevam códigos focados na lógica de negócios. Em seguida, definem eventos que podem acionar a execução da função, como solicitações HTTP. O provedor de nuvem executa a função e envia os resultados para que os usuários visualizem os aplicativos.

O modelo serverless oferece economia e praticidade com escalonamento automático sob demanda e pagamento pelo uso. Isso explica sua crescente adoção por diversas empresas e equipes de DevOps.

Quem Utiliza o Modelo Serverless e Por Quê?

Serverless está entre as tecnologias mais promissoras no desenvolvimento de software, com o potencial de eliminar a necessidade de gerenciamento e provisionamento de infraestrutura.

É ideal para:

  • Organizações que buscam mais escalabilidade e flexibilidade, além de maior capacidade de teste de aplicativos.
  • Desenvolvedores que desejam reduzir o tempo de lançamento no mercado, criando aplicativos ágeis e de alto desempenho.
  • Empresas que não necessitam de servidores em funcionamento constante. Elas podem acionar funções baseadas em módulos, sob demanda, por meio de aplicativos, para reduzir custos.
  • Organizações que buscam criar aplicações eficientes na nuvem e simplificar a migração para a nuvem.
  • Desenvolvedores que buscam reduzir a latência, oferecendo acesso a determinadas funções ou aplicações.
  • Empresas com recursos limitados para lidar com a complexidade e manutenção da infraestrutura de TI, buscando a computação sem servidor para resolução automática de problemas, sem necessidade de manutenção.

Alguns exemplos de usuários notáveis do modelo serverless são Slack, Coca-Cola e NetFlix.

Devido às suas características exclusivas, o modelo serverless se adapta a diversos casos de uso, como:

  • Aplicações web: Permite a criação de aplicações web rápidas e escaláveis, com respostas ágeis às demandas dos usuários. É ideal para aplicações sem estado, de inicialização instantânea, e para aplicações com picos imprevisíveis e pouco frequentes de demanda.
  • Back-ends de API: Em plataformas serverless, qualquer função pode ser facilmente transformada em endpoints HTTP prontos para uso pelos clientes. Essas funções são conhecidas como ações web. Uma vez ativadas, a montagem de funções em uma API completa se torna fácil. É possível usar um gateway de API para maior segurança, suporte a domínio, limitação de taxas e suporte OAuth.
  • Microsserviços: Serverless é amplamente utilizado em modelos de microsserviços, focados na construção de pequenos serviços capazes de realizar uma única função, comunicando-se entre si por meio de APIs. Embora seja possível criar microsserviços utilizando contêineres de software e PaaS, o serverless é mais eficiente, facilitando linhas de código menores com provisão rápida, escalonamento automático e preços flexíveis que não cobram quando os recursos não estão em uso.
  • Processamento de dados: Serverless é ideal para lidar com dados como vídeos, áudio, imagens e texto estruturado, e para tarefas como validação, transformação, enriquecimento, limpeza, normalização de áudio e processamento de PDF. Pode ser aproveitado para processamento de imagem, incluindo nitidez, rotação, geração de miniaturas e redução de ruído. Outras aplicações são transcodificação de vídeo e reconhecimento óptico de caracteres (OCR).
  • Processamento de fluxo/lote: É possível criar aplicações de streaming e pipelines de dados robustos usando FaaS e um banco de dados com Apache Kafka. O modelo serverless suporta diferentes ingestões de fluxo, incluindo logs de aplicativos, sensores IoT, lógica de negócios e mercado financeiro.
  • Computação paralela: Serverless é excelente para tarefas de computação paralela, onde cada tarefa é executada simultaneamente para concluir uma tarefa específica, incluindo pesquisa de dados, processamento, operações de mapa, web scraping, processamento de genoma e ajuste de hiperparâmetros.
  • Outras aplicações: Serverless também é usado em diversas áreas, como gestão de relacionamento com o cliente (CRM), finanças, chatbots e inteligência e análise de negócios.

Nota: Serverless pode não ser a solução ideal para todos os casos. Aplicações maiores com cargas de trabalho previsíveis e constantes podem se beneficiar mais de uma arquitetura tradicional, com servidores dedicados, gerenciados ou autogerenciados. Além disso, a transição para uma arquitetura totalmente nova e diferente pode ser custosa e desafiadora para organizações com configurações tradicionais e sistemas legados.

Vantagens e Desvantagens da Computação Sem Servidor

Assim como qualquer tecnologia, a arquitetura serverless possui vantagens e desvantagens que devem ser consideradas antes de sua adoção.

Vantagens 👍

As principais vantagens da arquitetura sem servidor incluem:

Custo-Benefício

Serverless oferece maior economia em comparação à compra ou aluguel de servidores, nos quais você paga pelos recursos, mesmo que não os utilize.

O modelo serverless emprega o pagamento conforme o uso, em que você paga pelos recursos efetivamente consumidos. O provedor serverless cobra apenas pela memória alocada e tempo de execução do código, sem custos adicionais de tempo ocioso.

Isso resulta em economia nos custos operacionais de tarefas como instalação, licenças, manutenção, aplicação de patches e suporte. A ausência de hardware de servidor também reduz os custos de mão de obra.

Escalabilidade

Sistemas sem servidor oferecem alta escalabilidade, permitindo aumentar ou diminuir a capacidade sob demanda, por isso são chamados de “elásticos”.

Desenvolvedores não precisam de tempo dedicado para configurar sistemas ou políticas de escalonamento automático. O provedor de nuvem gerencia todos esses aspectos. Pequenas equipes podem executar seus códigos sem a necessidade de engenheiros de suporte ou infraestrutura.

Latência Reduzida

Como as aplicações não são hospedadas em um único servidor de origem, o código pode ser executado de qualquer lugar. Se o provedor de nuvem for compatível, é possível executar as funções do aplicativo em um servidor próximo aos usuários finais, reduzindo a latência devido à menor distância entre as solicitações do usuário e o servidor.

Produtividade

O modelo serverless melhora a produtividade dos desenvolvedores ao eliminar a necessidade de lidar com o gerenciamento de servidores. Eles também não precisam gerenciar diretamente solicitações HTTP ou multithreading no código.

O FaaS simplifica o desenvolvimento de back-end, expondo o código como funções orientadas a eventos. Isso economiza tempo para otimizar o código e o aplicativo.

Implantação Rápida de Aplicativos

Com serverless, desenvolvedores não precisam configurar o back-end ou carregar o código no servidor para implantar versões de aplicativos, acelerando o lançamento de novos produtos. Também é possível corrigir, atualizar, adicionar recursos ou solucionar erros rapidamente.

Outros benefícios incluem computação ecologicamente correta devido ao consumo reduzido de energia, criação simplificada de aplicativos com integrações integradas e tempo de lançamento no mercado mais rápido.

Desvantagens 👎

As desvantagens da computação sem servidor incluem:

Desempenho

Códigos serverless usados com pouca frequência podem apresentar maior latência do que aqueles executados continuamente em servidores dedicados, contêineres de software ou máquinas virtuais (VM). Isso ocorre devido ao tempo necessário para reinicialização, resultando em latência extra.

Dificuldade em Depurar e Testar

Testar o código, crucial para entender seu funcionamento, é desafiador em um ambiente serverless. A depuração é dificultada pela falta de visibilidade sobre os processos de back-end e pela divisão das aplicações em funções menores.

Problemas de Segurança

As preocupações com segurança cibernética são crescentes. Não é possível conhecer ou avaliar completamente a segurança do provedor de nuvem. Isso representa um risco ao confiar a eles o gerenciamento completo do back-end e dos dados sensíveis dos aplicativos.

Não Adequado para Processos Longos

Embora serverless seja econômico, não é ideal para todos os tipos de aplicações. Para aplicações com processos de longa duração, o custo com base no tempo e recursos alocados pode ser elevado, tornando a hospedagem de servidor dedicada mais adequada.

Outras desvantagens do serverless incluem a dificuldade de migração entre fornecedores e questões de privacidade.

Terminologias Chave na Arquitetura Sem Servidor

A compreensão do serverless envolve familiaridade com termos relacionados, como FaaS e BaaS, que impulsionaram sua evolução. A construção de um sistema sem servidor também requer bancos de dados, sistemas de armazenamento, pilhas de tecnologia e estruturas. Vamos explorar alguns desses conceitos.

Function-as-a-Service (FaaS)

FaaS é um conceito central do serverless, funcionando como um subconjunto. Este modelo de execução de código orientado a eventos permite escrever a lógica implementada em contêineres de software, executada sob demanda e gerenciada por uma plataforma de nuvem.

Em comparação com o BaaS, o FaaS oferece maior controle aos desenvolvedores na criação de aplicativos personalizados, em vez de depender de bibliotecas de código pré-fabricado.

Os contêineres de software onde o código é implementado são sem estado, simplificando a integração de dados e executando o código por períodos mais curtos. Desenvolvedores podem invocar aplicativos serverless por meio de APIs gerenciadas pelos provedores de nuvem via gateway de API.

Backend-as-a-Service (BaaS)

BaaS se assemelha ao FaaS, pois ambos utilizam um provedor de serviços terceirizado. Nesse modelo, um provedor de nuvem fornece serviços de back-end como armazenamento de dados, permitindo que desenvolvedores se concentrem no código de front-end. No entanto, as aplicações BaaS podem não ser orientadas a eventos ou executadas na borda, como as aplicações serverless.

Um bom exemplo de BaaS é o AWS Lambda. Desenvolvedores usam código serverless em contêineres com Lambda, que fornece diretrizes a serem seguidas ao enviar o código. Ele também automatiza os processos de inserção do código em contêineres e oferece um serviço gerenciado.

Pilha Serverless

Assim como outras tecnologias de software, a arquitetura serverless também inclui uma pilha de tecnologia que reúne componentes essenciais para criar um sistema ou aplicação sem servidor.

A pilha serverless inclui:

  • Uma linguagem de programação: A linguagem em que os desenvolvedores escreverão o código. Dependendo do fornecedor, pode-se escolher entre Java, JavaScript, Python, C#, Go, Node.js, F#, entre outras.
  • Uma estrutura serverless: Uma estrutura fornece a base para o código. Existem diversas estruturas para começar. Ela permite a criação, empacotamento e compilação do código, finalizando com a implementação na nuvem. As estruturas serverless agilizam o processo de codificação e simplificam o dimensionamento com tempo de configuração reduzido. Exemplos são Apex e AWS Serverless Application Model.
  • Bancos de dados serverless: Utilizados para armazenar dados que o código precisa acessar e interagir com funções para gatilhos. Esses bancos se comportam como funções serverless, mas armazenam dados por tempo indefinido. Exemplos incluem DynamoDB, Azure Cosmos DB, Aurora Serverless e Cloud Firestore.
  • Um conjunto de gatilhos: Eles auxiliam no início da execução do código, como solicitações HTTP.
  • Contêineres de software: Potencializam o modelo serverless e oferecem microsserviços em contêineres sem complexidade. Eles também funcionam como repositório para o código, facilitando o desenvolvimento para diversas plataformas como desktop ou iOS.
  • Gateways de API: Atuam como um proxy para ações da web, oferecendo roteamento HTTP, limites de taxas, visualização de uso da API e logs de resposta.

Como Implementar o Modelo Serverless e Otimizá-lo?

A transição para serverless acarretará mudanças em aplicações, tecnologia, custos, segurança e benefícios.

Para startups ou pequenas empresas, essa transição acelera o tempo de lançamento no mercado, permitindo a entrega rápida de atualizações com testes simplificados, depuração, coleta de feedback e solução de problemas.

Para grandes organizações, o serverless oferece mais escalabilidade para atender à demanda dos usuários, mas requer um investimento de custo significativo.

É essencial avaliar os prós e contras do serverless para seu tipo específico de negócio e demanda antes de prosseguir. Se a decisão for afirmativa, comece por:

  • Compreender as necessidades e identificar uma pilha de tecnologia serverless adequada.
  • Escolher um fornecedor serverless, como Google Cloud Functions, Azure Functions ou AWS Lambda.
  • Capacitar sua equipe com ferramentas de monitoramento do desempenho do sistema, prestando atenção ao número de solicitações, limitações, contagens de erros, taxas de sucesso, duração e latência de solicitações.

Fornecedores Serverless

Há vários fornecedores serverless ou provedores de nuvem no mercado. Alguns dos principais incluem:

  • AWS Lambda: Ideal para organizações que já utilizam os serviços da AWS, integrando-se com serviços de armazenamento, streaming e bancos de dados.
  • Microsoft Azure Functions: Ideal para usuários do Visual Studio Code. Funciona perfeitamente com DevOps e Azure Pipelines para CI/CD, suportando Durable Functions para funções com estado e oferecendo monitoramento integrado.
  • Google Cloud Functions: Recomendado para usuários de serviços Google, suportando aplicações JS, Go e Python, com funções acionadas do Google Assistant ou GCP e escalabilidade integrada.
  • IBM Cloud Functions: Ótimo para quem busca um modelo serverless baseado em Apache OpenWhisk, com monitoramento de desempenho, acionamento de eventos via API REST ou serviços de nuvem IBM, e integração com API Gateway da IBM para gerenciar endpoints.
  • Knative: Para serviços em execução no Kubernetes, com suporte de Google, Red Hat e IBM.
  • Cloudflare Workers: Ideal para aplicações que exigem alta capacidade de resposta, especialmente aplicações JavaScript. Oferece suporte ao Workers KV para armazenamento de dados e WebAssembly para compilar e fornecer diversas linguagens, além de melhorar a latência e capacidade de resposta com uma rede de 193 datacenters.

Conclusão: O Futuro do Serverless

A computação serverless está evoluindo com a crescente demanda por aplicações altamente escaláveis. Ela oferece benefícios como praticidade, economia, maior produtividade e outros.

Segundo uma pesquisa da O’Reilly, 40% dos entrevistados trabalham em empresas que adotaram a arquitetura sem servidor.

Apesar de algumas preocupações, como a latência devido às inicializações frias, testes e depuração, os provedores de nuvem estão trabalhando nessas áreas. É possível que, em breve, uma forma mais refinada de serverless surja com mais benefícios e problemas resolvidos. A popularidade e o uso do modelo serverless devem aumentar no futuro.

Você também pode se interessar por: 7 Maneiras pelas quais a computação sem servidor é uma tecnologia em ascensão