O que o ZeroVM virtualiza?

12

Estou com um pouco de dificuldade para envolver minha cabeça no ZeroVM .

Digamos que eu queira executar o Wordpress. Uma opção é conceder um servidor virtual hospedado executando VMWare, Virtualbox, Xen, CoreOS ou algo semelhante. Nesse caso, o que está sendo virtualizado é o servidor e seu hardware. Depois que o servidor virtual é provisionado, eu posso fazer o SSH para ele, iniciar e parar serviços, reiniciar a máquina etc.

As coisas que li online dizem que o ZeroVM virtualiza o aplicativo, mas não entendo o que isso significa. O ZeroVM está fornecendo um contêiner semelhante ao Docker ?

Continuando meu exemplo acima, como eu usaria o ZeroVM para executar o Wordpress? Que benefícios isso proporcionaria?

Vamos estender meu exemplo do Wordpress para um ambiente de hospedagem compartilhada.

A home page do ZeroVM diz:

Cada solicitação para um aplicativo ZeroVM, ou zapp, resulta na geração de uma instância independente. Cada instância é isolada e segura, girando em menos de 5 milissegundos e é destruída após o término da solicitação. A velocidade do ZeroVM vem de cada instância, virtualizando apenas o necessário para executar um único processo.

Isso significa que cada solicitação para o aplicativo ZeroVM gera um novo processo? O que acontece se você estiver executando mais de um aplicativo ZeroVM em um servidor? Como as solicitações seriam roteadas para o aplicativo correto?

braveterry
fonte

Respostas:

9

Boa pergunta! Trabalho na equipe ZeroVM e espero poder ajudar a esclarecer as coisas!

O ZeroVM está fornecendo um contêiner semelhante ao Docker?

Não, na verdade não. O Docker usa o LXC e outros recursos do kernel para fornecer um ambiente em área restrita. O ZeroVM é executado inteiramente no espaço do usuário e coloca em sandbox um único aplicativo.

Resumidamente, o ZeroVM funciona primeiro validando o aplicativo a ser executado e, em seguida, simplesmente executando-o. Quando executado, o aplicativo é executado basicamente sem custos adicionais - não há máquina virtual por trás dele.

Para validar um aplicativo, ele deve ser compilado em uma forma especial de código de máquina x86. Este formulário especial possui a propriedade agradável de que pode ser estaticamente verificado como "seguro". Entre outras coisas, "seguro" significa que o código não vai pular para endereços fora de um determinado segmento de memória fornecido pelo ZeroVM. O programa também não pode fazer as chamadas normais do sistema, mas apenas uma interface syscall muito estreita fornecida pelo ZeroVM. Essa validação é obtida no projeto Native Client do Google .

Como eu usaria o ZeroVM para executar o Wordpress? Que benefícios isso proporcionaria?

Em princípio, você poderia compilar de forma cruzada o programa C que é o intérprete PHP. O ZeroVM poderia então iniciar o intérprete PHP na sandbox e alimentar os arquivos PHP que compõem o WordPress. O ZeroVM fornece um sistema de arquivos na memória somente leitura e isso pode ser usado para ler um banco de dados SQLite. Isso daria a você um site WordPress somente leitura - não muito emocionante :-)

No entanto, a meu ver, esse não é o principal caso de uso do ZerovM. Os aplicativos pesados ​​de banco de dados existentes precisam ser reescritos para uso com o ZeroVM. O ZeroVM é mais voltado para sistemas escalonáveis ​​em massa, nos quais você deseja processar muitos itens de dados em paralelo.

Imagine que você possui 1.000.000 de e-mails que você precisa pesquisar. Os e-mails são armazenados em um armazenamento em bloco, como o OpenStack Swift ou o Amazon S3 . Isso significa que os arquivos físicos são armazenados em algum número de servidores de armazenamento. Tradicionalmente, você precisaria puxar todo o correio para algum número de nós de computação para procurá-los. Com o ZeroVM e sua integração com o Swift , você pode enviar o código para os dados . Isso é possível porque o código é pequeno (alguns megabytes) comparado a uma imagem de máquina virtual volumosa e porque é seguro executar código não confiável na caixa de proteção ZeroVM.

Portanto, o ZeroVM é destinado a arquiteturas altamente escaláveis, nas quais cada solicitação opera em diferentes partes de dados.

