Kubernetes Versus Serverless

project

Quando um e quando o outro?

É a mesma resposta para tantas outras perguntas: “depende”.

A diferença entre um consultor e um bom consultor é conhecer várias soluções complementares e encontrar a melhor com base no cenário.

Atualmente, existem algumas ferramentas que pretendem parcialmente substituir um cluster Kubernetes totalmente desenvolvido.

Definitivamente, as funções Serverless são uma solução econômica e simples para implementar seus serviços e não há dúvidas sobre isso.

A primeira opção que você deve considerar, e com um porém; eles tendem a ser dependentes do provedor cloud, você não tem controle sobre os recursos e, no longo prazo, podem se tornar caros devido à integrações.

Por outro lado, executar suas cargas de trabalho em containers pode ser mais econômico, porém mais complexo.

Existem três desvantagens principais do Serverless em comparação com o Kubernetes:

     1 - Não se aplica a certos casos de uso, como sistemas distribuídos em tempo real, processamento com estado, trabalhos de longa execução, etc. As funções devem ser acionadas por um evento e devem responder rapidamente. Você não tem controle de granulação em relação à infraestrutura, portanto, não pode usar APIs de baixo nível para maximizar o desempenho e reduzir a latência;

     2 - Serverless pode se tornar caro. É difícil prever e controlar os custos devido à natureza de pagamento conforme o uso. Minha preocupação é que, devido à natureza orientada a eventos do FaaS, somos atraídos pela integração com serviços em cloud que podem não ser muito econômicos.

     3 - Por exemplo, API Gateway é um ótimo serviço, mas o custo pode aumentar com o tempo. Todas essas integrações com serviços mais caros podem aumentar drasticamente o custo. Se você tiver uma carga mais ou menos estável, o Kubernetes será mais barato.

Observe que o Kubernetes permite um comportamento semelhante ao FaaS, (Functions as a Service), através a projetos como o Knative, que permitem que as funções em execução dentro de containers sejam executadas em resposta a eventos e, em seguida, reduzidas a zero.

Curiosamente, Knative é a tecnologia por trás do Cloud Run da cloud do Google (GCP).

Na minha experiência...

Se uma empresa planeja escalar e permanecer competitiva, ela deve considerar a mudança de sua infraestrutura para o Kubernetes.

Serverless é ótimo para um tempo rápido de lançamento no mercado.

Você pode ir da ideia ao produto muito rápido e pode escalar muito bem em termos de carga. Muitas startups começam dessa maneira, mas com o tempo, algumas podem ter problemas com os altos custos de infraestrutura.

Tudo depende do seu cenário e uso. Se você não faz integração com serviços caros, você tem uma carga imprevisível em que o aplicativo fica ocioso às vezes, Serverless será mais barato e pode lidar com milhões de solicitações. Se você tiver uma carga estável ou preditiva (sazonal), o Kubernetes pode ser mais barato.


Em resumo é isso, agora se quiser se aprofundar comigo nos detalhes, vamos lá. É só seguir com a leitura…


Você acha que o Kubernetes é a última tecnologia da cultura DevOps?


Bem, hoje como nunca antes, as tecnologias são efêmeras e você tem que estar pronto para essas mudanças.

Uso Kubernetes no dia a dia e fico feliz em falar novamente sobre, é a moda mais quente no cenário DevOps.

Seria a solução definitiva para gerenciamento de infraestrutura ou precisamos apostar definitivamente em Serverless? O que nos motiva há mais tempo na equipe de operações?


Lembre-se, o NoOps está chegando.


Mudanças são usuais na tecnologia. Nossos antepassados viajavam em carruagens e nós agora em aviões. Isso faz parte do progresso.

Nos últimos anos, houve uma pequena revolução que traz cada vez mais aplicativos das máquinas virtuais para os containers, principalmente graças à oportunidade de implantar usando o Kubernetes.

Enquanto essa revolução ocorreu, havia uma pequena palavra poderosa da moda:


Serverless.


A maioria das pessoas o vê como algo ruim, outros como boa, que pode salvar os desenvolvedores do pesadelo operacional.

