Categories
Engenharia de software Eventos

[JBoss World 2008] Isaac Christoffersen e Dan Santillo: Virtualization technologies

Há algum tempo eu queria escrever sobre virtualização. Essa palestra do Isaac Christoffersen e do Dan Santillo, da Booz Allen Hamilton, foi o impulso que faltava.

Como esse é um assunto que muita gente não conhece, vou colar aqui a definição da wikipedia sobre virtualização:

“[Virtualization is] a technique for hiding the physical characteristics of computing resources from the way in which other systems, applications, or end users interact with those resources. This includes making a single physical resource (such as a server, an operating system, an application, or storage device) appear to function as multiple logical resources; or it can include making multiple physical resources (such as storage devices or servers) appear as a single logical resource.”

Agora, falando em português curto e grosso e transportando para o nosso contexto (aplicações web): virtualização seria basicamente fazer com que as aplicações que rodam em clusters de várias máquinas passem a rodar em clusters de menos máquinas, onde em cada uma delas teria várias instâncias de sistemas operacionais. Ou seja, rodar vários sistemas operacionais em uma mesma máquina em paralelo. Com isso você mantêm o número de instâncias da aplicação, porém usando menos máquinas. Para isso pode-se usar VMWare ou Xen, por exemplo.

Muitas empresas hoje gastam milhões de dólares com hardware, como uma solução de contorno para software de qualidade ruim. E quando se gasta milhões comprando, naturalmente se gasta vários outros milhões mantendo essa infraestrutura, e não dá para crescer. Muitas vezes o hardware é super-dimensionado, e fica “90% idle” na maior parte do tempo.

As aplicações cliente-servidor de antigamente muitas vezes precisavam apenas de 1 servidor de banco de dados para funcionar (só para centralizar os dados, na verdade). Nos dias de hoje, com N-camadas e arquiteturas baseadas em SOA, as aplicações podem ser resultado da composição de dezenas de serviços, e cada um desses serviços pode estar instalado em dezenas de máquinas. Resumindo: hoje em dia temos aplicações que rodam em centenas, talvez milhares de máquinas.

E onde que a virtualização se encaixa nisso tudo? Vamos lá, vamos imaginar um cenário. Imagine uma aplicação que roda em um cluster de 20 máquinas, e que nos horários de pico a utilização de CPU chega a no máximo 5% ou 10%. Ou seja, você tem 90% de máquina sobrando o tempo inteiro! Com virtualização, uma estratégia poderia ser fazer com que esse mesmo cluster funcionasse em 5 máquinas, e cada máquina teria 4 instâncias de sistema operacional. Ou seja, cada sistema operacional ficaria com 25% da máquina original, que como vimos, é mais do que o dobro e o suficiente para ela funcionar. Resumindo: mesmo resultado e 1/4 dos recursos necessários.

Temos várias vantagens com essa abordagem:

  • Corte de custos.
  • Maior aproveitamento dos recursos existentes.
  • Liberação de recursos para outras aplicações que podem estar precisando mais.
  • Melhorar os planos de recuperação de desastre e backup, mantendo instâncias de aplicação prontas para funcionar em qualquer lugar.
  • Maior maleabilidade de recursos: se houver um pico em uma ou outra aplicação, os recursos podem ser gerenciados (até via script) para atender a demanda momentânea.
  • Redução do espaço físico necessário para os datacenters, bem como redução de consumo de energia e redução de custos para resfriamento.
  • Etc.

Sou apenas um curioso e não um especialista nesse assunto, mas com certeza essa é uma área que vai crescer muito nos próximos anos.

No nosso laboratório na Globo.com, já fazemos experiências com virtualização há algum tempo e temos inclusive deploys virtualizados de algumas aplicações para teste. Agora precisamos colocar para funcionar!