Estou procurando boas regras práticas para entender quando NÃO virtualizar uma máquina.
Por exemplo, eu sei que um processo totalmente vinculado à CPU com quase 100% de utilização provavelmente não é uma boa idéia para virtualizar, mas existe algum sentido em executar algo que aproveite a CPU na maioria das vezes uma "quantidade substancial" (digamos 40 ou 50%)?
Outro exemplo: se eu virtualizar 1000 máquinas, mesmo que sejam usadas de maneira leve ou moderada, provavelmente seria ruim executar tudo isso em um host com apenas 4 núcleos.
Alguém pode resumir dicas sobre virtualização com base na carga de trabalho da máquina ou no grande número de máquinas convidadas quando comparadas aos recursos do host?
Normalmente, eu virtualizo em hosts do Windows usando o VirtualBox ou VMWare, mas estou assumindo que essa é uma pergunta bastante genérica.
Respostas:
Subsistema de disco. Geralmente, esse é o recurso menos compartilhável. Memória, é claro, mas essa é aparente.
As limitações do subsistema de disco funcionam nos dois sentidos. Se um sistema usa muita E / S de disco, outros convidados ficam mais lentos. Se este hóspede estiver em produção, provavelmente precisará de uma resposta rápida às consultas da web. Isso pode ser muito frustrante e também um grande motivo para não alugar hardware virtual. Você pode minimizar esse problema usando discos dedicados.
Usar apenas 512 MB de memória em Convidados coloca todo o cache de disco no host. E não é igualmente dividido entre os convidados.
Não se preocupe com o IO da CPU. Dessa forma, a virtualização é muito eficiente, geralmente relacionada como apenas vários processos em execução no mesmo sistema. Raramente vejo sistemas multi-xeon rodando 100% na CPU.
editar: erros de digitação
fonte
Coisas que eu nunca colocaria em uma VM:
Qualquer coisa que use hardware específico que não possa ser virtualizado: geralmente gráficos, alguns módulos de segurança de hardware, qualquer coisa com drivers personalizados (drivers de rede para fins especiais, por exemplo).
Sistemas com problemas de licença. Algumas cobranças de software por CPU ou núcleo físico, não importa quão poucas você tenha alocado para a VM. Você seria atingido em uma auditoria se tivesse um software licenciado para um único núcleo em execução em uma VM em um servidor de 32 núcleos.
Coisas que eu desencorajaria colocar em uma VM:
Software que já faz um esforço para usar todos os recursos em hardware comum. Máquinas que trabalham como parte de um esforço de "big data", como o hadoop, geralmente são projetadas para rodar em metal puro.
Tudo o que será afinado para fazer uso dos recursos. Quando você realmente começa a ajustar um banco de dados, as VMs que competem por recursos realmente lançam uma chave no trabalho.
Qualquer coisa que já tenha um grande gargalo. Já não joga bem consigo mesmo, provavelmente não jogará bem com os outros.
Existem algumas coisas impressionantes para colocar em VMs:
Qualquer coisa que gaste bastante tempo ocioso. Os hosts de utilitários como correio e DNS têm dificuldade em gerar carga suficiente no hardware moderno para garantir servidores dedicados.
Aplicativos que não escalam bem (ou facilmente) sozinhos. O código legado frequentemente se enquadra nessa categoria. Se o aplicativo não se expandir para ocupar o servidor, use muitos pequenos servidores virtuais.
Projetos / aplicações que começam pequenos, mas crescem. É muito mais fácil adicionar recursos a uma VM (bem como migrar para um hardware maior e mais novo), em vez de iniciar no bare metal.
Além disso, não tenho certeza se você está exagerando em colocar um grande número de VMs em um único host, mas se estiver tentando uma grande proporção de VM: HW, convém considerar ESX, Xen, KVM. Você se sairá muito melhor do que usar VMware ou caixa virtual no Windows.
fonte
Existem dois pontos no desempenho da virtualização.
Em gargalos compartilhados, quem mais está no mesmo ferro? Se você está localizado em um ambiente virtualizado, é muito dependente do parceiro de hospedagem ser honesto com você.
Penso que a principal questão para o desempenho bruto (principalmente a interatividade) é perguntar quais partes do sistema de virtualização são emuladas. Isso difere dependendo da configuração. Disco e rede são os candidatos típicos. Como regra geral, a emulação dobra o "custo" de desempenho de executar uma ação, portanto, qualquer tempo de latência de hardware deve ser contado duas vezes e qualquer número de thruput deve ser dividido pela metade.
fonte
Por fim, qualquer carga de alto desempenho não deve ser virtualizada. As revisões de desempenho da virtualização não são triviais. Veja os resultados dos meus testes aqui:
http://www.altechnative.net/2012/08/04/virtual-performance-part-1-vmware/
OTOH, se você deseja consolidar várias máquinas que estão ociosas o tempo todo, a virtualização é o caminho a seguir.
fonte
Boa resposta do anttiR.
Além disso, sistemas de tempo crítico. Acabei de descobrir que a podridão do Hyper-V centavo (vm ficando lentamente para trás, todos os SOs modernos nas vm fazem isso, ressincronizam com frequência) não está funcionando muito bem com alguns aplicativos críticos que estou desenvolvendo. Além disso, vou usar "muita" CPU lá e planejando obter uma máquina de 12 núcleos apenas para esse aplicativo em produção.
fonte