Quando pensamos em serverless computing podemos pensar na ausência de servers ou virtual servers, mas isso não é inteiramente verdade.
Serverless computing não é um termo novo, já existe há algum tempo. A primeira vez que surgiu foi com o lançamento do AWS Lambda em 2014 pela Amazon, e desde então Google Cloud Functions, Azure Functions e IBM Cloud Functions foram para os serviços da família cloud computing nos seus respetivos public cloud infrastructure vendor como Plataformas de Function as a Service (FaaS).
O que é realmente Serverless Computing?
Serverless é uma abordagem que permite construir e executar aplicações e serviços sem a necessidade de gestão de infraestruturas. Neste caso, o cloud service provider gere totalmente a execução do código. Assim, os developers não precisam de fornecer ou manter o sistema e a infraestrutura da aplicação quando implementam o código. Num cenário mais clássico, um developer teria de definir componentes como capacidade de armazenamento ou computação antes dos desenvolvimentos, o que leva a um maior tempo de aprovisionamento e a uma maior sobrecarga operacional.
Neste cenário, a infraestrutura é automatizada e elástica, o que pode ser muito apelativo em cargas de trabalho imprevisíveis e também mais rentável. Isto é particularmente importante na medida em que permite aos developers concentrarem-se na escrita e na optimização do código, conduzindo a uma experimentação comercial mais ágil.
Em vez de virtualizar o hardware através de máquinas virtuais ou virtualizando sistemas operativos, Serverless FaaS virtualiza o tempo de execução e escala através de funções, tornando esta abordagem adequada para soluções que:
- Operam de forma infrequente
- Estão associadas a eventos externos
- Têm requisitos de escalonamento desconhecidos
- Operaram de forma stateless entre invocações
- Conectam diferentes serviços
Cost Efficiency
Antes de podermos falar de eficiência de custos, vamos ver como o modelo de preços da Function as a Service (FaaS) difere da Infrastructure as a Service (IaaS). Num modelo de negócio típico de cloud, o cliente paga pelo tempo de funcionamento dos servidores, juntamente com os recursos que estes consomem.
Num modelo sem servidor, o cliente “aluga” a função, não o servidor. Aqui o cloud service provider cobra pelo tempo de funcionamento da função (desde a sua invocação até ao momento em que termina, independentemente do resultado), e esta cobrança ocorre com base no tamanho do espaço de memória reservado e na quantidade de tempo que esse espaço está ativo.
Isto não significa que todas as abordagens serverless serão mais baratas do que uma abordagem mais tradicional de IaaS em termos de faturação por parte do cloud service provider. Podemos pensar que apenas pagar pelo tempo de execução das funções em vez de pagar pela infraestrutura durante todo um período de tempo é mais barato, mas o código deve ser optimizado e livre de bugs. Se pensarmos que o developer tem mais tempo para se concentrar no que importa, a codificação, isto irá alterar significativamente o processo de implementação, uma vez que não há necessidade de fornecer infra-estrutura e também, se necessário, a capacidade no local onde a função opera pode escalar automaticamente com base nas suas necessidades.
Pros e Cons
A computação sem servidor tem muitos benefícios quando comparada com a abordagem tradicional da cloud:
- Melhor utilização – Os clientes pagam pelo tempo que uma função está “viva” em vez de pagarem pelo tempo que um servidor existe e pelos recursos que são consumidos por ele, portanto, se nenhuma função estiver a funcionar, não há custos associados;
- Segurança – Os developers tenderão a escrever código alinhado com as melhores práticas, políticas de segurança e governança, para escrever código que funcione dentro do contexto sem servidor;
- Tempo para a produção – Elimina a necessidade de pensar numa arquitectura de infra-estrutura óptima e reduz o tempo para desenvolver, testar e implementar o código. O principal objectivo é passar de uma ideia conceptual para uma solução de produção em menos tempo, quando comparado com uma abordagem tradicional;
Por outro lado, há algumas considerações que precisam de estar presentes nas nossas mentes quando escolhemos uma abordagem sem servidor:
- SLAs incertos – Para os fornecedores da Coud é difícil assegurar o que é aceitável prometer, uma vez que os padrões de desempenho das funções são muito indeterminados.
- O custo de código não testado/não optimizado – Uma vez que o cliente paga por invocação de função, pode ser muito ineficiente em termos de custos executar funções que não produzem o resultado desejado devido à falta de optimização ou à presença de erros não detectados
- Monolith Tendency – Os developers podem ter a tendência de colocar todo o código na mesma função, a fim de garantir que o mesmo funcione totalmente optimizado.
Resumindo, apesar das limitações de segurança e SLAs, a Serverless Computing pode ser barata uma vez que um cliente só paga pelo que usa. Não há qualquer custo se nenhuma tarefa for executada. Os clientes também beneficiam do facto de que sem a infraestrutura para gerir, os custos operacionais diminuem e a eficiência dos trabalhadores aumenta.