Blog

Obtenha mais capacidade com a Serverless

Obtenha mais capacidade com a Serverless

De diversas formas, o modelo serverless pode ser considerado como uma ferramenta desenvolvida para não apenas abstrair a complexidade de gerenciamento do servidor, mas também para otimizar o uso do servidor de uma empresa o máximo possível. O termo “serverless” ficou especialmente conhecido no artigo de Ken Fromm, de 2012, “The Future of Computing is Serverless”. Em seu texto, ele apresenta a ideia como uma consequência natural da tendência para compra de capacidade de processamento em estruturas cada vez mais refinadas: de servidores de propriedade da empresa, que só seriam substituídos após anos de uso, para a locação de servidores com planos de pagamento mensal, por hora e por segundo. Em última análise, Fromm observou que os recursos de computação seriam totalmente gerenciados e pagos com base em tarefas – e é isso que temos hoje com a computação serverless.

Por proporcionar recursos gerenciados e cobrar apenas pelo que é usado, a computação serverless oferece às empresas a vantagem de obter mais recursos de servidor comparado ao investimento. Em vista disso, este post faz uma abordagem sob a perspectiva de novatos em computação serverless: desde a sua evolução, benefícios e implicações para as empresas, até passar pelo Edge Functions da Azion, uma solução FaaS que leva a computação serverless para o Edge.

Evolução da Gestão de Infraestrutura

A evolução do gerenciamento de infraestrutura é uma história que se desdobrou em duas partes. Nas últimas décadas, ocorreram mudanças não apenas na gestão de recursos, que tem sido constantemente terceirizada, mas também nos próprios recursos, que têm sido atomizados em unidades cada vez menores.

De Data Centers próprios para PaaS

Com o surgimento da internet, nasceram os negócios digitais. Inicialmente, o conteúdo era oferecido a partir de computadores pessoais. Contudo, criar mais conteúdo e atender a mais requisições exigia mais espaço de armazenamento e capacidade de processamento - em outras palavras, mais servidores. Como resultado, as empresas fizeram a transição para hospedar a infraestrutura em data centers privados, instalações de colocação e cloud.

Data Centers

O fato de ter uma infraestrutura em data centers privados proporciona às empresas controle total sobre seus servidores. No entanto, a instalação, operação e manutenção desses servidores exige uma enorme quantidade de tempo e habilidade técnica. Além disso, a fim de implementar uma aplicação em servidores bare-metal, as empresas precisam comprar e fazer racks de hardware, instalar e configurar tanto o sistema operacional como o software, necessários para atender às aplicações, e instalar o código das aplicações. Adicionalmente, as empresas também são responsáveis por tarefas operacionais, como consertos ou substituições de hardware antigo, assim como atualizações de software.

Somado a tudo isso, as empresas precisam de espaço físico para seus equipamentos. No caso de empresas menores, talvez isso signifique apenas um local com alguns servidores. Mas quando se trata de empresas maiores, pode ser necessária uma sala ou prédio separados para hospedar os racks de servidores, cabeamento para a conexão de equipamentos, e instalação de rede, energia e subsistemas de resfriamento, bem como sistemas de backup para evitar interrupções de serviço – sendo que todos esses recursos precisam ser mantidos e operados pela empresa.

O gerenciamento de data centers próprios envolve:

  • aquisição e instalação de hardware;
  • licenciamento, instalação, configuração e atualização de software;
  • conserto e substituição de hardware antigo;
  • instalação e gerenciamento de rede, energia e subsistemas de resfriamento.

Centros de Colocação

Através dos centros de colocação, as empresas podem pagar para armazenar servidores e equipamentos de rede fora de suas instalações, em data centers pertencentes e operados por terceiros. Dessa forma, as empresas não precisam manter suas próprias instalações, gerenciar energia e subsistemas de resfriamento, nem instalar cabos para conectar os equipamentos. Ao contrário, ao optarem por instalações de colocação, as empresas são responsáveis apenas pela operação e manutenção do equipamento que usam.

O gerenciamento de equipamentos em colocação envolve:

  • aquisição e instalação de servidores;
  • manutenção e substituição de equipamentos antigos;
  • implementação e atualização de software;
  • gerenciamento de equipamentos de rede.

Cloud Computing

