Serverless & Mecanismo de Contêiner

Serverless & Mecanismo de Contêiner

Introdução

Ao falar sobre Serverless, Kubernetes é um tópico que não pode ser evitado.

Na lição de hoje, continuaremos aprendendo como configurar um ambiente Serverless privado. Especificamente, construiremos a infraestrutura Serverless com base na implantação K8s local da última lição. Em seguida, instalaremos componentes adicionais para estender as capacidades do cluster K8s, permitindo, em última análise, que o cluster K8s local suporte Serverless.

Pré-requisitos para Construir Serverless

Antes de começarmos, vamos esclarecer uma questão que surgiu durante o curso fundamental sobre Computação Serverless, particularmente FaaS. Alguns alunos perguntaram: “Qual é a relação entre microsserviços, Service Mesh e Serverless?”

Esses conceitos aparecem frequentemente em discussões, mas não se sinta pressionado. Eu também fiquei confuso com esses conceitos quando comecei a aprender sobre Serverless. Vamos revisitar primeiro os microsserviços. Ao usar microsserviços para criar BaaS, você pode ter notado que muitos conceitos em microsserviços são bastante semelhantes aos do Serverless.

Em termos simples, Service Mesh é uma solução de comunicação de rede para microsserviços que opera sem que os próprios microsserviços estejam cientes disso. Também podemos delegar a comunicação de rede em uma arquitetura Serverless a um Service Mesh. Através do Service Mesh, os componentes Serverless podem trabalhar em estreita colaboração com o cluster K8s, suportando, em última análise, nossas aplicações implantadas de maneira Serverless. Vamos observar o seguinte diagrama de arquitetura:

A partir do diagrama, podemos ver claramente que a infraestrutura subjacente do Serverless pode ser construída sobre o Service Mesh. No entanto, o Service Mesh é apenas uma das soluções para implementar a comunicação de rede do Serverless. Existem também outras opções como RSocket, gRPC e Dubbo. Escolhi o Service Mesh porque esta solução pode ser baseada em componentes K8s e fornece ferramentas de visualização para nos ajudar a entender o mecanismo de operação do Serverless, como alcançar tempo de inicialização zero e controlar o tráfego para releases graduais. Se você quiser praticar, o Service Mesh é, sem dúvida, a primeira escolha.

Infraestrutura Serverless: Service Mesh

Algumas pessoas se referem às tecnologias Kubernetes, Service Mesh e Serverless como os “três pilares” do desenvolvimento de aplicações nativas em nuvem. A essa altura, presumo que você entenda a razão por trás disso. No entanto, devo esclarecer que nas lições seguintes, introduziremos muitos novos termos. Dei a você uma visão geral desses termos para que tenha um entendimento amplo. Se tiver tempo, deve se aprofundar neles.

Agora, vamos voltar ao tópico principal e examinar mais de perto os princípios do Service Mesh.

Quando discutimos microsserviços, cobrimos apenas a orientação teórica sobre decomposição e integração, sem tocar na implementação específica. Se mudarmos para a implementação, a indústria tem, na verdade, muitos frameworks de microsserviços, mas a maioria está limitada a SDKs de linguagens específicas, especialmente frameworks Java.

O framework de microsserviços na forma de SDK geralmente tem um foco pesado na implementação da comunicação de rede entre microsserviços, como tentar novamente solicitações de serviço com falha, balanceamento de carga entre múltiplas instâncias de serviço e limitação de tráfego durante volumes elevados de solicitações de serviço. Essas lógicas frequentemente exigem a atenção dos desenvolvedores de microsserviços e precisam ser implementadas repetidamente em cada linguagem do SDK. Então, é possível extrair a lógica de comunicação de rede dos microsserviços do SDK, tornando nossos microsserviços mais leves e até eliminando a necessidade de se preocupar com a comunicação de rede?

A resposta é o Service Mesh.

Se implantarmos aplicações decompostas em Pods de cluster K8s, o processo é como mostrado no diagrama abaixo, onde a aplicação MyApp chamará diretamente o microsserviço de usuário e o microsserviço de tarefas dentro do cluster via HTTP.

Mas e os problemas de segurança que surgem do acesso HTTP direto? Se alguém iniciar um contêiner BusyBox em nosso cluster, não conseguiria atacar diretamente nosso microsserviço de usuário e o microsserviço de tarefas? Além disso, quando temos múltiplas instâncias do microsserviço de usuário, como alocamos o tráfego?

Tradicionalmente, usaríamos um SDK de arquitetura de microsserviços, que contém muita dessa lógica e muitas estratégias que precisamos decidir quando ativar ao chamar o SDK. Nosso código também se tornaria fortemente acoplado ao SDK de arquitetura de microsserviços.

O Service Mesh, no entanto, adota uma abordagem diferente, extraindo a lógica de comunicação de rede do microsserviço e gerenciando o tráfego de rede de maneira não intrusiva, permitindo que não nos preocupemos mais com o pesado SDK de microsserviços. Vamos ver como o Service Mesh resolve esse problema.

O Service Mesh pode ser dividido em um plano de dados e um plano de controle. O plano de dados é responsável por gerenciar a comunicação de rede, enquanto o plano de controle controla e monitora o estado da comunicação de rede. O Service Mesh intercepta todo o tráfego de rede injetando um Sidecar.

