Ontem conversamos sobre desempenho e capacidade de restauração e percebi quantas coisas boas um ambiente de virtualização pode trazer para mim - mas como sou um pouco cético em relação ao desempenho, estou perguntando aqui. Pode ser um pouco específico do GIS, mas os usuários do gis disseram que é específico do banco de dados... ;)
Um servidor de banco de dados sofrerá perda severa de desempenho por meio da virtualização? Não entendo a tecnologia até o último detalhe, mas de alguma forma é mais uma 'caixa preta', que precisa ser processada por hardware. Também o acesso ao disco, com todos os truques que o PostGIS nos fornece, será concedido? (agrupamento, índice, etc.) - agrupamento fragmentado é como nenhum agrupamento!
A grande vantagem é a manutenção e escalabilidade. Em caso de mau funcionamento de hardware grave, posso migrar em minutos ou até mesmo em tempo real para outra máquina física.
Quem tem experiência e pode me indicar bons sites ou literatura sobre esse assunto? Lembro-me de algumas coisas dos últimos fossgis e alguns benchmarks internos no ESXi e servidores nativos e, de alguma forma, não consigo decidir se é bom ou não.
Esta é uma daquelas perguntas "Depende".
O desempenho depende de recursos, contenção, configuração e mecanismo da VM
Host de VM não contido : se você fornecer recursos adequados a uma VM com armazenamento SAN ou anexado localmente de alto desempenho, baixa contenção de recursos de CPU, sem superalocação ou contenção de memória, acesso rápido à rede dedicada etc. motor VM ajustado. Os resultados exatos dependerão do sistema VM usado, de como você fornece acesso aos recursos e muito mais.
Você pode obter ótimos resultados em planos VPS de ponta com taxas de contenção baixas garantidas e bom armazenamento.
Host de VM com recursos limitados/sem recursos : se você colocá-lo na mesma caixa que três outros servidores de aplicativos e um servidor de arquivos, todos os quais compartilham a mesma matriz RAID 5 e estão brigando por RAM e CPU, ele terá um desempenho terrível.
Se você colocá-lo em um host VPS barato e supercomprometido em algum lugar, obterá resultados igualmente ruins. Se metade da sua RAM for realmente trocada no disco do host, nada será rápido.
"Na nuvem" : se você colocá-lo no EC2, Azure ou qualquer outro, o desempenho dependerá das taxas de contenção do serviço, do armazenamento que estão usando, do que outros usuários estão fazendo, da qualidade de sua QoS e muito mais.
Pelo menos para o EC2, o subsistema de disco tem um desempenho horrível (em VMs padrão, pelo menos em 2012), portanto, só funciona bem se você tiver RAM suficiente para armazenar em cache pelo menos seus índices. A Amazon introduziu novas instâncias de alto I/O que podem ser melhores, mas ainda não vi benchmarks.
Normalmente, você obterá algo intermediário se escolher hospedagem levemente disputada com discos decentes, como hosts de servidor privado virtual de ponta e alta qualidade.
Garantias diretas x VM
Re garantias específicas sobre itens como ordenação de arquivos, que dependem da configuração da sua VM. Você está usando VMs apoiadas por arquivos? Por dispositivos de blocos brutos? Por uma SAN iSCSI? Também depende de como seu mecanismo VM está configurado e exatamente qual sistema VM você está usando.
Melhor caso
Na melhor das hipóteses - um sistema com todos os drivers paravirt, VT-x, VT-IO, acesso incontido aos recursos do host, etc - você provavelmente obterá desempenho bem próximo do host. Se você fornecer aos dispositivos de bloco direto da VM arquivos não host para armazenamento, obterá a ordenação adequada dos arquivos sem fragmentação do lado do host. A proximidade exata dependerá do seu hardware, host e convidado, configuração e muito mais; compare-o com sua carga de trabalho .
fsync () e durabilidade de gravação
Uma coisa a observar com as VMs é que você deve garantir que o sistema de disco diga a verdade sobre fsync(). Uma maneira muito fácil de tornar as VMs muito mais rápidas é ignorar as solicitações fsync(). Tudo bem até que o host da VM trave ou perca energia, momento em que seus bancos de dados provavelmente estarão irremediavelmente corrompidos. O host da VM deve atender às solicitações fsync() respeitando os comandos de liberação de disco do sistema operacional convidado ou deve oferecer cache de gravação não volátil que não desaparecerá se houver perda de energia. Algumas SANs usam SSDs para isso, a maioria dos outros sistemas usa memória cache do controlador RAID com bateria. Se sua VM puder processar mais do que algumas centenas de transações por segundo, é provável que esteja ignorando o fsync ou o armazenamento em cache de gravação, e você deve descobrir qual antes de consumir seus dados.
Mas por que?
(Atualizado): Conforme observado por Chris Travers, por que você deveria virtualizar servidores de banco de dados? Por que não lidar com replicação, pulsação e failover no nível do servidor de banco de dados, migrar por meio da promoção de réplicas e obter o desempenho total do bare metal?
Escrevi esta resposta original com a mentalidade de que uma VM era um dado, e a questão era como obter os melhores resultados. A melhor virtualização para um servidor de banco de dados ainda é, na minha opinião, sem virtualização. Dito isso, gerenciei apenas sites relativamente pequenos.
Em geral, tenho dúvidas sobre servidores de banco de dados em uma VM. Não duvido que seja possível de acordo com a resposta anterior, mas me parece uma perda de complexidade, especialmente para o PostgreSQL, onde você pode executar vários clusters no mesmo sistema sem virtualização, desde que tenha endereços IP ou portas diferentes.
O que as pessoas falam no lado profissional é que você pode consolidar servidores. Isso é mais útil em outros sistemas RDBMS em que não é possível executar várias instâncias no mesmo servidor. Em alguns casos, pode oferecer alguma flexibilidade com desempenho. Para aplicativos de baixo custo, particularmente, esses podem ser benefícios atraentes.
No entanto, isso deve ser ponderado em relação ao fato de que uma VM é basicamente uma caixa preta e, se você estiver executando a nuvem em particular, terá uma falta de controle sobre o hardware. Isso significa que a E/S de disco, à qual esses servidores são particularmente sensíveis, geralmente está fora de seu controle. É possível mitigar isso com armazenamento em rede.
Portanto, a maneira como vejo é esta: a virtualização, se resolver um problema específico que você está tendo, pode ser uma solução útil se você já estiver em um ambiente que lhe dê controle sobre a E/S de disco para cada cluster. Porém, na maioria das vezes é uma solução em busca de um problema e não uma vitória da complexidade. Se você está fazendo essa pergunta, não é a solução certa para você.