DEV Community

Cover image for A verdade oculta por trás do Serverless
Giovana Armani
Giovana Armani

Posted on

A verdade oculta por trás do Serverless

Entenda de uma vez por todas o que realmente significa Serverless e porque isso fará toda a diferença no seu processo de desenvolvimento!


Primeiras definições

Antes de podermos falar do que é serverless, sabemos o que é um servidor?

Gosto de pensar servidores como aqueles computadores muito poderosos que parecem geladeiras (vai me dizer que não?). Existem vários tipos de servidores especializados em diferentes tarefas. Eles podem armazenar, processar, gerenciar e transferir dados e arquivos, executar programas, enviar emails, disponibilizar conteúdo na internet, entre muitas outras funções.

Servidor

Evolução histórica

Nos primórdios da computação, cada empresa dona de um software, precisava comprar e manter seu próprio servidor para rodar sua aplicação. Isso adicionava uma alta carga de trabalho porque era preciso cuidar dessas máquinas, da mesma forma que cuidamos de nossos computadores pessoais, mas em escala muito maior. Tarefas como gerenciamento do sistema operacional, atualizações de segurança, gerenciamento do sistema de arquivos, balanceamento de carga, monitoramento e registro em log eram todas tarefas que deviam ser feitas regularmente para essas máquinas gigantes e complexas.

Além disso, o uso desses servidores não era nada eficiente. Imagine que a venda do seu Zé tinha um servidor para processar compras na sua loja virtual. Em momentos de pico de pedidos como Natal ou Black Friday, era preciso o poder de processamento do servidor inteiro. Já no resto do ano, o tráfego era bem mais baixo e em grande parte do tempo, só precisava de uma parte dele.

Uso do servidor

Isso adicionava um custo e um trabalho desnecessário porque apesar do seu Zé estar usando somente metade da sua "geladeira", ainda é preciso fazer manutenção dela inteira.

Por sorte, os provedores de computação em nuvem vieram solucionar esse problema com Serverless (ou na tradução pro português que quase ninguém usa, computação sem servidores). Nesse modelo, a empresa de nuvem é a dona dos servidores e ela permite que outras empresas e desenvolvedores utilizem suas máquinas sob demanda através da internet.

Como funciona a computação serverless

Eis a mentira: por mais que o nome tente te convencer que é possível rodar software sem servidores, ainda não estamos tão avançados. Com serverless, os computadores-geladeira ainda existem, mas são completamente administrados e mantidos pela empresa provedora de nuvem. Isso permite que a gente foque em resolver problemas com código e a nuvem cuida do resto.

Você pode imaginar como um serviço de lavanderia. Ao invés de comprar uma máquina de lavar, você leva suas roupas até a lavanderia, usa a máquina do tamanho que precisar, espera a roupa bater e depois paga apenas por aquela lavagem.

Na computação serverless, os programas são acionados pelo que chamamos de eventos. Um evento é um acontecimento que diz ao programa que é hora de fazer alguma tarefa, como a chegada de uma mensagem ou uma interação do usuário com a tela. No nosso exemplo da lavanderia, poderíamos considerar como evento o ato de colocar as roupas na máquina e apertar o botão de iniciar. Quando o evento for recebido, é iniciado o processamento que gera um resultado como uma escrita em banco de dados, uma geração de arquivos, uma chamada para outro serviço, etc.

Analogia da máquina

Chamamos de funções serverless essas unidades de código que executam tarefas específicas acionadas pelos eventos.

Vantagens

Já deu pra entender que nesse modelo de computação, você não precisa administrar infraestrutura, mas vamos pensar quais são os verdadeiros benefícios disso.

1 Escalabilidade automática

Com o modelo serverless, não é mais necessário fazer vários cálculos de quanto recurso seu programa vai precisar para rodar. Em casos como o do seu Zé, em que o sistema sofre várias variações de volume de requisições, a nuvem vai detectar sua necessidade automaticamente e te oferecer uma parte maior ou menor, mais ou menos potente do servidor.