Para um site WordPress, isso pode significar que você deve armazenar cada postagem do blog em uma parte separada dos dados e ter uma instância dedicada do ZeroVM responsável por cada postagem. Atualmente, o sistema de arquivos é somente leitura, mas há planos para torná-lo de leitura e gravação e a instância do ZeroVM responsável por uma determinada postagem no blog pode lidar com coisas como comentários. Você precisaria de um balanceador de carga na frente capaz de rotear o tráfego adequadamente. O resultado é uma arquitetura muito diferente da atual do WordPress, mas mais escalável. Atualmente, implementar isso é deixado como um exercício para o leitor.

Martin Geisler
fonte
4

Parece ser a borda do sangramento. A Rackspace está pesquisando no LXC por ser 'insegura' em comparação, mas até que os documentos técnicos apareçam sobre o assunto, eu continuarei julgando.

  • O ZeroVM está fornecendo um contêiner semelhante ao Docker?

From: Info World "Algumas comparações óbvias são possíveis entre o ZeroVM e um projeto como o Docker, mas as intenções são um pouco diferentes. O Docker trata de empacotamento para implantação em vários ambientes. O ZeroVM é mais uma maneira de fornecer aplicativos para virtualização de aplicativos de maneira leve em um determinado ambiente em que uma solução completa de VM seria excessiva e não seria realmente necessária ".

  • Como eu usaria o ZeroVM para executar o Wordpress?

Presumivelmente, você precisaria que o apache fosse compilado para o ZeroVM. Não tenho certeza de quanto da base de código do Wordpress será quebrada nessas condições.

  • Quais são os benefícios?

O departamento de marketing da Rackspace fará o melhor caso possível: Aqui

  • Que desafios enfrentarei? (Adicionado para benefício de futuros leitores)

O software / plataforma é de ponta, portanto todas as tentativas e dificuldades associadas à execução de software de ponta são aplicáveis. (Incluindo a falta de uma grande base de usuários para suporte). É também uma nova " Plataforma " . Os desenvolvedores de software estão se acostumando a lidar com plataformas virtualizadas ... mas essa é uma nova geração de virtualização acima e além do hardware (VMWare. OracleVM, HyperV) e virtualização de kernel (OpenVZ). Não se surpreenda se nada funcionar como o esperado no início do jogo.

Daniel Widrick
fonte
2

Continuando meu exemplo acima, como eu usaria o ZeroVM para executar o Wordpress? Que benefícios isso proporcionaria?

O ZeroVM é essencialmente uma plataforma para a construção de PaaS. Portanto, a pergunta acima tem pouco significado no "mundo ZeroVM". Mas vamos supor que alguém tenha instalado a infraestrutura ZeroVM para você (chamará de "Provedor"). Em seguida, você pode criar seu próprio PaaS ou SaaS sobre essa infraestrutura. No caso do WordPress: Provider, você pode executar qualquer código na infraestrutura do Provedor, você pode executar o WordPress quando o código estiver em execução - você paga por isso. Quando seu código não está sendo executado - você não paga. Ou seja, quando alguém abre uma página do wordpress, você paga pelo pedido, após a resposta ser enviada ao usuário - você para de pagar qualquer coisa. Mais do que isso, como cada instância do ZeroVM atenderá uma solicitação, seu site WordPress precisa essencialmente apenas servir uma página para um usuário. E então eu argumentaria que você realmente não precisa de "WordPress", pois o WordPress agora é uma interface PHP para o banco de dados MySQL e, no caso de um usuário e uma solicitação, você não precisa de nenhum banco de dados centralizado. E assim por diante.

Isso significa que cada solicitação para o aplicativo ZeroVM gera um novo processo?

Sim e não. Depende de como você deseja usá-lo. Se cada solicitação for um aplicativo totalmente diferente, com base de código totalmente diferente - então sim, você precisará de um processo totalmente novo. Mas se cada solicitação for uma chamada para o aplicativo da Web PHP ou WSGI, o ZeroVM poderá atuar como um "daemon" atendendo solicitações muito mais rapidamente, economizando o tempo de configuração da plataforma (configurando sistema de arquivos + python + wsgi no caso do aplicativo WSGI, por exemplo )

Como as solicitações seriam roteadas para o aplicativo correto?

No momento, a infraestrutura está integrada ao armazenamento de objetos Swift . A solicitação de objeto Swift acionará a execução de um pedaço de código específico. Ou o POST para URL específico acionará a execução da carga útil da solicitação POST. É claro que qualquer outro tipo de integração é possível, por exemplo, em um servidor Web ou em uma fila distribuída.

user64204
fonte