Com o surgimento de cloud computing, as empresas não precisam mais comprar ou operar servidores. Diferentemente, os recursos virtualizados on-demand poderiam ser locados pela internet. Cloud computing tradicional pode ser dividida em dois tipos de serviços: Infrastructure-as-a-Service, ou IaaS, e Platform-as-a-Service, ou PaaS. Com o modelo IaaS, o armazenamento, a rede, os servidores e a virtualização são fornecidos pelo vendor como um serviço. O PaaS abstrai ainda mais as complexidades de gerenciamento, proporcionando não apenas recursos on-demand, mas um ambiente totalmente gerenciado, incluindo runtime, sistema operacional e middleware para o desenvolvimento de aplicações.

O gerenciamento de recursos de cloud envolve:

  • configurar o runtime das aplicações, sistema operacional e middleware (com IaaS);
  • gerenciamento de licenças de software;
  • configurar e gerenciar VMs ou contêineres;
  • configurar e gerenciar ferramentas de orquestração de contêineres.

De Servidores Bare-metal a Contêineres

Em relação à gestão da infraestrutura, a fim de possibilitar a transição de um modelo de trabalho que necessitava de equipes técnicas no local para um que pudesse ser executado remotamente por times de operações, os recursos computacionais precisavam ser virtualizados. Com o surgimento de VMs, as empresas não precisariam mais enviar e instalar manualmente o hardware. Ao contrário, poderiam implementar remotamente novas instâncias de processamento em minutos, apenas instalando e configurando um novo sistema operacional e o software para atender à aplicação.

Os contêineres, como VMs, são recursos de processamento virtualizados, mas com propriedades de isolamento mais flexíveis que lhes permitem compartilhar o mesmo sistema operacional. Dessa maneira, possibilita tanto um uso mais eficiente dos recursos quanto maior facilidade na implementação, pois os desenvolvedores não precisam instalar nem configurar um novo sistema operacional para cada novo contêiner. Em vez disso, cada contêiner encapsula sua própria parte do kernel do sistema operacional, além do código da aplicação, suas dependências, CPU, memória, e I/O do disco, necessários para executá-lo. Como consequência, a configuração desses recursos complica um pouco o gerenciamento de contêineres.

No entanto, muitas tarefas de gerenciamento podem ser automatizadas com ferramentas de orquestração como o Kubernetes.

  • os servidores bare-metal devem ser instalados e gerenciados manualmente;
  • VMs podem ser implementadas e gerenciadas remotamente;
  • os contêineres podem ser implementados remotamente, com ferramentas de orquestração para automatizar algumas tarefas de gerenciamento.

Cada etapa da progressão de servidores bare-metal para contêineres abstrai parte da configuração e do gerenciamento da infraestrutura. Além disso, cada nova etapa permite que as empresas façam um uso cada vez mais eficiente do espaço dos servidores. No entanto, ao fazerem isso, as empresas acabaram acumulando muito mais recursos virtuais para gerenciar. Uma tendência que só se acelerou com o surgimento da globalização e dos negócios digitais em hiperescala, os quais exigem que vários servidores estejam geograficamente dispersos pelo mundo.

Em uma economia cada vez mais global e digital, a gestão de uma grande empresa pode significar gerenciar milhares ou até milhões de contêineres - uma tarefa desafiadora, mesmo para empresas que possuam serviços de cloud gerenciados e ferramentas de orquestração. Felizmente, um novo paradigma surgiu, combinando o uso de recursos extremamente eficientes com serviços altamente gerenciados: a computação serverless.

O que significa Serverless?

Serverless, FaaS, e BaaS

O Whitepaper Serverless da Cloud Native Computing Foundation define a computação serverless como “o conceito de construção e execução de aplicações que não requerem gerenciamento de servidor. O artigo descreve um modelo de implementação mais refinado em que as aplicações, agrupadas como uma ou mais funções, são carregadas em uma plataforma e, em seguida, executadas, escaladas e cobradas de acordo com a demanda exata necessária naquele momento.” Dessa forma, a computação serverless elimina tanto as despesas por recursos desperdiçados quanto a necessidade de as empresas gerenciarem a própria infraestrutura.

Para delinear ainda mais o conceito de serverless, a Cloud Native Computing Foundation segmenta as ofertas de serverless em dois serviços distintos:

  • Functions-as-a-Service (FaaS), que permite a computação orientada a eventos;
  • Backend-as-a-Service (BaaS), que fornece serviços baseados em APIs, os quais substituem subconjuntos essenciais da funcionalidade de uma aplicação.

