Computação sem servidor - Serverless computing

A computação sem servidor é um modelo de execução de computação em nuvem no qual o provedor de nuvem aloca recursos da máquina sob demanda, cuidando dos servidores em nome de seus clientes. A computação sem servidor não mantém recursos na memória volátil; a computação é feita em rajadas curtas com os resultados persistentes no armazenamento. Quando um aplicativo não está em uso, não há recursos de computação alocados para o aplicativo. O preço é baseado na quantidade real de recursos consumidos por um aplicativo. Pode ser uma forma de computação utilitária . "Sem servidor" é um nome impróprio no sentido de que os servidores ainda são usados ​​por provedores de serviços em nuvem para executar códigos para desenvolvedores. No entanto, os desenvolvedores de aplicativos sem servidor não estão preocupados com o planejamento de capacidade , configuração, gerenciamento, manutenção, tolerância a falhas ou dimensionamento de contêineres, VMs ou servidores físicos.

A computação sem servidor pode simplificar o processo de implantação de código na produção. O código sem servidor pode ser usado em conjunto com o código implantado em estilos tradicionais, como microsserviços ou monólitos . Como alternativa, os aplicativos podem ser escritos para ser puramente sem servidor e não usar nenhum servidor provisionado. Isso não deve ser confundido com modelos de computação ou rede que não requerem um servidor real para funcionar, como ponto a ponto (P2P).

Tempos de execução sem servidor

Os fornecedores sem servidor oferecem tempos de execução de computação, também conhecidos como plataformas Function as a Service (FaaS), que executam a lógica do aplicativo, mas não armazenam dados. As linguagens comuns suportadas por tempos de execução sem servidor são Java , Python e PHP . Geralmente, as funções são executadas em limites de isolamento, como contêineres Linux .

Ofertas comerciais

A primeira plataforma de execução de código "pague conforme usar" foi a Zimki, lançada em 2006, mas não teve sucesso comercial. Em 2008, o Google lançou o Google App Engine , que apresentava faturamento medido para aplicativos que usavam uma estrutura Python personalizada, mas não podiam executar código arbitrário. PiCloud, lançado em 2010, ofereceu suporte FaaS para Python.

Kubeless e Fission são duas plataformas FaaS de código aberto executadas com Kubernetes .

O Google App Engine, lançado em 2008, foi a primeira oferta de computação sem servidor abstrata. O App Engine incluiu funções HTTP com um tempo limite de 60 segundos e um armazenamento de blob e armazenamento de dados com seus próprios tempos limite. Nenhuma persistência na memória foi permitida. Todas as operações tiveram que ser executadas dentro desses limites, mas isso permitiu que os aplicativos construídos no App Engine escalassem quase infinitamente e foi usado para oferecer suporte aos primeiros clientes, incluindo o Snapchat , bem como muitos aplicativos externos e internos do Google. O suporte à linguagem foi limitado a Python usando módulos Python nativos, bem como uma seleção limitada de módulos Python em C que foram escolhidos pelo Google. Como as plataformas sem servidor posteriores, o App Engine também usou o faturamento de pagamento pelo que usar.

O AWS Lambda , apresentado pela Amazon em 2014, popularizou o modelo abstrato de computação sem servidor. Ele é compatível com várias ferramentas adicionais da AWS sem servidor, como AWS Serverless Application Model (AWS SAM), Amazon CloudWatch e outras.

O Google Cloud Platform criou uma segunda oferta sem servidor, o Google Cloud Functions em 2016.

A IBM oferece IBM Cloud Functions na nuvem pública da IBM desde 2016. A IBM adicionou uma segunda oferta sem servidor, IBM Cloud Code Engine, em 2021.

O Microsoft Azure oferece funções do Azure, oferecidas na nuvem pública do Azure ou no local por meio da pilha do Azure.

A Cloudflare oferece Cloudflare Workers, desde 2017.

Fastly oferece Compute @ Edge, desde 2019.

Bancos de dados sem servidor

Vários bancos de dados sem servidor surgiram nos últimos anos. Esses sistemas estendem o modelo de execução sem servidor ao RDBMS , eliminando a necessidade de provisionar ou dimensionar hardware de banco de dados físico ou virtualizado .

A Nutanix oferece uma solução chamada Era que transforma um RDBMS existente como Oracle , MariaDB , PostgreSQL ou Microsoft SQL Server em um serviço sem servidor.

O Amazon Aurora oferece uma versão sem servidor de seus bancos de dados, com base em MySQL e PostgreSQL, fornecendo configurações de escalonamento automático sob demanda.

O Azure Data Lake é um serviço de armazenamento e análise de dados altamente escalonável. O serviço é hospedado no Azure , a nuvem pública da Microsoft. O Azure Data Lake Analytics fornece uma infraestrutura distribuída que pode alocar ou desalocar recursos dinamicamente para que os clientes paguem apenas pelos serviços que usam.

O Firebase , também de propriedade do Google, inclui um banco de dados hierárquico e está disponível por meio de planos fixos e pré-pagos.

O Confluent fornece uma implementação sem servidor do Apache Kafka (um sistema de streaming e armazenamento de eventos) entre os três principais provedores de nuvem, que abstrai a infraestrutura, é pago para uso e dimensiona automaticamente.

Vantagens

Custo

Sem servidor pode ser mais econômico do que alugar ou comprar uma quantidade fixa de servidores, o que geralmente envolve períodos significativos de subutilização ou tempo ocioso. Pode até ser mais econômico do que provisionar um grupo de escalonamento automático , devido ao empacotamento mais eficiente dos recursos subjacentes da máquina.