Implementações mais comuns Serverless têm containers sem estado com um SDK que permite que seu código seja integrado ao sistema e fatura para você com base no uso de recursos.

Na maioria dos casos, podemos enviar para a nuvem nossa função FaaS e essa função é ativada por chamadas HTTP. Os principais provedores clouds oferecem uma experiência semelhante:

Amazon: AWS Lambda

Microsoft Azure: Azure Functions

Google Cloud: Cloud Functions

Claro, os servidores não estão extintos, você não os vê porque estão escondidos pela cloud escolhida. Os servidores ainda estão ativos, mas você não vê nenhuma memória RAM, CPU ou espaço em disco. Você apenas se concentra no código. Você pode colocar seu esforço onde é realmente necessário.

E o que é Kubernetes?


Pense como uma estrutura para executar sistemas distribuídos a partir de imagens simples do docker. Cuida de seus requisitos de dimensionamento, implantação e balanceamento de carga. Tudo isso pode ser facilmente descrito usando arquivos YAML simples e reutilizados, criando um ambiente replicável e escalável.

Apenas alterando alguns arquivos de configuração, você tem controle total sobre as instâncias de containers (serviços e pods), rede e implantação. O Kubernetes cuida de seus requisitos de escalonamento, failover, padrões de implantação e muito mais.

O Kubernetes, como o Serverless, permite uma arquitetura complexa com baixo esforço do administrador de sistemas. Essa tecnologia transforma a implantação clássica, que faz uso intensivo de pessoas, em uma implantação inteligente e rápida.


Quais são os prós e contras do Kubernetes?


A grande vantagem de usar o Kubernetes é que você pode lidar com seu cluster como se fosse uma rede de servidores convencionais, mas sem o custo de gerenciamento físico.

Logicamente, você pode recriar o paralelismo entre os servidores e os componentes do cluster. Você tem pods e serviços que pode instanciar como se fosse uma máquina virtual. Você tem rede, armazenamento e assim por diante. Isso se traduz em um controle mais profundo de todos os componentes únicos com acesso de baixo nível ao cluster.

Os prós são:

     - Infraestrutura imutável. Chega de "funciona no meu laptop", o mesmo código e dependências em todos os ambientes (desenvolvimento, testes (qa) e produção);

     - Gerenciamento de recursos muito eficiente, é rápido. Baixa latência;

     - Declarativo. Basta definir o que você precisa e o Kubernetes cuidará do resto;

     - Custo-benefício. Vários containers podem ser executados em uma única VM;

     - Extenso ecossistema de ferramentas e frameworks. Na minha opinião, muito amplo;

     - Várias cargas de trabalho e opções de implantação. Você pode executar qualquer coisa;

     - Suporta Cron Jobs e aplicativos Stateful, incluindo processamento de big data ou Actor Systems;

     - Portável. Pode ser executado no laptop ou em várias clouds;

     - Open Source, ótimo suporte da comunidade e amplamente adotado;

Os contras são:

     - Requer conhecimento sobre rede e armazenamento;

     - Muitas opções de monitoramento, segurança, ferramentas de desenvolvedor, etc. Difícil de se manter atualizado;

Devemos considerar Kubernetes quando:

     - Você está migrando seus serviços existentes para a cloud;

     - Seus serviços já são executados em containers;

     - Usa uma linguagem de programação não suportada por seu provedor FaaS em cloud;

     - Seu aplicativo requer APIs de baixo nível, como controle de thread;

     - Tem componentes com monitoração de estado ou tarefas de longa execução;

     - Está desenvolvendo sistemas distribuídos em tempo real;

     - Você usa muito a JVM, especialmente a simultaneidade;

     - Deseja controlar as implantações, o pipeline de CI/CD e como os aplicativos são empacotados e implementados;

     - Você tem experiência em operações na equipe, que é muito hábil em Kubernetes e sabe como monitorá-lo, protegê-lo e mantê-lo funcionando;

     - Sua empresa adota os princípios da cultura DevOps;

     - Você deseja evitar o lock-in de migração de cloud;

     - Você tem uma carga previsível ou estável;

     - Você deseja um controle rígido sobre seus recursos para maximizar o desempenho e minimizar os custos;

     - Você tem um requisito de segurança ou política que o Serverless não atende;

