segunda-feira, 12 de dezembro de 2011

Virtualização de Sistemas

Hardware/Requisitos:
Com o lançamento de processadores cada vez mais rápidos e o uso de volumes cada vez maiores de memória RAM, passou a fazer cada vez mais sentido agrupar diversos servidores em uma única máquina, utilizando algum sistema de virtualização.
A virtualização é obtida inserindo uma camada intermediária entre o sistema rodando dentro da máquina virtual e o hardware da máquina, simulando um computador completo. O software de virtualização fica então responsável por gerenciar todos os recursos do hardware, incluindo interrupções e endereços de memória, de forma que os sistemas dentro das máquinas virtuais (virtual machines, ou simplesmente VMs) possam trabalhar como se cada um tivesse uma máquina inteira reservada para si.
O sistema principal neste caso passa a ser chamado de "host" (hospedeiro) e os sistemas que estão rodando dentro da máquina virtual são chamados de "guests" (convidados). Cada um deles acha que tem um PC completo para si, enquanto que na verdade está rodando dentro de uma "matrix", na máquina virtual.
Um sistema de virtualização permite dividir um único servidor em diversos servidores virtuais independentes, sendo que cada um pode rodar um sistema operacional diferente. Os servidores virtuais compartilham os recursos do servidor real, dentro dos limites de uso de memória e de espaço em disco estabelecidos por você.
Além de permitir reduzir custos, usar máquinas virtuais oferece também vantagens do ponto de vista da administração. Como os arquivos referentes a cada máquina virtual são concentrados em uma única pasta, é fácil fazer backups regulares, sem falar no fato de que as máquinas virtuais podem ser transferidas rapidamente para um novo servidor caso necessário. Com isso, você tem liberdade para transferir um servidor virtual que passou a receber um volume maior de requisições para outra máquina com mais recursos, por exemplo.
Naturalmente, este trabalho de simular um PC completo e ainda por cima com um bom desempenho não é simples, e por isso existe sempre um certo overhead. Por outro lado, com várias máquinas virtuais rodando simultaneamente, os recursos da máquina acabam sendo melhor aproveitados, já que elas acabam usando processamento e outros recursos de forma alternada, de acordo com as flutuações na carga de trabalho de cada uma. Um determinado servidor virtual pode receber muitas requisições no horário do almoço, enquanto outro é usado predominantemente no final da tarde, por exemplo.
Além disso, o uso de virtualização permite agrupar diversos servidores de baixa demanda em uma única máquina, reduzindo os custos. Se você prefere manter seu servidor DNS ou seu servidor de e-mail em uma máquina separada por questões de segurança, por exemplo, pode muito bem utilizar uma máquina virtual em vez de utilizar um segundo servidor dedicado.
Outro uso comum é em situações onde você precisa de um sistema operacional específico, ou de uma distribuição Linux específica para rodar um determinado software. Em vez de migrar seu servidor principal para a distribuição em questão, ou instalar um segundo servidor apenas para ela, você pode usar uma máquina virtual.
O mercado de soluções de virtualização cresceu bastante nos últimos anos, o que levou ao aparecimento de diversas soluções, tanto open-source quanto comerciais. Quatro exemplos de softwares que se destacam são o VMware, o Xen, o Qemu e o Virtuozzo, que trabalham de forma ligeiramente diferente, mas com grandes diferenças práticas.
O VMware usa o conceito clássico de virtualização, tentando sempre que possível converter os comandos usados pelo sistema dentro da máquina virtual em comandos que o sistema host entenda e execute diretamente. Isso se aplica quando é necessário transmitir dados através da placa de rede, exibir mensagens no vídeo ou executar instruções do processador, por exemplo. Ele interpreta e converte instruções o mínimo possível, o que faz com que o sistema dentro da máquina virtual rode com um desempenho muito similar ao desempenho real da máquina. Embora seja um aplicativo comercial, o VMware possui duas versões gratuitas, o VMware Player e o VMware Server, tema principal deste capítulo. Ambas estão disponíveis nohttp://www.vmware.com.
Embora relativamente desconhecido entre os usuários de desktops, o Xen é bastante utilizado em servidores. Ele utiliza uma idéia diferente, a paravirtualização, que consiste em dividir de forma transparente os recursos do hardware, permitindo que o sistema guest rode com uma redução de performance muito pequena (menos de 5% em muitos casos). O maior problema é que para rodar dentro do Xen é necessário que o sistema guest seja modificado; não é possível rodar qualquer sistema diretamente, como no caso do VMware. Isto não é um grande problema no caso das distribuições Linux (onde é necessário apenas utilizar um Kernel especialmente compilado), mas dificulta o uso do Windows e outros sistemas de código fechado dentro das máquinas virtuais.
O Xen é mais complicado de configurar do que o VMware, o que limita um pouco seu público-alvo, mesmo quando falamos em servidores. Mesmo assim, diversas distribuições tem passado a incluir o Xen na sua árvore de pacotes, como no caso do CentOS, facilitando bastante a instalação. A página do projeto é a http://www.xensource.com/.
Diferente do VMware e do Xen, o Qemu é um emulador, que funciona de forma similar aos emuladores de consoles antigos, que usamos para rodar jogos de SNES e Mega-Drive no PC. Em vez de utilizar um sistema de virtualização, ele tenta processar todas as instruções, o que acaba demorando mais tempo e fazendo com que a performance seja menor. Em geral, o VMware consegue fazer com que o sistema guest rode com de 70 a 90% do desempenho que teria se estivesse rodando diretamente, enquanto que o Qemu obtém de 5 a 10%.
O Qemu possui um módulo adicional, o Kqemu, que faz  sexo com que ele passe a funcionar de forma mais similar ao VMware, virtualizando as instruções básicas do processador, ao invés de emular tudo. O Kqemu melhora consideravelmente o desempenho do Qemu, mas, ainda assim, o deixa bem atrás do VMware em questão de desempenho.
Inicialmente, o Qemu era apenas um projeto menor, que não tinha como concorrer com gigantes como o VMware, mas, recentemente, ele passou a ganhar mais destaque, com o desenvolvimento do KVM, um sistema de virtualização incluído diretamente no Kernel, disponível a partir da versão 2.6.20, que trabalha em conjunto com ele. Por ser uma solução open-source, o KVM pode vir a evoluir ao longo dos próximos anos, a ponto de começar a concorrer com o Xen e o VMware.
Temos também o Virtuozzo, um sistema comercial que tem sido bastante usado em serviços de hospedagem para a criação de virtual private servers, ou seja, máquinas virtuais oferecidas como uma opção mais barata para quem quer um servidor dedicado pagando pouco. Em muitos datacenters, você pode incluir uma instalação do Virtuozzo em seu servidor dedicado, pagando um valor extra pela licença de uso.
Diferente do VMware e do Xen, que utilizam sistemas de virtualização a nível de hardware, simulando todo o sistema, incluindo o hardware, o Virtuozzo utiliza um sistema mais leve de virtualização, que opera a nível de sistema operacional, criando "containers", com diversas instâncias do mesmo sistema operacional, cada uma com sua própria configuração de rede, lista de usuários, tabela de processos, arquivos e bibliotecas.
Embora cada container não seja uma máquina virtual "completa", já que componentes do sistema operacional principal são compartilhados e o acesso ao hardware é limitado, eles realmente se comportam como sistemas separados, de forma que, para fins práticos, as limitações são muitas vezes compensadas pela redução no overhead.

0 comentários:

Postar um comentário

Share

Twitter Delicious Facebook Digg Stumbleupon Favorites More