Isso pode ser descrito como computação pré-paga ou código básico, já que você é cobrado com base exclusivamente no tempo e na memória alocada para executar seu código; sem taxas associadas para tempo ocioso.

Os benefícios de custo imediato estão relacionados à falta de custos operacionais, incluindo: licenças, instalação, dependências e custo de pessoal para manutenção, suporte ou patch. A falta de custo com pessoal é uma vantagem que se aplica amplamente à computação em nuvem.

Elasticidade versus escalabilidade

Além disso, uma arquitetura sem servidor significa que os desenvolvedores e operadores não precisam perder tempo configurando e ajustando políticas ou sistemas de escalonamento automático; o provedor de nuvem é responsável por dimensionar a capacidade de acordo com a demanda. Como o Google coloca: "do protótipo à produção em escala planetária".

Como os sistemas nativos da nuvem são inerentemente reduzidos ou aumentados, esses sistemas são conhecidos como elásticos em vez de escalonáveis.

Pequenas equipes de desenvolvedores são capazes de executar o código sem a dependência de equipes de engenheiros de infraestrutura e suporte; mais desenvolvedores estão se tornando qualificados em DevOps e as distinções entre ser um desenvolvedor de software ou engenheiro de hardware estão se confundindo.

Produtividade

Com a função como serviço , as unidades de código expostas ao mundo exterior são funções simples orientadas por eventos . Isso significa que, normalmente, o programador não precisa se preocupar com multithreading ou lidar diretamente com as solicitações HTTP em seu código, simplificando a tarefa de desenvolvimento de software back-end.

Desvantagens

atuação

O código sem servidor usado com pouca frequência pode sofrer de latência de resposta maior do que o código que está continuamente em execução em um servidor dedicado, máquina virtual ou contêiner. Isso ocorre porque, ao contrário do escalonamento automático, o provedor de nuvem normalmente "reduz a velocidade" do código sem servidor completamente quando não está em uso. Isso significa que se o tempo de execução (por exemplo, o tempo de execução Java ) exigir uma quantidade significativa de tempo para inicializar, ele criará latência adicional.

Limites de recursos

A computação sem servidor não é adequada para algumas cargas de trabalho de computação, como computação de alto desempenho , devido aos limites de recursos impostos pelos provedores de nuvem e também porque seria provavelmente mais barato provisionar em massa o número de servidores que se acredita serem necessários em qualquer ponto no tempo.

Monitoramento e depuração

Diagnosticar problemas de desempenho ou de uso excessivo de recursos com código sem servidor pode ser mais difícil do que com código de servidor tradicional, porque embora funções inteiras possam ser cronometradas, normalmente não há capacidade de se aprofundar em mais detalhes anexando profilers , depuradores ou ferramentas APM . Além disso, o ambiente no qual o código é executado normalmente não é de código aberto , portanto, suas características de desempenho não podem ser replicadas com precisão em um ambiente local .

Segurança

O servidor sem servidor às vezes é considerado erroneamente como mais seguro do que as arquiteturas tradicionais. Embora isso seja verdade até certo ponto, porque as vulnerabilidades do sistema operacional são cuidadas pelo provedor de nuvem, a superfície de ataque total é significativamente maior, pois há muitos mais componentes para o aplicativo em comparação com as arquiteturas tradicionais e cada componente é um ponto de entrada para o aplicativo sem servidor . Além disso, as soluções de segurança que os clientes costumavam ter para proteger suas cargas de trabalho em nuvem tornam-se irrelevantes, pois os clientes não podem controlar e instalar nada no endpoint e no nível da rede , como um sistema de detecção / prevenção de intrusão (IDS / IPS).

Isso é intensificado pelas propriedades de monocultura de toda a rede do servidor. (Uma única falha pode ser aplicada globalmente.) De acordo com a Protego, a "solução para proteger aplicativos sem servidor é uma parceria estreita entre desenvolvedores, DevOps e AppSec, também conhecido como DevSecOps. Encontre o equilíbrio onde os desenvolvedores não possuem segurança, mas eles não estão isentos de responsabilidade também. Tome medidas para tornar isso um problema de todos. Crie equipes multifuncionais e trabalhe para uma integração rígida entre os especialistas em segurança e as equipes de desenvolvimento. Colabore para que sua organização possa resolver os riscos de segurança na velocidade do servidor sem servidor. "

Privacidade

Muitos ambientes de função sem servidor são baseados em ambientes proprietários de nuvem pública. Aqui, algumas implicações de privacidade devem ser consideradas, como recursos compartilhados e acesso por funcionários externos. No entanto, a computação sem servidor também pode ser feita em ambiente de nuvem privada ou até mesmo local, usando, por exemplo, a plataforma Kubernetes . Isso dá às empresas controle total sobre os mecanismos de privacidade, assim como a hospedagem em configurações de servidor tradicionais.

Padrões

A computação sem servidor é coberta pela International Data Center Authority (IDCA) em seu Framework AE360. No entanto, a parte relacionada à portabilidade pode ser um problema ao mover a lógica de negócios de uma nuvem pública para outra para a qual a solução Docker foi criada. A Cloud Native Computing Foundation (CNCF) também está trabalhando no desenvolvimento de uma especificação com a Oracle.

Bloqueio do fornecedor

A computação sem servidor é fornecida como um serviço de terceiros. Os aplicativos e softwares executados no ambiente sem servidor são, por padrão, restritos a um fornecedor de nuvem específico. Portanto, o servidor sem servidor pode causar vários problemas durante a migração.

Veja também

Referências

Leitura adicional