A Microsoft lançou sua nova ferramenta VM baseada em Rust, com foco em funções, agora disponível no Azure e pronta para auxiliar aplicações orientadas para eventos em grande escala.
O suporte do Windows para a segurança baseada em virtualização foi fundamental, introduzindo novas funcionalidades que combinam paravirtualização na plataforma Hyper-V, unindo máquinas virtuais de forma transparente para os usuários, sem que percebam que estão utilizando código em execução em um ambiente virtual. Esse avanço em segurança tem impulsionado vários outros desenvolvimentos recentes na área de virtualização, incluindo o OpenHCL, que oferece uma estrutura para criar um ambiente de execução confiável baseado em virtualização.
Métodos atuais de computação sem servidor utilizando máquinas virtuais avançadas.
Em um cenário de computação nativa e sem servidor, é essencial a capacidade de implantar rapidamente o código para atender à demanda, bem como garantir a escalabilidade até zero quando necessário. Isso permite a administração econômica dos data centers, evitando a manutenção de cargas de trabalho ociosas.
Necessitamos ter a habilidade de introduzir rapidamente pequenos componentes funcionais em frações de segundo, de forma tão veloz que os usuários não percebam qualquer atraso. Isso demanda uma nova abordagem de virtualização, em que o hipervisor disponibiliza APIs que normalmente seriam executadas por um sistema operacional convidado, oferecendo um conjunto simplificado de serviços acessíveis por meio de interfaces familiares.
Introduzindo o Hyperlight: um gerenciador de máquinas virtuais compacto e ágil.
Em 2023, o CTO da Azure, Mark Russinovich, destacou alguns projetos em andamento no Azure, incluindo um gerenciador de máquinas virtuais desenvolvido para ser usado com a WASI, a Interface de Sistema de Montagem Web. A Hyperlight opera eliminando a necessidade de um sistema operacional convidado em uma máquina virtual, ao invés disso, expondo apenas uma CPU virtual e I/O para os aplicativos convidados. Essa abordagem minimalista tem apresentado bons resultados, permitindo que os binários estejam estaticamente ligados para inicialização e execução.
A Hyperlight é agora um projeto público disponível no GitHub, embora ainda esteja em fase experimental. Apesar disso, já há recursos suficientes para explorar as capacidades de criação de suas próprias máquinas virtuais mínimas e escrever código para elas. A Microsoft sugere que a Hyperlight pode ser utilizada como um serviço para dimensionar rapidamente aplicações orientadas a eventos, mas também há outras possibilidades, como a implementação de microserviços em um ambiente Kubernetes gerenciado pelo Kubernetes Event-Driven Autoscaling (KEDA) ou o desenvolvimento de código portátil para dispositivos IoT de borda.
Pode ser útil analisar outros anúncios recentes do Azure, já que alguns deles poderiam se integrar bem com a Hyperlight, especialmente em situações em que a latência e a densidade são cruciais. Utilizar o Hyperlight no hardware Cobalt Arm possibilitaria ao Azure aproveitar sua nova computação de baixa potência, e também permitiria que as cargas de trabalho da Drasi respondessem rapidamente a mudanças em várias fontes de dados.
Utilizando o Hyperlight para desempenhar funções como um serviço.
A Hyperlight opera através da execução de todo o seu código na CPU virtual Hyperlight. Para isso, é necessário compilar o código com um conjunto de bibliotecas especializadas para garantir suporte de plataforma, que precisa ser conectado estaticamente durante a compilação. Atualmente, a linguagem disponível é o C, embora haja planos para também implementar em Rust. Essa abordagem torna viável o uso de um tempo de execução WebAssembly, visto que possibilita a construção do tempo de execução uma única vez e, em seguida, a utilização do WASI para executar o código escrito em uma linguagem de alto nível e compilado para o conjunto de instruções WebAssembly. Isso abre a possibilidade de utilizar qualquer linguagem que tenha um compilador de wasm, incluindo linguagens .NET como C#.
A Hyperlight oferece os recursos essenciais para operar uma máquina virtual de forma precisa. Isso permite a configuração da memória necessária por meio das APIs do hipervisor do sistema operacional principal, possibilitando a preparação da CPU virtual e seus registros antes de rodar um aplicativo pré-configurado em um ponto de instrução específico. Essa metodologia é direcionada para executar um processo por máquina virtual, mantendo o aplicativo e a VM integrados.
A Hyperlight é um gerenciador de máquinas virtuais altamente otimizado para garantir inícios rápidos de aplicativos, permitindo que o Azure dimensione suas funções de forma mais eficiente, desligando-as quando não estão em uso para economizar energia e garantir um desempenho computacional eficaz quando necessário.
Iniciar uma máquina virtual Hyperlight hospedada leva apenas alguns milissegundos, em comparação com os 120 segundos necessários para uma máquina virtual tradicional. Embora seja mais demorado do que iniciar um tempo de execução de montagem web por conta própria, optar por uma máquina virtual oferece um nível extra de segurança e isolamento essenciais para aplicativos multilocatários.
Criando e colaborando em projetos com Hyperlight.
Hyperlight é chamado de forma programática. A amostra de código fornecida pela Microsoft está em Rust e requer apenas algumas linhas de código para criar um ambiente Hyperlight e carregar o código nele. Uma funcionalidade interessante é a possibilidade de criar um snapshot do VM após a sua criação, o que permite lançar instâncias futuras de forma mais rápida.
Após iniciar um VM, é possível utilizar as bibliotecas Hyperlight Rust para invocar diretamente uma função hospedada no VM. O código do host deve permanecer em um loop aguardando o término da função do VM, seja com sucesso ou falha, informando o resultado ou registrando um erro, respectivamente.
Utilizar Rust neste contexto é uma escolha adequada, pois é uma linguagem segura em relação à manipulação de memória, o que diminui a possibilidade de falhas de memória e vazamentos de buffer. Isso contribui para garantir a segurança tanto do host quanto do código de convidado. Essa característica é fundamental em um ambiente de nuvem nativa, no qual as instâncias de função são constantemente criadas e removidas, sem conexão entre elas.
Como criar um binário de convidado para o Hyperlight? É necessário empregar a biblioteca Hyperlight, que possui versões em C e Rust. É fundamental salientar que a utilização dessa biblioteca é obrigatória, portanto, não se inicie com a biblioteca padrão, mesmo que tenha sido a sua escolha habitual no passado. Além disso, existem outros requisitos essenciais, como um ponto de entrada específico para o seu código, para lidar com chamadas de função não registradas pelo host.
Uma informação importante é que o sistema host do aplicativo convidado não pode ser acessado, a menos que seja expressamente permitido pelo host. Mesmo quando essa opção é habilitada, os aplicativos convidados têm restrições rígidas sobre o que podem acessar, limitando a extensão e o tipo de dados que podem ser transmitidos. Se o conteúdo enviado não corresponder ao esperado, a chamada será recusada pelo anfitrião Hyperlight.
A segurança é um aspecto crucial na construção de um hospedeiro Hyperlight, conforme estabelecido pela Microsoft por meio de uma série de requisitos. Esses requisitos visam definir o papel do host como uma ferramenta para gerenciar o código dos hóspedes, proibindo a realização de atividades como a manipulação de arquivos, acesso a recursos de rede e utilização de ferramentas de criptografia. Considerando que um host pode ser responsável por diferentes funções para diferentes proprietários, tais restrições são essenciais para evitar exposição indevida de informações e serviços a possíveis ameaças. Em ambientes públicos, a vigilância é ainda mais importante, devido ao potencial de tentativas de ataques por parte de atores maliciosos.
Proposta para a economia em nuvem
Ainda é prematuro para avaliar totalmente o Hyperlight, mas há muitos aspectos positivos no que foi apresentado até o momento. A proposta de um host leve para funções é promissora, principalmente um que possa ser escalado para zero. Conforme é implementado no Azure e em outras plataformas de nuvem, é provável que tenha um impacto significativo na economia do desenvolvimento sem servidor nativo em nuvem, beneficiando tanto os usuários quanto os provedores de nuvem.
Subir automaticamente para zero com o menor atraso de início possível irá assegurar a redução de custos relacionados a funções inativas, ao mesmo tempo em que otimiza a utilização geral em centros de dados. Isso será benéfico para todos os envolvidos. Agora, só precisamos do tempo de execução da Hyperlight Functions, que oculta a complexidade subjacente do Web Assembly e nos permite escrever código na linguagem que preferirmos. Esse é o objetivo ao submeter o projeto para a Cloud Native Computing Foundation, encorajando os desenvolvedores a considerar a construção com o Hyperlight junto ao Kubernetes e Web Assembly.