Resenha de Artigo: “Serverless Computing”

Enviado por comppet em Ter, 18/06/2024 - 15:41

Resenha de Artigo: “Serverless Computing”, de autoria de Samuel Kounev, Nikolas Herbst, Cristina L. Abad, Alexandru Iosup, Ian Foster, Prashant Shenoy, Omer Rana, e Andrew A. Chien

por Davi Vilarinho, em 18 de junho de 2024

No cenário da infraestrutura de sistemas modernos um paradigma cresceu desde 2017: o serverless computing, e marcado pelo lançamento do AWS Lambda em 2014, embora este nome seja vago para o conceito que representa, confirmada na confusão do uso do termo em outros cenários e serviços oferecidos sob a mesma alcunha. Esse caráter dúbio do termo advém da individualidade de como cada sistema requisita a solução, ou seja, o que cada cliente espera que seja realizado, se é apenas uma elasticidade esperada ou se deve existir um protocolo para controlá-lo. Dessa forma, o artigo aborda características e definições para esclarecer o paradigma.

Primeiro, o artigo apresenta uma analogia à mudança de casa: mudar sozinho (self-hosting), com máxima flexibilidade e customização, mas com custo máximo por trabalhador (o contratante apenas); contratar uma empresa tradicional (soluções cloud clássicas) com eficiência, mas com a rigidez de escolhas e custo alto; ou optar por soluções modernas que permitem maior flexibilidade, com pequenos times e transparência nas escolhas, que simboliza serverless computing.

Serverless computing não é sobre aplicações sem servidor, mas sim soluções onde desenvolvedores não precisam administrar nem provisionar servidores, conhecida característica NoOps (ou ZeroOps). O que não está claro ainda é como isso difere da solução de nuvem clássica, porque um servidor virtual tradicional também remove a tarefa de prover e manter servidores físicos. Por isso, esta característica deve abranger abstrações do sistema onde a aplicação é executada, tarefas como a escalabilidade, segurança, monitoramento, auditoria e tolerância à falhas.

Tradicionalmente, uma segunda característica importante é o pay-as-you-go. Soluções serverless não necessariamente reservam um servidor nem infraestrutura para o cliente, o que dificulta a cobrança tradicional do total alocado e dos esforços de mantê-la, já que não é exclusivo. Ainda assim, este traço não esclarece se a cobrança deve ser apenas o tempo em uso, nem se deve considerar o tempo (inútil) que uma função toma até inicializar, ou do grau de uso de recursos usados, como rede, memória ou dados armazenados.

Elasticidade também é comumente associada. Dessa forma, uma aplicação serverless deve ter a capacidade de provisionar e desprovisionar recursos para atender a demanda. Embora os serviços permitam ao desenvolvedor delinear como este passo é realizado, é redundante definir o paradigma com este traço na medida em que uma verdadeira solução NoOps abstrai o atendimento à demanda de uso sem manutenção nem intervenção do time.

As definições comuns falham em caracterizar serverless computing e é necessário capturar a essência do paradigma. Então o artigo define: “um paradigma de computação na nuvem onde desenvolve, implanta e roda aplicações ou partes sem alocar servidores virtuais ou recursos necessários para tal, nem se preocupar com os detalhes operacionais, os quais devem ser responsabilidade do provedor, que por sua vez taxa na medida que recursos que as aplicações consomem da infraestrutura como tempo de CPU, memória e espaço em disco”.

Vários são os serviços que se aproximam da definição. Functions as a Service (FaaS) são o primeiro exemplo porque a unidade “função” é um trecho de código pequeno, sem estado e disparado por um evento, é o nível mais granular possível. Por outro lado, Backend as a Service (BaaS) abstrai severos componentes como banco de dados, armazenamento de blobs ou mensagens que não conflitam com a definição enunciada na medida em que são serviços acoplados e módulos à parte da aplicação principal. Já para Container as a Service (CaaS) o grau de automação oferecido é determinante, porque podem deixar sob responsabilidade do desenvolvedor mantê-los, contrário ao esperado, assim como em Platform as a Service (PaaS), que inclusive foram os primórdios do paradigma e estão presentes na Azure, por exemplo.

Por outro lado, Software as a Service (SaaS) sequer representam a ideia geral porque são soluções completas, e menos ainda Infrastructure as a Service (IaaS) que tipicamente dão manejo direto de infraestrutura virtualizada ou remota, o que dista da definição proposta de não-intervenção.

O limite do paradigma está no cliente ser preso às soluções do provedor, já que este fornece conexões com outros serviços serverless. No entanto, as configurações tornaram-se transparentes e declarativas a ponto de que detalhes técnicos não impeçam outro provedor de fornecer o mesmo serviço.

Em seguida, o artigo descreve como serverless se insere em uma linha de avanços computacionais. Iniciado com a proposta de interconexão de computadores, progrediu com a criação de mainframes centralizados com poder computacional suficiente para realizar tarefas dos periféricos, acelerou com a dispersão de microcomputadores e emergência do TCP/IP e formou a base da internet moderna. O surgimento da computação na nuvem, portanto, foi uma evolução natural e abstrai o conceito da interconexão de sistemas e aplicações, e fornece diminuição da complexidade no deploy de aplicações e custo incremental.

Os desafios atualmente são a decisão de aceitar os custos do sistema em espera ou desativá-lo e correr risco de reinicializar, chamado Cold-start, custoso. Outro problema é a segurança, uma vez que aplicações serverless executam juntamente com a de outros clientes, então é fundamental garantir o isolamento e a privacidade dos dados trafegados. É necessário adaptar linguagens e ferramentas, observado com a emergência de tecnologias como Terraform e AWS CloudFormation. Em nível de hardware, a evolução de memória e sua hierarquia para acelerar cold-starts, bem como paralelismo para adequar às aplicações que compartilham a mesma infraestrutura.

O artigo aponta o quanto este modelo se tornou uma base de sustentação em uma série de aplicações modernas e permite parcial ou integralmente evitar caras soluções clássicas, bem como vai além do FaaS e é aplicada para que outras soluções como bancos de dados, relatórios, consultas e arquiteturas IoT sejam serverless.

Portanto, é possível observar que serverless computing não limita os provedores com requisitos, mas é a direção natural que as demandas de usuários de cloud forçam as plataformas a tomarem. Não existe uma resposta clara do que é serverless, mas é possível identificar graus de características do paradigma em soluções dos provedores. Para o futuro, é possível esperar a abstração e menor controle do ambiente de execução na nuvem, automação da alocação de recursos na nuvem, terceirização da escalabilidade, mais multiplexação de infraestrutura e cobrança mais alinhadas ao uso de recursos.