2 Redução de custo

Ao utilizar uma solução de computação serverless, você elimina o custo fixo de manter os servidores. Não é preciso pagar pelo espaço onde serão armazenados e nem a energia necessária para mantê-los rodando.

Além disso, com a escalabilidade automática, você paga exatamente pela parte do servidor utilizada pela sua aplicação. Acabou-se o tempo de pagar por um monte de máquinas sem trabalho!

3 Aumento de produtividade

Como a infraestrutura é inteiramente administrada pelo provedor de nuvem, nós devs não temos mais a responsabilidade de realizar tarefas de setup e manutenção como seleção do servidor, atualização de sistema operacional, estratégias de segurança, entre outros 🙌. Isso abre espaço pra se dedicar inteiramente no que fazemos de melhor: produzir código.

Computação serverless funciona para tudo?

Sim e não...

Sabemos que pra tudo se dá um jeitinho, principalmente se você for brasileiro. Na prática é possível adaptar a computação serverless para quase qualquer cenário, mas é importante reconhecermos que ela tem algumas limitações que pode fazer com que não atenda perfeitamente algumas situações.

1 Cold starts

Um dos principais desafios das funções serverless é o que chamamos de cold start (ou traduzido, "inicialização a frio"). Como nesse modelo os servidores são disponibilizados sob demanda para as aplicações, nas primeiras chamadas a uma função serverless após um período sem chamadas, a aplicação estará "fria".

No período de "aquecimento" da função, o provedor faz a preparação do ambiente para execução, inicializando o código. Isso impacta o que chamamos de latência da função, o período de demora desde a chamada até a resposta. As chamadas depois de um período inativo serão mais demoradas do que as demais, o que pode ser um problema em sistemas que precisam de respostas rápidas.

Se você quer saber mais sobre cold starts e como evitá-los pode conferir esse artigo (e me avise se gostaria de ver esse tipo de conteúdo em português 😉).

2 Limite de duração (Timeouts)

No geral, funções serverless não são projetadas para códigos que ficam rodando por muito tempo. É preciso definir o tempo de timeout dela, ou seja, o tempo máximo que poderá ser executada. Isso pode ser uma desvantagem em aplicações que exigem longa duração.

3 Custo em aplicações com cargas constantes e previsíveis

Custo é sempre uma preocupação quando construímos sistemas. Por oferecerem grande flexibilidade em tempo real, modelos de computação sem servidor costumam ter custos mais altos por transação quando comparado a transações em sistemas com servidor próprio. Contudo, o valor total acaba compensando quando avaliados em períodos maiores porque você só paga pelo que consome.

Cada sistema vai ter que ser analisado especificamente para decidir a melhor opção: servidor dedicado ou serverless, mas para sistemas com carga constante e previsível, é possível que um servidor dedicado apresente menor custo. Para ajudar nessa decisão, você pode usar o AWS Pricing Calculator para comparar os custos de diferentes abordagens.

Conclusão

Veja na tabela abaixo um compilado dos principais pontos de diferença que exploramos entre aplicações serverless e aquelas com servidor reservado.

Servidor próprio Serverless
Quem cuida do servidor Dono da aplicação Provedor de nuvem
Escalabilidade Para escalar, é preciso comprar mais servidores ou servidores mais potentes Escalabilidade automática administrada pela nuvem
Custo Valor fixo de manutenção do servidor independente do uso Pague somente pelo que a aplicação consumir
Tempo de resposta Aproximadamente o mesmo em todas as chamadas Primeiras chamadas após um período podem ter latência maior pelo cold start

A computação serverless revolucionou a forma que construímos sistemas. Ela nos empodera a construir sua aplicação de forma mais rápida e eficiente, sendo uma grande aliada na administração de infraestrutura de servidores.

E aí, você já conhecia computação serverless? Que tipo de aplicação você construiria dessa maneira?

Top comments (0)