No plano de dados, nossas aplicações e microsserviços parecem se comunicar diretamente com o Sidecar, mas na realidade, o Sidecar pode conseguir isso através do sequestro de tráfego. Portanto, nossas aplicações e microsserviços geralmente não estão cientes disso e não requerem modificações, apenas usando solicitações HTTP para transmitir dados.

O plano de controle é mais complexo e é o núcleo das operações do Service Mesh. O pilot é o motor de todo o plano de controle, responsável pela descoberta de serviços, gerenciamento de tráfego e escalonamento. O Citadel é a fortaleza guardiã do plano de controle, responsável por certificados de segurança e autenticação. O Mixer é o oficial de comunicação, distribuindo as políticas do plano de controle e coletando o estado operacional de cada serviço.

Agora você deve ter uma compreensão clara do que é o Service Mesh, como ele extrai a lógica de comunicação de rede de microsserviços do SDK e por que dizemos que o Service Mesh é a base de comunicação de rede para o Serverless.

A Relação Entre Serverless e Mecanismos de Contêiner

O valor central do Serverless reside em não precisar gerenciar servidores, permitindo focar na lógica de negócios. A tecnologia de contêineres fornece a infraestrutura poderosa e as capacidades flexíveis de escalonamento necessárias para o Serverless, especialmente quando combinada com ferramentas de orquestração como Kubernetes.

Os contêineres oferecem vantagens como empacotamento leve, isolamento de recursos e inicialização rápida. Os contêineres empacotam aplicações e suas dependências, garantindo consistência no ambiente de execução, o que facilita a implantação e inicialização rápidas de instâncias de aplicação em uma plataforma Serverless. Além disso, os contêineres fornecem ambientes de execução isolados, garantindo que diferentes aplicações não interfiram umas nas outras, melhorando assim a estabilidade geral da plataforma. Além disso, a inicialização de contêineres é mais rápida que a de máquinas virtuais, atendendo aos altos requisitos de aplicações Serverless para escalonamento elástico.

Como núcleo do escalonamento Serverless, o Kubernetes possui funções como implantação automatizada, escalonamento elástico e descoberta de serviços. Ele pode implantar automaticamente aplicações em contêineres com base em regras predefinidas, sem intervenção manual, ajustar o número de instâncias de aplicação de acordo com a carga em tempo real, garantindo desempenho enquanto otimiza o uso de recursos, e fornecer mecanismos de descoberta de serviços para facilitar a comunicação entre componentes dentro da plataforma Serverless.

Para construir uma plataforma Serverless baseada em contêineres, primeiro, você precisa empacotar aplicações e suas dependências em imagens de contêiner, garantindo que as aplicações possam ser rapidamente implantadas e executadas na plataforma. Em seguida, escolha uma plataforma em nuvem apropriada ou configure um cluster Kubernetes auto-hospedado como infraestrutura para a plataforma Serverless. Depois, desenvolva componentes da plataforma Serverless, incluindo um gateway de API para receber e rotear solicitações externas, um runtime de funções para carregar e executar código de função e gerenciar o ciclo de vida das funções, e disparadores de eventos que escutam várias fontes de eventos e convertem eventos em chamadas de função. Finalmente, use o Deployment do Kubernetes para gerenciar a implantação e atualização de instâncias de aplicação, use o Service para descoberta de serviços e balanceamento de carga, e use o HPA para alcançar escalonamento elástico automático.

Uma plataforma Serverless baseada em contêineres oferece alta flexibilidade, forte personalização e relação custo-benefício. Os desenvolvedores podem escolher livremente a tecnologia de contêiner subjacente e a plataforma Kubernetes, personalizar as funções e recursos da plataforma Serverless de acordo com suas necessidades e utilizar as capacidades de escalonamento de recursos do Kubernetes para otimizar o uso de recursos e reduzir custos.

A combinação da tecnologia de contêineres e do Kubernetes fornece ferramentas e métodos poderosos para construir plataformas Serverless eficientes, flexíveis e escaláveis, permitindo que os desenvolvedores construam facilmente suas próprias plataformas Serverless, foquem no desenvolvimento da lógica de negócios e melhorem a eficiência do desenvolvimento.

Novita AI Serverless

Na Novita AI, desenvolvemos nosso próprio mecanismo de contêiner, o Nexus. Aproveitando as poderosas capacidades de computação distribuída e escalonamento de recursos do Nexus, a Novita AI construiu um serviço Serverless voltado para a próxima geração de IA generativa. Os usuários só precisam se concentrar na inovação dos negócios, sem se preocupar com os recursos computacionais subjacentes. As reservas já estão abertas; junte-se à lista de espera para ser o primeiro a experimentar o Novita AI Serverless.

Novita AI é a plataforma de nuvem tudo-em-um que impulsiona suas ambições de IA. APIs integradas, serverless, instância GPU — as ferramentas econômicas que você precisa. Elimine a infraestrutura, comece gratuitamente e torne sua visão de IA realidade.

Leitura Recomendada

Escalonamento Sob Demanda: Como o Serverless Lida com Picos de Tráfego com Facilidade

Análise Serverless, Começando pelos Modelos de Dados

Revelando a Revolução: Explorando o Mundo da Computação Serverless