Os containers e a computação sem servidor são arquiteturas que reduzem a sobrecarga para aplicativos web hospedados na nuvem, mas diferem de muitas e importantes maneiras. Os containers são mais leves que as máquinas virtuais, mas as implantações sem servidor são ainda mais leves e fáceis de dimensionar do que as arquiteturas baseadas em containers.
Após ler este artigo, você será capaz de:
Copiar o link do artigo
Tanto a computação sem servidor quanto os containers permitem que desenvolvedores criem aplicativos com muito menos sobrecarga e mais flexibilidade do que os aplicativos hospedados em servidores tradicionais ou em máquinas virtuais. O estilo de arquitetura que um desenvolvedor deve usar depende das necessidades do aplicativo, mas os aplicativos sem servidor são mais escaláveis e geralmente mais econômicos.
Um container "contém" tanto um aplicativo quanto todos os elementos que o aplicativo necessita para funcionar corretamente, incluindo bibliotecas de sistema, configurações do sistema e outras dependências. Da mesma forma que naquelas misturas prontas para panquecas, do tipo "basta adicionar água", os containers só precisam de uma coisa para desempenhar sua função: estarem hospedados e funcionarem.
Qualquer tipo de aplicativo pode ser executado em um container. Um aplicativo baseado em container funcionará da mesma maneira, não importa onde esteja hospedado. Os containers podem ser facilmente movimentados e implantados onde for necessário, de forma muito parecida com o que acontece com os containers físicos usados para transporte, que possuem tamanho padrão e, portanto, podem ser enviados para qualquer lugar em vários meios de transporte (navios, caminhões, trens, etc.), independentemente de seu conteúdo.
Em termos técnicos, containers são uma forma de dividir uma máquina, ou servidor, em ambientes separados de espaço do usuário, de modo que cada ambiente execute apenas um aplicativo e não interaja com nenhuma outra seção particionada da máquina. Cada container compartilha o kernel da máquina com outros containers (o kernel é a base do sistema operacional e interage com o hardware do computador), mas ele é executado como se fosse o único sistema na máquina.
Uma máquina virtual é um software que imita um sistema computadorizado completo. Ele fica isolado do resto da máquina que o hospeda e se comporta como se fosse o único sistema operacional nessa máquina, tendo inclusive seu próprio kernel. As máquinas virtuais são outra forma comum de hospedar vários ambientes em um único servidor, mas utilizam muito mais capacidade de processamento do que os containers.
Os aplicativos sem servidor são divididos em funções e hospedados por um fornecedor terceirizado que faz a cobrança junto ao desenvolvedor do aplicativo com base apenas no tempo de execução de cada função. Para obter mais informações sobre computação sem servidor, veja O que é computação sem servidor?
Na verdade, a computação "sem servidor" é executada nos servidores, mas cabe ao fornecedor sem servidor fornecer espaço no servidor conforme a necessidade do aplicativo; nenhuma máquina específica é designada para uma determinada função ou aplicativo. Por outro lado, cada container reside em uma máquina por vez e utiliza o sistema operacional dessa máquina, embora os containers possam ser facilmente movidos para uma máquina diferente, caso se deseje.
Em uma arquitetura baseada em containers, o número de containers implantados é determinado antecipadamente pelo desenvolvedor. Por outro lado, em uma arquitetura sem servidor, o back-end realiza o dimensionamento de forma inerente e automática para atender à demanda.
Usando a mesma metáfora dos containers de transporte, uma transportadora poderia tentar prever um aumento de demanda por um determinado produto e enviar mais containers ao destino para atender a essa demanda, mas não poderia produzir mais containers cheios de mercadorias em um estalar de dedos se a demanda excedesse as expectativas.
A arquitetura sem servidor é uma forma de fazer exatamente isso. Quando se trata de capacidade computacional, a computação sem servidor é como o fornecimento de água em uma casa moderna: ao abrir a torneira, os consumidores podem adquirir e usar a água que precisarem a qualquer momento, pagando apenas pelo que usarem. Isso é muito mais escalável do que tentar comprar um balde de água ou um container de transporte por vez.
Os containers funcionam continuamente e, portanto, os provedores de nuvem precisam cobrar pelo espaço do servidor, mesmo que ninguém esteja usando o aplicativo no momento.
Não há despesas contínuas em uma arquitetura sem servidor porque o código do aplicativo não é executado, a menos que seja solicitado. Em vez disso, os desenvolvedores são cobrados apenas pela capacidade do servidor que seu aplicativo realmente utiliza.
Os containers são hospedados na nuvem, mas os provedores de nuvem não fazem atualizações nem manutenção. Os desenvolvedores precisam gerenciar e atualizar cada container que implantam.
Do ponto de vista de um desenvolvedor, uma arquitetura sem servidor não tem um back-end para ser gerenciado. O fornecedor cuida de todo o gerenciamento e de todas as atualizações de software para os servidores que executam o código.
Os containers levam mais tempo para realizar a configuração inicial do que as funções sem servidor, pois é necessário definir as configurações do sistema, bibliotecas, etc. Uma vez configurados, os containers demoram apenas alguns segundos para serem implantados. Mas como as funções sem servidor são menores do que os microsserviços do container e não vêm com as dependências do sistema, elas levam apenas alguns milissegundos para serem implantadas. Os aplicativos sem servidor podem ser ativados assim que o código for carregado.
É difícil testar aplicativos web sem servidor porque o ambiente de back-end é difícil de replicar em um ambiente local. Já os containers funcionam da mesma forma onde quer que sejam implantados, tornando relativamente simples testar um aplicativo baseado em container antes de implantá-lo na produção.
Para o Cloudflare Workers, que permite arquiteturas sem servidor, criamos um ambiente de testes virtual para ajudar a melhorar o processo de desenvolvimento.
Ambos são baseados na nuvem e ambos reduzem muito a sobrecarga da infraestrutura: a computação sem servidor mais do que os containers. Nos dois tipos de arquitetura, os aplicativos são divididos e implantados na forma de componentes menores. Em uma arquitetura baseada em containers, cada container executará um microsserviço.
Microsserviços são segmentos de um aplicativo. Cada microsserviço executa um serviço e vários microsserviços integrados são combinados para formar o aplicativo. Embora o nome pareça implicar que os microsserviços são pequenos, eles não precisam ser.
Uma das vantagens de criar um aplicativo como se fosse uma coleção de microsserviços é que os desenvolvedores podem atualizar um microsserviço de cada vez, sem precisar atualizar todo o aplicativo quando for necessário fazer alterações. Criar um aplicativo como um conjunto de funções, como em uma arquitetura sem servidor, oferece o mesmo benefício, mas em um nível mais granular.
Os desenvolvedores que optarem por uma arquitetura sem servidor serão capazes de lançar novos aplicativos e torná-los iterativos rapidamente, sem precisarem se preocupar se o aplicativo pode ou não ser escalado. Além disso, se um aplicativo não vê tráfego ou uso consistente, a computação sem servidor será mais econômica que os containers, uma vez que o código não precisa ser constantemente executado.
Os containers oferecem aos desenvolvedores mais controle sobre o ambiente em que o aplicativo é executado (embora isto também acarrete mais manutenção) e os idiomas e bibliotecas utilizados. Por esse motivo, os containers são extremamente úteis para a migração de aplicativos legados para a nuvem, uma vez que é possível replicar mais rigorosamente o ambiente de execução original do aplicativo.
E por fim, é possível utilizar uma arquitetura híbrida, com algumas funções sem servidor e algumas funções implantadas em containers. Por exemplo, se uma função do aplicativo requer mais memória do que a alocada pelo fornecedor sem servidor, se uma função é muito grande, ou se determinadas funções e não outras precisam ser de longa duração, uma arquitetura híbrida permite que os desenvolvedores colham os benefícios da arquitetura sem servidor enquanto ainda usam containers para as funções que não são compatíveis com a arquitetura sem servidor.
A Cloudflare permite que os desenvolvedores criem aplicativos sem servidor de alto desempenho com o . Cloudflare Workers.