Sem dúvida a quantidade de diferentes soluções e arquiteturas que você pode adotar em um ambiente de computação em nuvem parece ser infinita, chegando ao ponto que no meu último artigo, discutimos como lidar com a complexidade em um ambiente na cloud e evitar que isso ocasionasse um impacto negativo para a empresa.
Mas na verdade nem tudo é complexidade: E se você pudesse aproveitar as tecnologias de computação em nuvem sem sequer se preocupar com servidores? Sem a necessidade de controlar recursos como espaço em disco, memória e processamento? Melhor ainda, ser cobrado exclusivamente por aquilo que consumiu, efetivamente se livrando de gastos com recursos improdutivos? Bem, esse é o modelo Serverless, mais uma opção da cloud computing para tornar seu negocio mais ágil, simples e economicamente viável.
O que é o Serverless?
Bem, vamos tirar mais um mito de circulação: É óbvio que ainda existem servidores e recursos computacionais envolvidos em uma infraestrutura baseada em Serverless, só que eles não importam. Isso é, não importam para você, que é o cliente do provedor de computação em nuvem, mas fique tranquilo: com toda certeza existe toda uma equipe cuidando para garantir os níveis de disponibilidade e resiliência com os quais nos acostumamos na troposfera digital.
Colocando de uma forma bem simples, o Serverless Computing é um modelo de execução onde o provedor de computação em nuvem funciona como o próprio servidor, dinamicamente gerenciando e alocando recursos computacionais. Nessa abordagem, os custos não são baseados em unidades previamente adquiridas, e sim nos recursos consumidos dinamicamente pela sua aplicação.
Desde 2006 já existiam provedores de nuvem que tentavam seguir o modelo FaaS (função como serviço), inclusive a própria Google, através do Google App Engine, permitia um modelo onde a cobrança era medindo o uso da aplicação, mas essa solução era limitada por um framwork Python customizado, o que não permitia a execução de código arbitrário.
O primeiro grande provedor de computação em nuvem publica a fornecer uma abordagem realmente Serverless, foi a Amazon, que em 2014 introduziu o AWS Lambda, onde ao invés de carregar a aplicação em um container ou máquina virtual, clientes simplesmente subiam o código para o Lambda que cuidava de todo o resto. O modelo é bem simples: aplicação ficava adormecida, até ser acionada pelo gatilho apropriado, fazendo com que o Lambda iniciasse sua execução. Uma vez que a aplicação concluísse sua atividade, essa era removida do serviço Lambda. Simples assim.
Voltando ao fato obvio de que a abordagem Serverless ainda usa servidores, logo foi revelado – para a surpresa de ninguém – que a força motora por traz do AWS Lambda eram os containers. O que acontece é que nesse modelo a própria AWS se encarrega de carregar o código no container e executar. Como esperado, com o sucesso dessa abordagem, outros grandes players do mundo cloud seguiram a tendência, assim tanto Google, Microsoft, IBM e Oracle também criaram suas ofertas Serverless.
Vantagens e desvantagens do Serverless
É claro que o modelo Serverless despertou muito interesse logo que foi lançado: nada melhor do que viver em um mundo pós-containers, onde meu único trabalho é enviar minha aplicação para um provedor de nuvem, deixá-lo garantir que tudo é criteriosamente executado e ser cobrado apenas pelo que foi consumido.
Sim, a computação Serverless traz muitos benefícios, mas assim como qualquer outra tecnologia, precisamos de um olhar crítico, entender bem suas vantagens e desvantagens antes de abraçar esse modelo de forma incorrera. Vamos entender melhor:
Vantagens do Serverless
Pague apenas o que usar: Nesse ponto não há dúvida, o modelo Serverless pode ser bem mais econômico. Pagar apenas pelo que sua aplicação consome é muito mais eficiente do que ter custos baseados na alocação que muitas vezes incluem recursos que sequer estão sendo utilizados.
No mundo Serverless, quando sua aplicação precisar executar uma atividade, o servidor entra em execução (e você será cobrado de acordo), quando a aplicação conclui suas atividades, o servidor para (e você para de ser cobrado). É difícil ficar mais eficiente do que isso em termos de custo.
Menos preocupações com o gerenciamento de servidores: É bem simples, em uma abordagem Serverless, seu time de TI não vai se preocupar em gerenciar os servidores na computação em nuvem, tudo é feto pelo provedor. Dessa forma, além da otimização direta dos custos relativos ao consumo de recursos, também é possível ter uma economia indireta, garantindo que seu time de TI possa ser alocado em outras atividades.
Elasticidade: O modelo Serverless é uma das melhores opções nesse sentido. Recursos podem ser alocados dinamicamente, garantindo que não ocorrerão problemas quando, por exemplo, sua aplicação tiver um pico de trafego.
Imagine que você construiu uma aplicação para acompanhar um grande evento, como a contagem de votos ao vivo das eleições. Bem, é obvio que você espera um número muito maior de visitantes no dia das eleições. Dessa forma, conforme o numero de pessoas acessando a sua aplicação aumenta, mais recursos são alocados, porém assim que a quantidade de usuários diminui, esses recursos são removidos, tudo isso é feito dinamicamente e, como esperado, você é cobrado conforme os recursos consumidos.
Desvantagens do Serverless
Desempenho: Para aplicações que são usadas com menos frequência, o modelo Serverless pode ter um pouco mais de latência do que executar o código em um ambiente dedicado. Isso acontece por que uma aplicação que não está em uso pode ser completamente desativada e, quando é novamente necessária, é natural que leve um pouco mais de tempo para iniciar.
Ineficiência em tarefas de maior duração: No caso de aplicações que executam tarefas com maior duração, o modelo Serverless pode ter algumas limitações. Por exemplo, o próprio AWS Lambda impõe uma duração máxima da execução por solicitação de 300 segundos (5 minutos), após esse prazo a tarefa é encerrada.
Caso sua aplicação execute tarefas que durem mais do que os limites dos provedores de computação em nuvem, ainda existem opções como, por exemplo, criar múltiplas funções coordenadas ou mesmo usar um servidor virtual para tarefas de longa duração. Entretanto isso pode ser ineficiente e acabar custando mais do que usar um ambiente dedicado.
Se tornar amarrado ao provedor: Um ponto que preocupa muita gente durante a migração para um provedor de computação em nuvem é ficar amarrado ao provedor. No mundo Serverless isso não é diferente, afinal é o provedor que realiza todo o gerenciamento dos recursos computacionais.
Por exemplo: imagine que você colocou sua aplicação no AWS Lambda e por algum motivo quer migrar para o Google. Bem, além de ter que fazer ajustes no código da sua aplicação, também pode ser necessário modificar outros itens como, por exemplo, controle de acesso, banco de dados, o modelo de armazenamento.
Segurança da Informação e privacidade: Normalmente pensamos que a abordagem Serverless é mais segura. Até certo ponto isso é verdade, afinal o provedor de nuvem já cuida de aspectos como, por exemplo, vulnerabilidades no sistema operacional.
Entretanto, como existem muito mais componentes envolvidos do que em uma arquitetura tradicional, a superfície de ataque é maior. Além disso, é importante lembrar que não é possível instalar nenhuma solução de segurança no servidor ou mesmo na rede. Nesse caso é necessário confiar que o seu provedor de computação em nuvem implementa adequadamente os controles de segurança.
Outro aspecto importante são considerações relativas a privacidade, visto que a maioria dos ambientes Serverless fazem uso de nuvem publica, que naturalmente compartilha recursos e também acaba sendo acessível pelos colaboradores do provedor de computação em nuvem.
É importante entender que ter preocupações com segurança e privacidade é bem diferente de dizer que o modelo Serverless executado em uma nuvem pública não é seguro. Ele é! Apenas entenda que para casos onde existam requisitos mais elevados de segurança e privacidade, e que você quer garantir talvez seja melhor você considerar o uso do Serverless em uma nuvem privada ou mesmo on premises (o Kubernetes te permite isso!).
Conclusões
De uma forma geral, o modelo Serverless traz grandes benefícios e pode ser facilmente adotado, é tudo uma questão de entender quais são as aplicações que mais se beneficiam e ter um provedor confiável.
Não há duvida que em um futuro bem próximo, esse modelo seja cada vez mais utilizado, visto que com o amadurecimento, entrada de mais linguagens de programação e a criação de padrões, a computação Serverless será uma das melhores formas de ganhar agilidade no desenvolvimento e ao mesmo tempo ter uma enorme economia.
Esse é o poder das tecnologias na computação em nuvem.