Quais são os Prós e Contras de Serverless?

O Kubernetes é um grande passo à frente na redução do esforço do administrador do sistema, mas não foi reduzido a zero. A abordagem Serverless basicamente evita qualquer componente sysadmin, pois a única parte com a qual você deve se preocupar é o código-fonte.

É como pegar um conjunto de tijolos de lego e colocá-los juntos. Cada tijolo funciona individualmente.

Os prós são:

     - Fácil de usar e fácil de aprender, basta escrever pequenas funções em Python, JavaScript, Go, Java e Dotnet;

     - Pague conforme você usa. Pode ser potencialmente muito mais barato para cargas imprevisíveis, como aplicativos da web e apis. Sem custos quando as funções não estão funcionando;

     - Orientado a eventos, pode se integrar a muitos serviços;

     - Fácil de gerenciar, basta definir a RAM, integrar com IAM e definir os gatilhos;

     - Infinitamente escalável, sem necessidade de configurar clusters. Muito rápido;

     - Não há necessidade de equipes de operações especializadas. O monitoramento é integrado. Isso pode reduzir custos;

     - Produtividade do desenvolvedor;

Os contras são:

     - Não é adequado para certos casos de uso ou cenários, como sistemas em tempo real ou tarefas de longo prazo de processamento;

     - Bloqueio de fornecedor. Difícil migração caso não use docker;

     - O paradigma baseado em eventos pode ser difícil no aprendizado;

     - O debug pode ser difícil e um fator complicador;

     - Problemas de segurança. Mais difícil de configurar regras ou políticas específicas, você depende inteiramente da cloud, isso pode ser proibitivo para grande corporações;

     - Pode ficar caro em certos casos, não por causa do FaaS, mas por causa das integrações;

Devemos considerar Serverless quando:

     - Sua equipe é composta principalmente de desenvolvedores sem experiência operacional (rede, armazenamento, monitoramento e observabilidade);

     - Está desenvolvendo um site com muitos picos e carga imprevisível que precisa ser escalonada rapidamente;

     - Usa muito pouco ou nenhum recurso em determinados momentos e prefere um modelo pré-pago;

     - Uma das principais linguagens com suporte, como Python, JavaScript, Go, Java ou Dotnet;

     - Você não usa Java ou JVM. Serverless, não é a melhor opção para a JVM, pois leva mais tempo para escalar e a JVM não tem tempo para otimizar a execução do código;

     - Tempo de lançamento no mercado é importante e os recursos são limitados;

     - Seu caso de uso pode ser implementado usando FaaS;

     - Está comprometido com um única cloud;

     - Você desenvolve aplicativos orientados a eventos;

     - Pode lidar com picos repentinos nas contas mensais. Isso pode ser um problema para startups, pois uma grande conta na cloud pode colocá-las em apuros financeiros;

Serverless é o fim do Kubernetes?

Mesmo sem servidor parece algo novo hoje em dia, o primeiro lançamento do AWS Lambda foi em 2014. Naquele ano, o Docker estava dando os primeiros passos (o primeiro lançamento oficial foi em 2013, e não tenho certeza de quando ele estará pronto para cenários de produção.

O Kubernetes nasceu em 2014. Assim, podemos dizer que o Serverless estava disponível desde a mesma época do container, menos ou mais. Desse ponto de vista, o Serverless não vem depois do Kubernetes e não podemos considerar o Serverless como um substituto para os containers.

São apenas duas abordagens diferentes para implementar a parte de hospedagem de um aplicativo da web ou uma api. Em alguns casos, talvez você prefira um ou outro.

Resume

A diferença entre um consultor e um bom consultor é conhecer várias soluções complementares e encontrar a melhor com base no cenário no uso de Serverless ou Kubernetes.

Technology