Virtualização Moderna: Como o Hyperlight está transformando a computação sem servidor

Virtualização Moderna: Como o Hyperlight está transformando a computação sem servidor

A virtualização parecia ser uma dessas tecnologias que foi feita. Com Hyper-V, VMware e KVM, todos oferecendo recursos e desempenho semelhantes, tudo o que restava era dar suporte a novas instruções de chipset e corrigir bugs. Mas lentamente as coisas começaram a mudar, à medida que os sistemas operacionais e plataformas adotaram máquinas virtuais e contêineres como blocos de construção essenciais.

O suporte do Windows para segurança baseada em virtualização foi um driver-chave, com novos recursos baseados em paravisor na plataforma de vinculação Krypton do Hyper-V e máquinas virtuais juntas para que os usuários não soubessem que estavam usando código em execução em uma VM. A segurança impulsionou muitos outros desenvolvimentos recentes de virtualização, com ferramentas como OpenHCL fornecendo uma estrutura para um ambiente de execução confiável baseado em virtualização.

Máquinas Virtuais Modernas para Computação sem Servidor

Há outro lugar cada vez mais importante onde as VMs são importantes. No mundo da computação nativa em nuvem e sem servidor, precisamos ser capazes de lançar código rapidamente para escalar com a demanda e suportar a escala para zero quando necessário. É assim que administramos data centers economicamente, garantindo que não precisamos manter cargas em execução caso um usuário precise delas.

Precisamos ser capazes de lançar pequenos elementos de funcionalidade em microssegundos, rápido o suficiente para que os usuários não percebam nenhuma latência. Isso requer uma nova forma de virtualização, onde o hypervisor fornece as APIs que tradicionalmente seriam hospedadas por um SO convidado, fornecendo um conjunto leve de serviços que podem ser acessados ​​por meio de interfaces conhecidas.

Apresentando o Hyperlight: um Gerenciador de VM Pequeno e Rápido

Em 2023, o CTO do Azure, Mark Russinovich, mencionou algum trabalho sendo feito dentro do Azure em um gerenciador de máquina virtual projetado para uso com WASI, a Web Assembly System Interface. O Hyperlight funcionaria eliminando a necessidade de ter um sistema operacional convidado em uma máquina virtual, em vez de simplesmente expor uma CPU virtual e E/S para aplicativos convidados. A abordagem minimalista resultante estava mostrando bons resultados e permitia que binários vinculados estaticamente inicializassem e fossem executados.

O Hyperlight agora é um projeto público com um repositório GitHub. Ainda é muito experimental, mas há o suficiente para explorar o que você pode fazer com suas próprias VMs mínimas, especialmente como você pode escrever código para elas. A Microsoft sugere que o Hyperlight é destinado a funções como um serviço em que aplicativos orientados a eventos precisam ser escalonados rapidamente, mas há outras possibilidades: por exemplo, microsserviços em um ambiente Kubernetes gerenciado usando o Kubernetes Event-Driven Autoscaling (KEDA) ou código portátil para hardware de IoT de ponta.

É interessante olhar para outros anúncios recentes do Azure, pois muitos deles podem funcionar bem com o Hyperlight, especialmente onde latência e densidade são essenciais. Executar o Hyperlight no hardware Cobalt Arm permitiria que o Azure aproveitasse sua nova computação de menor potência e também permitiria que as cargas de trabalho do Drasi respondessem rapidamente a notificações de alterações em muitas fontes de dados.

Usando Hyperlight para Funções como Serviço

Então, como o Hyperlight funciona? Para começar, todo o seu código precisa ser executado na CPU virtual do Hyperlight. Isso requer que o código seja compilado para ele, com um conjunto de bibliotecas especializadas para fornecer suporte de plataforma que precisa ser vinculado estaticamente quando compilado. Isso está disponível atualmente como C, embora haja planos para também implementá-lo em Rust. Essa abordagem torna o uso de um tempo de execução do Web Assembly uma boa escolha, pois permite que você crie o tempo de execução uma vez e, em seguida, use WASI para executar código arbitrário escrito em uma linguagem de nível superior e compilado para o conjunto de instruções wasm do Web Assembly. Isso deve permitir que você use qualquer linguagem que tenha um compilador wasm, incluindo linguagens .NET como C#.

O Hyperlight fornece a infraestrutura básica para executar uma VM com provisionamento fino. Isso configura a memória necessária por meio das APIs do hipervisor do SO host, habilitando a CPU virtual e seus registros, antes de executar um aplicativo pré-configurado em um ponteiro de instrução definido. É uma abordagem otimizada para executar um processo por VM, com o aplicativo e a VM agrupados.

Embora isso possa parecer com outros gerenciadores de máquinas virtuais, ele é muito otimizado para inicializações rápidas a frio, indo do nada para um aplicativo totalmente instanciado no menor tempo possível. Ao iniciar funções rapidamente, o Hyperlight permite que o Azure dimensione sua ferramenta de funções como serviço de forma mais eficaz, desligando-as completamente quando não estiverem em execução, garantindo que, quando uma função estiver ativa, ela esteja computando, não simplesmente usando energia enquanto espera para ser chamada.

