O que é Serverless?
Serverless, como o nome sugere, refere-se à computação sem servidor. Você pode se perguntar: como é possível realizar computação sem servidores? Na realidade, serverless não significa que não existam servidores literalmente. Em vez disso, utiliza tecnologia para abstrair o conceito de servidores da lógica de negócios, permitindo que os desenvolvedores se concentrem exclusivamente em suas aplicações sem se preocupar com a infraestrutura subjacente.
Como o Serverless Funciona?
Desde o advento do Serverless, muitos desenvolvedores o perceberam como uma tecnologia nova, o que de fato é, dada a sua conveniência. No entanto, não há necessidade de complicar ou se intimidar com isso. A lógica subjacente de executar aplicações permanece inalterada. O Serverless utiliza meios técnicos para nos proteger das complexidades envolvidas, como qualquer outra tecnologia em nuvem.
Antes do Serverless, implantar uma aplicação web era um processo complicado. Para executar nossa aplicação, precisávamos primeiro construir um ambiente de execução no lado do servidor. Isso envolvia comprar máquinas virtuais, inicializar seus ambientes, instalar dependências necessárias — garantindo consistência com nosso ambiente de desenvolvimento local o máximo possível. Em seguida, para tornar nossa aplicação acessível aos usuários, precisávamos comprar um nome de domínio, registrá-lo usando o endereço IP da máquina virtual, configurar e iniciar o Nginx e, finalmente, carregar e iniciar o código da aplicação.
Em forte contraste com o fluxo de trabalho tradicional, a implantação Serverless requer apenas três etapas simples, sendo uma abstração extrema das operações do lado do servidor. Essencialmente, toda a cadeia de requisições de dados HTTP do usuário permanece qualitativamente inalterada; o Serverless apenas simplifica o modelo geral.
Para detalhar, antes precisávamos construir um ambiente de execução no lado do servidor, enquanto as aplicações FaaS abstraem essa etapa em serviços de função. Precisávamos de balanceamento de carga e proxies reversos, mas as aplicações FaaS abstraem isso em gatilhos de função HTTP. Fazer upload de código e iniciar a aplicação costumava ser necessário, mas as aplicações FaaS abstraem isso em código de função.
Quando um usuário acessa um gatilho de função HTTP pela primeira vez, o gatilho mantém a requisição HTTP do usuário e gera uma notificação de evento HTTP Request para o serviço de função.
O serviço de função então verifica se há instâncias de função ociosas. Se não houver, ele busca seu código no repositório de código de função, inicializa e inicia uma instância de função, executa a função, passa o objeto HTTP Request como parâmetro e roda a função.
Além disso, o HTTP Response da execução da função é retornado ao gatilho de função, que então encaminha o resultado de volta ao cliente usuário que aguarda.
A diferença mais significativa entre Serverless e plataformas PaaS de hospedagem de aplicações está na utilização de recursos, que é a inovação mais notável do Serverless. As instâncias de aplicações Serverless podem ser reduzidas a zero, enquanto as plataformas PaaS exigem que pelo menos um servidor ou contêiner esteja sempre em execução.
Antes da primeira invocação, a ocupação real do servidor de uma função é zero. Somente quando um usuário faz uma requisição de dados HTTP é que o serviço de função é acionado pelo evento HTTP, iniciando uma instância de função. Isso significa que, sem requisições de usuários, o serviço de função não tem instâncias em execução e não consome recursos de servidor. Por outro lado, criar uma instância de aplicação em uma plataforma PaaS geralmente leva dezenas de segundos e, para garantir a disponibilidade do serviço, pelo menos um servidor deve executar continuamente sua instância de aplicação.
Para fazer uma analogia, Serverless é como uma lâmpada ativada por voz que acende rapidamente quando alguém está presente e apaga quando não há ninguém. Em comparação com lâmpadas operadas manualmente tradicionais, as lâmpadas ativadas por voz são excelentes em eficiência energética. No entanto, essa capacidade de economia de energia depende da capacidade da lâmpada ativada por voz de acender rapidamente quando necessário.
Da mesma forma, a chave para as vantagens do Serverless está no seu tempo de inicialização rápido. Como ele consegue isso?
Por que o Serverless Consegue Iniciar Tão Rapidamente?
Cold start é originalmente um conceito de PC, referindo-se ao processo de recarregar a tabela BIOS — essencialmente inicializando a partir dos drivers de hardware — após um ciclo de energia, resultando em tempos de inicialização lentos.
Nos ambientes de nuvem atuais, ciclos de energia em servidores físicos são quase inéditos. No contexto do Serverless, cold start refere-se a todo o processo desde a invocação da função até a prontidão da instância da função. Nosso foco aqui é minimizar o tempo de inicialização, pois tempos de inicialização mais curtos se traduzem diretamente em maior utilização de recursos. Os provedores de nuvem atuais, aproveitando otimizações específicas de linguagem, alcançaram tempos médios de cold start entre 100 e 700 milissegundos. Graças à compilação Just-In-Time do motor JavaScript do Google, o Node.js possui os cold starts mais rápidos.
Vale notar que um serviço Serverless pode iniciar do zero, executar uma função e completar o processo em 100 milissegundos — uma razão chave pela qual o Serverless pode reduzir com confiança para zero. Ao abrir uma página da web, um tempo de resposta abaixo de um segundo é geralmente considerado excelente. Nesse contexto, um tempo de inicialização de 100 milissegundos tem um impacto negligenciável nos tempos de carregamento da página.
Além disso, é seguro assumir que os provedores de nuvem continuarão otimizando sua infraestrutura para tempos de inicialização ainda mais rápidos, resultando, em última análise, em maior utilização de recursos. Por exemplo, baixar o código da função é uma etapa demorada durante cold starts. Portanto, após atualizações de código, os provedores de nuvem frequentemente iniciam proativamente o escalonamento de recursos para baixar e construir imagens de contêiner para suas instâncias de função. Quando a primeira requisição chega, eles podem aproveitar essas imagens em cache, ignorando a etapa de download de código de um cold start e iniciando o contêiner diretamente a partir da imagem. Essa técnica é conhecida como warm start. Consequentemente, para aplicações sensíveis à latência, podemos usar warm starts ou estratégias de pré-aquecimento de instâncias para acelerar ou contornar completamente os tempos de cold start.
Como o Serverless é Estruturado em Camadas?
Quando sua instância Serverless é executada, ela compreende pelo menos três camadas: contêiner, runtime e código de função.
Pense no contêiner como o sistema operacional (SO). A execução de código requer interação com o hardware, e o contêiner simula o kernel e as informações de hardware, permitindo que seu código e runtime funcionem dentro dele. As informações do contêiner incluem tamanho da memória, versão do SO, detalhes da CPU, variáveis de ambiente e muito mais. Atualmente, as implementações de FaaS podem usar contêineres Docker, máquinas virtuais (VMs) ou até mesmo ambientes de sandbox.
O runtime representa o contexto no qual sua função é executada. As informações do runtime incluem a linguagem de programação e a versão usada, como Node.js v10 ou Python 3.6; objetos chamáveis, como o SDK do aliyun; e informações do sistema, como variáveis de ambiente.
Quais são os benefícios dessa abordagem em camadas? A camada de contêiner oferece maior aplicabilidade, permitindo que os provedores de nuvem pré-aqueçam inúmeras instâncias de contêiner, fragmentando efetivamente os recursos do servidor físico. As instâncias de runtime, com sua menor aplicabilidade, podem ser pré-aquecidas em números menores. Uma vez que o contêiner e o runtime são fixados, baixar e executar o código se torna direto. Essa arquitetura em camadas permite uma otimização eficiente de recursos, permitindo a execução rápida e econômica do seu código.
Resumo
- A cadeia de invocação de uma aplicação Serverless pura consiste em três componentes principais: gatilhos de função, serviços de função e código de função. Eles substituem, respectivamente, as operações tradicionais do lado do servidor de balanceamento de carga e proxies reversos, servidores e ambientes de execução de aplicação, e implantação de código de aplicação.
- A diferença mais significativa entre Serverless e plataformas PaaS tradicionais de hospedagem de aplicações reside na capacidade das aplicações Serverless de reduzir a zero e iniciar rapidamente mediante acionamento por eventos. Funções Node.js, por exemplo, podem atingir inicialização e execução em 100 milissegundos.
- O Serverless, por design, sacrifica o controle do usuário e o escopo da aplicação para simplificar o modelo de código. Sua estrutura em camadas aumenta ainda mais a utilização de recursos, o que é um dos principais contribuintes para seus tempos de cold start notavelmente curtos.
A Novita AI lançará o serviço Serverless para nossos usuários. Junte-se à lista de espera agora e comece seu negócio com computação serverless.
Novita AI é a plataforma de nuvem completa que impulsiona suas ambições de IA. APIs integradas, serverless, GPU Instance — as ferramentas custo-efetivas que você precisa. Elimine a infraestrutura, comece gratuitamente e torne sua visão de IA realidade.
Leitura Recomendada
