Serverless: O que é? Quais Prós e Contras?
Conheça os principais detalhes sobre Serverless: a definição, vantagens e desvantagens, diferenças entre modelos e muito mais.
Introdução
No primeiro artigo desta série, eu contei uma breve história sobre a evolução da implantação e execução de aplicações ao longo do tempo, começando com os Mainframes até os dias de hoje, utilizando a abordagem Serverless.
Esse retorno ao passado serviu para “preparar o terreno” para falarmos de Serverless no presente, tentando desmistificar esse termo.
Neste segundo artigo da série você irá entender de maneira clara e descomplicada o que é Serverless e como essa abordagem pode te ajudar a desenvolver e executar aplicações mais economicamente eficientes.
O que é Serverless?
Serverless é um modelo computacional voltado para você criar e executar aplicações nativas de nuvem sem se preocupar com servidores, máquinas virtuais ou contêineres para provisionar ou gerenciar.
Esses componentes de infraestrutura ainda existem “debaixo” da aplicação em execução, mas a presença deles é abstraída, sendo de responsabilidade da plataforma de nuvem e não sua.
Victor Shinya da AWS, escreveu a seguinte frase em um post no seu blog:
“Assim como a internet sem fio tem fios em algum lugar, a arquitetura Serverless ainda tem servidores em algum lugar”
Se você executou alguma máquina virtual em um serviço como Amazon EC2, Azure Virtual Machines ou Google Compute Engine, percebeu que o hardware para executar suas máquinas virtuais não era sua preocupação, certo?
O mesmo acontece com Serverless, só que com uma camada de abstração maior: você só se preocupa com o código a ser executado.
O que torna um serviço Serverless?
A melhor forma que encontrei para definir se um serviço é de fato Serverless ou não foi a partir de um teste criado pela Momento, solução de cache realmente Serverless, chamado de "Litmus Test for Serverless" ou, traduzindo, "Teste Decisivo Para Serverless".
Achei este teste muito útil pois, uma vez que Serverless está em alta, é comum ver alguns provedores aplicando a etiqueta "Serverless" em serviços que, convenhamos, não são tão Serverless assim...
Esse mesmo fato aconteceu com Computação em Nuvem, assim que esse modelo passou a se tornar popular.
Era muito comum ver os provedores de data center ofertar serviços de "nuvem" que não atendiam a proposta de computação em nuvem.
Com Serverless não está sendo diferente.
Essa deturpação do que realmente é Serverless está causando uma confusão generalizada e, por isso, atualmente não há uma visão muito bem clara sobre o que de fato é Serverless.
Voltando a falar do teste... de acordo com a Momento, estes são os 5 princípios que um serviço precisa atender para ser considerado Serverless.
❌ Nada para provisionar, nada para gerenciar
Com Serverless, você não gerencia servidores, máquinas virtuais ou contêineres.
Embora possam existir, eles são gerenciados pela plataforma de nuvem e completamente inacessíveis por você.
Isso reduz a complexidade operacional.
💰 Preços baseados no uso sem mínimos
Você paga pelos recursos que consome e não pela capacidade provisionada.
Você não paga pelo tempo que sua aplicação fica ociosa.
Isso pode reduzir os custos da nuvem.
✨ Pronto com uma única chamada de API
Um serviço Serverless deve permitir que desenvolvedores possam provisionar recursos com uma única chamada de API.
Não deve ser necessário esperar que instâncias sejam ativadas, inicializadas, etc.
Por exemplo, quando você cria um bucket no S3, você não precisa esperar que um cluster seja criado antes de você poder começar a enviar solitações para o bucket.
Outro exemplo é quando você cria uma função no Lambda.
Você possivelmente realizou uma única chamada para o endpoint CreateFunction
(ou fez isso via alguma ferramenta de IaC, como o Terraform) e, em seguida, pode começar a invocar sua função imediatamente.
De forma resumida, esses serviços simplesmente funcionam. Quase magicamente. ✨
📈 Escala conforme o uso
Serviços e aplicações Serverless possuem o escalonamento automático integrado.
À medida que as solicitações são recebidas, um serviço ou aplicação é dimensionado para atender a essa demanda.
Isso permite que você atenda rapidamente ao crescimento no uso de sua aplicação.
🆙 Sem downtime planejado
Você já percebeu que serviços como S3, SQS, Cloud Functions, Big Query, entre outros, simplesmente funcionam o tempo todo (exceto em casos de falhas imprevistas)?
Isso acontece pois não há espaço para downtime (tempo de inatividade) para estes tipos de serviços nos dias de hoje.
Todos estes serviços são implantados usando arquiteturas com alta disponibilidade e tolerância a falhas embutidas e você não precisa se preocupar com isso.
Por trás dos bastidores, há sim atualizações, deploys, escalonamento de infraestrutura, mas você, mero mortal, não precisa saber que eles acontecem.
Isso reduz a complexidade da engenharia e o tempo gasto para manter sua aplicação no ar.
0️⃣ Nenhuma instância
Você sabe me dizer quantas instâncias estão em execução nesse momento para suportar a sua fila no SQS, tabela no DynamoDB ou bucket S3?
Provavelmente, muitas.
Porém, o que torna estes serviços Serverless é que você não tem a menor ideia da capacidade necessária para executar esses serviços e, o melhor, não precisa se preocupar com isso.
Você tem mais o que fazer.
Por que adotar uma arquitetura Serverless?
A maior vantagem da arquitetura Serverless é a possibilidade de redução significativa do tempo necessário para operação da infraestrutura em nuvem, uma vez que a maioria das tarefas de administração são de responsabilidade da plataforma de nuvem utilizada.
Isso concede mais tempo para você e seu time trabalhar em atividades ligadas ao core business da organização. Em atividades que geram valor direto ao negócio.
Desvantagens no uso de Serverless
É impossível negar que a vantagem e as características ao utilizar Serverless são ótimas para qualquer time de tecnologia e empresa que saiba tirar proveito do seu uso, não é mesmo?
Porém, como nem tudo são flores, as desvantagens desse modelo também são relevantes e precisam ser consideradas antes da sua adoção.
A decisão de adotar Serverless te coloca em um típico cenário de trade-off (decisão que consiste na escolha de uma opção em detrimento de outra).
Listo abaixo algumas das principais desvantagens a serem avaliadas:
🔒 Vendor lock-in
O risco de enfrentar Lock-in (dependência do fornecedor) é alto ao quando se utiliza Serverless, pois é muito provável que os serviços que você esteja usando de uma plataforma de nuvem sejam implementados de maneira diferente por outra plataforma.
Essa diferença te coloca em um cenário complicado: caso opte por mudar de fornecedor, você provavelmente precisará alterar seu código, suas ferramentas de operação (CI/CD, monitoramento, etc.) e, em casos mais complexos, até mesmo a arquitetura da aplicação.
🧪 Testar e Debugar é mais difícil
Testar e “Debugar” uma aplicação Serverless não é uma tarefa fácil, pois a aplicação é dividida em funções menores que executam de maneira independente (com base nos eventos que as acionam) e geralmente os desenvolvedores não possuem visibilidade dos processos no backend.
⏳ Pode não ser a melhor opção para processos de longa duração
Por exemplo, o tempo limite de execução de uma função no AWS Lambda atualmente é de 15 minutos, o que pode ser útil para algumas cargas de trabalho cujo processamento é mais demorado, como análises de big data, transformações de dados em massa e processamento de eventos em lotes.
Porém, vale ressaltar que as plataformas Serverless cobram pelo tempo de execução do código e pelos recursos de hardware utilizados para execução do código.
No final, pode custar mais caro executar uma aplicação com processo de longa execução em um serviço Serverless do que em outros serviços.
BaaS vs FaaS - o que é?
Os serviços Serverless podem ser divididos em duas categorias:
1️⃣ Backend as a Service (BaaS)
É a categoria de serviços administrados pela plataforma de nuvem cujo objetivo é atender as nossas necessidades de “serviços acessórios”, na camada de dados (armazenamento e banco de dados) ou integração de aplicações (plataforma de mensagens, gerenciamento de usuários, etc.)
Nessa categoria, destacam-se serviços como:
AWS: S3, SQS, SNS, DynamoDB, EventBridge, Step Functions, API Gateway, etc.
Google Cloud: Cloud Storage, BigQuery, Firestore, Cloud Run, etc.
Microsoft Azure: Event Grid, Cosmos DB, Armazenamento de Blobs, etc.
2️⃣ Function as a Service (FaaS ou Função como Serviço)
Segundo a AWS, FaaS é a camada de computação de uma arquitetura Serverless.
Os serviços desta categoria permitem que você desenvolva uma função (menor objeto de uma aplicação), faça deploy facilmente e configure este software para ser acionado a partir de determinados eventos.
Em aplicações Serverless, o Lambda costuma ser utilizado para conectar serviços, transformar dados e implementar a lógica do negócio.
A responsabilidade de implantação, alocação e provisionamento de recursos, dimensionamento da infraestrutura, manutenção do sistema operacional e monitoramento de processos é delegada para a plataforma de nuvem.
Nesta categoria, os principais serviços são:
AWS: Lambda
Google Cloud: Cloud Functions
Microsoft Azure: Azure Functions
Quais Empresas Usam Serverless?
Não é difícil encontrar alguns casos de estudo que ajudam a entender de como outras empresas estão criando e executando aplicações com arquitetura Serverless.
No re:Invent 2022, a diretora de Engenharia da Trustpilot, Angela Timotfe, compartilhou como o time que ela lidera desenhou e implantou uma arquitetura orientada a eventos (Event-driven Architecture ou EDA) na AWS.
Veja no vídeo abaixo:
No re:Invent 2020, o Sheen Brisals, Gerente Sênior de Engenharia no grupo LEGO e AWS Serveless Hero, mostra como a LEGO.com reconstruiu um monólito em uma arquitetura orientada a eventos com Amazon EventBridge e Step Functions em seu núcleo:
Aqui no Brasil, um caso muito bacana para estudar é o da implementação do Pix no Itaú, apresentado no AWS Summit 2022.
O Itaú desenhou uma arquitetura orientada a eventos que combina serviços como AWS Fargate, AWS Lambda e Amazon Simple Notification Service (Amazon SNS) com serviços gerenciados como o Amazon Kinesis.
Conclusão
Serverless é uma tendência crescente no mundo de TI que permite que aplicações e serviços sejam executados sem que você precise gerenciar ou provisionar servidores, máquinas virtuais ou contêineres.
Isso traz vantagens como redução de custos, flexibilidade e escalabilidade, em contrapartida, há o custo de dependência (lock-in) de fornecedores, preocupações com segurança, dificuldades para realizar testes, etc.
Este artigo tem o objetivo de explicar de maneira descomplicada sobre esse modelo computacional e listar os principais motivos no qual Serverless tem se tornado cada vez mais popular para muitos times de tecnologia e empresas.
Agora eu quero saber mais sobre você.
Você já utiliza algum serviço Serverless na sua infraestrutura?
Já implantou alguma aplicação orientada a Eventos?
Qual é a sua plataforma de nuvem favorita para executar aplicações Serverless?
Deixe seu comentário no post compartilhando sua experiência com Serverless. 😉