Princípios de virtualização
Last updated
Last updated
A palavra "virtual" é usada para se referir a algo que não existe na realidade, algo abstrato, que não é palpável, algo em potencial. Exemplo: realidade virtual, loja virtual, "é algo virtual".
Virtualização é o ato de criar uma versão virtual de algo. No contexto da computação é o ato de criar uma versão virtual de algum recurso computacional (processador, memória, disco, chipset, placa de rede).
Outra definição de virtualização é o ato de criar múltiplos recursos virtuais a partir de um único recurso físico. Ou também criar um recurso virtual a partir de vários recursos físicos (o que faz sentido quando se trata da virtualização de storages).
Historicamente, o primeiro caso de virtualização aconteceu com o IBM CP-67/CMS na década de 60, que era um sistema que permitia a criação de múltiplos ambientes isolados sobre um mesmo mainframe. Mas com o passar do tempo, os mainframes caíram em popularidade abrindo espaço para a ascensão de servidores e workstations de menor porte, mas mais baratos.
No curto prazo, era vantajoso para as organizações adquirir novos servidores para a implantação de novos serviços. No longo prazo esse processo se tornou um pesadelo, dando origem aos seguintes problemas:
Proliferação de servidores: para oferecer muitos serviços você tinha que possuir muitos servidores. Muitas organizações não tinham mais espaço físico para acomodar tantas máquinas (mesmo tendo a necessidade de expandir mais).
Problemas de gerenciamento da infraestrutura: caso um servidor precisasse de manutenção ou sofresse alguma pane, o restabelecimento dos serviços ofertados por ele se tornava dificultoso. Além disto, para reaproveitar recursos, muitas empresas subiam diferentes serviços em um mesmo servidor. O problema é que, ás vezes, um serviço poderia conflitar com a configuração de outro (conflito de portas TCP/UDP, versão de biblioteca, e etc). Outro problema de gerenciamento era a lentidão no provisionamento de cada novo serviço (pois envolvia a aquisição de mais máquinas, instalação das mesmas em racks, ajustes de cabeamento, instalação e configuração de softwares, e etc).
Alto consumo de energia elétrica: manter muitos servidores ligados já consumia energia significativamente, mas lidar com o calor produzido por todas essas máquinas exigia sistemas de arrefecimento que consomem mais energia ainda.
Baixo aproveitamento dos recursos computacionais: em média cada servidor possuia cerca 70% de ociosidade. Com isso, as empresas não estavam aproveitando totalmente o investimento feito na aquisição dos servidores.
A virtualização veio como solução para a otimização dos recursos, permitindo a execução de múltiplos serviços em ambientes isolados em um mesmo servidor físico, diminuindo a ociosidade das máquinas e, por consequência, consumindo menos espaço físico, menos energia elétrica, e melhorando a gestão da infraestrutura (aumentando a agilidade no provisionamento de novos serviços com a replicação de VMs, facilitando o ajuste de consumo de recursos computacionais das VMs, viabilizando a transferência de VMs de um host físico para outro, e etc).
Em 1998, a VMware surgiu como pioneira na oferta de soluções de virtualização, dando início a um novo mercado ativo até os dias atuais (e também abrindo espaço para o surgimento de outras soluções proprietárias e open source). Hoje, vários modelos de negócios se sustentam sobre a virtualização (como a IaaS, PaaS, e SaaS).
"Virtualização" é um tema que deixou de ser novidade a muito tempo. Mas ela está presente em vários segmentos do mundo da TI: em pequenas, médias, e grandes empresas criando máquinas virtuais para os mais diversos serviços, em provedores de cloud, rodando como nodes de clusters kubernetes (ou outros orquestradores de containers), servindo de base para plataformas de serverless, e etc.
Existem vários tipos de virtualização. A mais conhecida é a "virtualização de hardware" que permite o provisionamento de máquinas virtuais. As primeiras soluções de virtualização de hardware eram muito lentas por se basear inteiramente em software (com o uso de técnicas como trap-and-emulate para tratamento das operações de I/O da VM, e binary translation para a execução das instruções de forma isolada) permitindo a execução de todos os componentes de um sistema operacional virtualizado de forma segregada das outras VMs e dos recursos do sistema operacional bare-metal.
Uma primeira tentativa de otimização de virtualização que funcionou relativamente bem foi a paravirtualização. Nela, ao invés de usar binary translation, as VMs eram processadas diretamente pelo processador real da máquina. E ao invés de usar técnicas de trap-and-emulate, as operações de I/O ocorriam via chamadas diretas a funções do hypervisor. Mas uma das principais desvantagens da paravirtualização era a necessidade do kernel da VM estar "ciente" de que estava sendo virtualizado, ou seja, a necessidade do kernel da VM ser modificado para trabalhar com um hypervisor específico (como o Xen).
Para suprir a necessidade de provisionar VMs totalmente virtualizadas sem nenhuma modificação e com performance próxima a um processamento nativo (bare-metal), várias técnicas de hardware foram surgindo, como: instruções de virtualização do processador (Intel VMX, AMD SVM), Extend Page Tables (EPT), I/O MMU (Intel VT-d e AMD-Vi), SR-IOV, e APICv.
Hoje as máquinas virtuais oferecem boa performance e podem ter sua utilização enriquecida junto com outros tipos de virtualização, como a virtualização de storage e de rede.