Em outras palavras, as plataformas serverless podem incluir tanto serviços gerenciados, tais como edge caching, autenticação e bancos de dados, quanto uma solução FaaS para a criação de funções orientadas a eventos, que são pequenas, stateless, efêmeras e, principalmente, não são dedicadas a nenhum servidor específico. Como resultado, as empresas de computação podem executar funções serverless no edge, mais próximo dos usuários finais, o que garante a menor latência possível.

Quais são as implicações de “adotar” Serverless para as empresas?

A adoção de serverless não é somente econômica e eficiente em termos de recursos, mas também permite uma programação mais ágil. Em seu relatório Serverless Best Development Practices, a Forrester explica que “serverless elimina a necessidade de os profissionais de AD&D escreverem e gerenciarem dezenas de arquivos de configuração XML ou adotarem a infraestrutura como código exclusivamente para dar suporte às operações”. [1] Como resultado, a programação serverless significa menos código e, consequentemente, uma superfície de ataque menor e menos bugs.

Além disso, a redução no código e menos configuração resulta em um fluxo de trabalho simplificado, com menos tarefas operacionais. Desse modo, permite práticas de negócios ágeis como DevOps, que combina equipes de desenvolvimento com equipes de operações. Embora DevOps seja frequentemente discutido no contexto de design e gerenciamento de contêineres, a tecnologia serverless permite que as empresas levem DevOps a um patamar totalmente novo.

Um post recente no site DevOps.com promove o serverless como um meio de turbinar a cultura DevOps por:

  • automatizar DevOps usando infraestrutura como código;
  • alternar facilmente entre as versões com mínimas interrupções de serviço;
  • permitir que as equipes trabalhem em uma variedade de locais e ambientes sem impacto significativo sobre outras equipes.

O relatório da Forrester sobre Serverless Best Practices aprofunda ainda mais sobre o impacto positivo que o serverless pode ter na cultura DevOps das empresas:

  • mínimo esforço para implementar aplicações, que escalam sem esforço;
  • lançamento de atualizações e novas funcionalidades em minutos;
  • executa facilmente experimentos de negócios;
  • escala até zero, sem custo para funções inativas;
  • refina facilmente aplicações com menos risco de desestabilização. [1]

Diante disso, a computação serverless é uma opção cada vez mais popular. Em um post recente, a Forrester prevê que 25% dos desenvolvedores usarão funções serverless regularmente até o final de 2021.

A Azion traz a Computação Serverless para o Edge

Com o Edge Functions da Azion, as empresas aproveitam todos os benefícios de uma plataforma serverless com o poder de Edge Computing. Ao contrário das soluções serverless, como AWS Lambda ou o Microsoft Azure, que oferecem funções serverless a partir de data centers em hiperescala e distantes dos usuários finais, as Edge Functions são executadas no ponto de presença mais próximo dos usuários finais, o que resulta em menor latência de rede comparada às soluções de cloud vendors.

Além disso, o Edge Functions não é executado em contêineres, como é o caso das soluções de cloud vendors. Com soluções baseadas em contêineres, são necessários servidores dedicados a fim de manter as funções em execução. Em consequência disso, os vendors vão desativar as funções após terem ficado ociosas por um tempo. Quando as funções são chamadas novamente depois desse período de inatividade, os contêineres devem ser ativados novamente, resultando no aumento de latência da aplicação, conhecido como cold start. Paralelamente, a execução de funções em contêineres significa que os clientes devem alocar memória para cada função, exigindo configuração adicional, o que pode resultar em provisionamento excessivo.

As Edge Functions, por sua vez, são executadas em um ambiente multitenant, usando o Google V8, que cria uma sandbox segura para manter cada função isolada. Devido a isso, as Edge Functions têm zero cold starts, menos configuração e usam recursos de maneira mais eficiente do que as soluções baseadas em contêineres.

O Edge Functions está disponível na versão beta para que todos os usuários da Azion experimentem os benefícios da computação serverless. Novos usuários podem criar uma conta gratuita em nosso site e ganhar $300 de crédito de serviços para usar com o Edge Functions ou qualquer outro produto da Azion.

Referências

[1] Hammond, J. S., & Rymer, J. R. (2019). Serverless Development Best Practices (pp. 3-4, Rep.). Cambridge, MA: Forrester Research.