Iniciar uma VM hospedada no Hyperlight leva alguns milissegundos, em oposição aos 120 ou mais de uma VM tradicional. É mais lento do que iniciar um tempo de execução de web assembly por si só, mas usar uma VM fornece o nível adicional de segurança e isolamento que é necessário para aplicativos multilocatários.

Desenvolvendo para e com Hyperlight

O Hyperlight é invocado programaticamente. O código de exemplo da Microsoft é escrito em Rust e leva algumas linhas de código para criar um sandbox Hyperlight e carregar código nele. Uma opção útil é criar um snapshot da VM depois que ela for criada, o que pode ser usado para iniciar instâncias futuras mais rapidamente.

Depois que uma VM estiver ativa e em execução, você pode usar as bibliotecas Hyperlight Rust para chamar uma função hospedada na VM diretamente. Seu código de host precisa ser executado em um loop até que a função da VM pare com sucesso ou falhe com um erro conhecido ou desconhecido. Se a função for bem-sucedida, o host passa o resultado para a função de chamada. Se falhar, ele registra a mensagem de erro apropriada.

Usar Rust aqui faz sentido. Ele é seguro para memória, então reduz o risco de vazamentos de memória e escapes de buffer, ajudando a manter o código do host e do convidado seguros. Isso é essencial em um ambiente nativo da nuvem, onde instâncias de função são criadas e destruídas e não há link entre uma instância e a próxima.

Como você pode construir um binário convidado para uso no Hyperlight? Você precisa usar a biblioteca Hyperlight, com versões C e Rust disponíveis. Também é importante lembrar que esta é a única que você pode usar, então não comece com a biblioteca padrão, mesmo que seja com ela que você sempre trabalhou no passado. Existem outros pré-requisitos importantes, incluindo um ponto de entrada específico para seu código, para capturar chamadas de função não registradas do host.

Um ponto-chave é que não há acesso ao sistema host do aplicativo convidado, a menos que seja explicitamente habilitado pelo host. Mesmo se você tiver habilitado essa opção, os aplicativos convidados são estritamente limitados no que pode ser entregue, bloqueando o comprimento e o tipo do argumento. Se o que for enviado não for o esperado, a chamada será rejeitada pelo host Hyperlight.

A segurança é importante ao construir um host Hyperlight. A Microsoft divulgou uma lista de requisitos que ajudam a definir a função do host como uma ferramenta para gerenciar código de convidado. Isso inclui garantir que seu host não faça coisas como criar ou trabalhar com arquivos, acessar recursos de rede ou mesmo trabalhar com ferramentas de criptografia. Quando você considera que um host pode estar carregando mais de uma função diferente para proprietários diferentes, essas regras começam a fazer sentido. Não há necessidade de expor o estado ou os serviços que podem ser acessados ​​por agentes maliciosos. E se você estiver executando um serviço público, pode ter certeza de que eles tentarão fazer exatamente isso.

Projetando para Economia de Nuvem

Ainda é cedo para o Hyperlight, mas há muito o que gostar no que nos foi mostrado até agora. A ideia de um host leve para funções é boa, especialmente uma com a capacidade de realmente escalar para zero. À medida que for implementado no Azure e em outras plataformas de nuvem, ele deve ter um efeito interessante na economia do desenvolvimento sem servidor nativo da nuvem, tanto para usuários quanto para provedores de nuvem.

Escalar para zero com latência mínima de inicialização garantirá que não haja custos associados a funções ociosas e, ao mesmo tempo, melhorará a utilização geral em data centers. Isso deve ser uma vitória para todos. Agora, tudo o que precisamos é de um tempo de execução do Hyperlight Functions, um que esconda o encanamento sob o Web Assembly e nos permita construir código em nossa linguagem de escolha. E é isso que entregar o projeto à Cloud Native Computing Foundation deve fazer, encorajando os desenvolvedores a pensar sobre como construir usando o Hyperlight com Kubernetes e Web Assembly.

Conteúdo Relacionado

O Rails 8 sempre foi um divisor de águas...
Na era do declínio do império dos Estados Unidos...
Os aplicativos da Web são uma pedra fundamental da...
O mundo da tecnologia tem estado agitado com discussões...
Os desenvolvedores Java enfrentam uma variedade de erros relacionados...
Com várias décadas de experiência, adoro criar aplicativos corporativos...
A escalabilidade é um fator crítico quando se trata...
Ao trabalhar em um projeto de código aberto no...
A Inteligência Artificial (IA) tem se tornado cada vez...
A maioria das organizações enfrenta desafios ao se adaptar...
Quando nós, desenvolvedores, encontramos alguns bugs em nossos logs,...
A cibersegurança é um tópico cada vez mais importante...
A experiência do desenvolvedor (DX) é um tópico cada...
Ao relatar estatísticas resumidas para resultados de testes de...
Explorando as Engrenagens do Kernel Semântico Falei um pouco...
Вернуться к блогу

Комментировать

Обратите внимание, что комментарии проходят одобрение перед публикацией.