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!

9 replies on “[JBoss World 2008] Isaac Christoffersen e Dan Santillo: Virtualization technologies”

Um aspecto muito interessante da virtualização é que com as “imagens” dos sistemas podemos recuperar rapidamente um serviço “crítico” que saiu do ar por algum motivo, isso tudo “automaticamente” através de scripts (com um nagios da vida)…

Ouvi dizer que é possível fazer os swap on the fly de máquinas virtuais entre as hospedeiras que rodam o sistema operacional vmware. Ex: vou transferir esse serviço pro hardware X pois o mesmo é mais potente…

Lá na empresa usávamos muito o vmware para rodar instâncias de diferentes servidores de aplicações/serviços… Era muito bacana e prático.

Além disso tudo a virtualização faz um bem danado ao meio ambiente 😉

Tirando rodar Ubuntu no macOSX eu acho o ‘boom’ da virtualização *muito* overhyped. Se estamos falandod e aplicações nativas (i.e. C/C++ em UNIX) eu até vejo grandes vantagens mas se tratando de aplicações que rodam num servidor de aplicações… tem algo errado aí. Por que eu não posso fazer deploy de múltiplas intâncias da mesma aplicação ou de várias aplicações diferentes no mesmo SO? Porque eu preciso de uma camada a mais de simulação?

Posso estar errado mas toda vez que vejo umc ase de virtualização ele é usado, basicamente, para esconder software ruim. Software que não consegue dividir um servidor com outro, software que não foi feito pensando em escalabilidade.

Eu sei que existem exceções e sei que existe legado mas sempre que eu vejo um anúncio da VMWare (que não o Fusion que eu uso e aprovo) acho que estamos tapando o sol com uma peneira. E uma peneira cara.

@Phillip

É, vc tem um ponto. Apesar de ser um pouquinho mais chatinho de colocar múltiplas instâncias de appserver em uma máquina, dá pra fazer tranquilo. Mas acho que ainda consigo ver algumas vantagens, como por exemplo, o fato de um app server não ter como ferrar o outro. Fora isso também é mais fácil de subir novas instâncias de servidores, ter maleabilidade, recuperar backup ou de desastres, etc.

Enfim, é mais um caso daqueles que não existe certo ou errado, o certo é avaliar cada situação.

Leave a Reply to Bruno Cancel reply

Your email address will not be published. Required fields are marked *