All or… Something!
In the past few years I’ve been playing with and occasionally preaching virtualization but is it really worth it. Companies like VMWare would have you believe so, I get the feeling they stand to profit from your decision though. In my personal opinion it’s a mixed bag. There are several reasons to virtualize and there are several reasons not to. In this post I will explore some of the benefits and shortcomings of virtualization.
It all comes down to your application needs. For instance a home user with a Mac or Linux box might consider using VMWare or some other product such as Oracle (Sun) Virtual Box to run a Windows environment. Even this solution presents certain issues that may be avoided using a dual boot system. In this situation it all comes down to what your performance and application requirements are. If you only need to run another virtual machine for a single application that doesn’t require large amounts of RAM, Video Memory, or CPU time such as the Windows Server Administration Tool Pack or Microsoft Excel with VBA Support (not available in the Mac version of Excel) then a Virtual Machine might be perfect for you. What if you’re running something with a bit more of a kick though; what if you’re running that new computer game that’s only available on PC? The virtual machine is limited by the hypervisor, other applications, the host OS, and lastly the physical machine. With each limitation comes another degradation of performance. You can offset this by getting yourself an incredibly powerful host machine with plenty of resources to spare, I’m sure the good folks at NewEgg.com would be happy to help, but why not just dual boot your machine. Boot-loaders like GRUB and Boot Camp make it easy to select your OS at startup and even define a default OS that boots unless there is some for of user interaction. You get all the functionality of the physical hardware available to every operating system on the machine and all at the cost of a little bit of HD space that would have been consumed by the VM image anyways. The downside, you have to restart every time you want to switch systems, which can make multitasking difficult.
Lets take a look at something a bit more corporate though. Now we’re running applications that require high quality of service, at the lowest possible cost, with high security. We’ll start by focusing on quality of service as it branches off into the other areas of interest. QoS is composed of several parts, application availability, disaster recovery, and user experience. Virtual environments allow several images to run on a single piece of hardware. From the availability standpoint this is no different from individual machines running on their own hardware. The benefits here are in the apparent cost savings. First and foremost you’re creating a smaller physical footprint in your data center. Space costs money and the smaller amount of space used the better off you are. You’re also using a smaller amount of power; the single physical machine is being utilized at a higher capacity so your power consumption per CPU cycle is lower. And less power means less heat production, fewer physical machines to cool means a lower cost in environmental controls. The question that pops up in my mind is simple; the application with the biggest footprint in most setups is going to be the OS, so why duplicate it so many times? Sure, sure you’re using your CPU more efficiently by running it at a higher percentage of it’s capacity but you’re going to need more memory and CPU power to support the multiple OS’s you may be running, especially if they have a larger footprint like Windows. Why can’t we run all of our applications on a single OS, without the VMs?
Portability and disaster recovery are a bit of an issue when answering this question. By having all of your systems running in VM’s they can easily be migrated from physical host to physical host, copies can be made if the demand increases, and in the event of a physical host failure they can be instantly transferred to another physical host that may or may not be running on the same hardware. As long as proper backups are made of the VM images this isn’t an issue. You also have to consider specific application needs, some software packages only run within a Windows environment like Share Point while some system administrators would much rather (maybe even need to) run their web services on a LAMP stack. This takes us back to the cost issue (two physical machines vs. one and all the issues that go with it) and it’s not necessarily a clear-cut answer. But where does security come into all of this?
Well let’s say in a perfect world that every application we needed to run could be run in a single OS environment. Now my choice is, do I set up several virtual machines running the same OS with different applications to meet all my needs or do I run one host OS with all of the applications running on it. What happens if one of those applications becomes compromised in a single OS system? Assuming the compromise is something that wouldn’t normally affect the other applications (such as a password leak) then we may have compromised our entire system by putting all of our eggs into one basket (sorry, applications into one OS environment; I tried to get creative). If properly configured, system administrators can jail their machines to a certain point but if the host operating system fails for any reason all of the applications fail.
So far I seem to be leaning a bit more towards the concept of virtualization but here’s where things really start to get sticky. Let’s talk a bit about application performance. The overall user experience is what really led me to write this post; while I was working on a server based Java application that I had set up in it’s own VM on one of my ESXi servers I noticed that even tho I was running the VM well above it’s necessary resource allocations the Java application was still eating through resources and crashing on user connections. In a production environment this isn’t a good thing (no worries it wasn’t production, not the point though). I set up a physical system with all of the same application settings to see what it was that would make this application run in a way that would allow for a reasonable user experience and I found that the Java application was using over 50% of 4 CPU’s and a staggering amount of memory when running on the physical host. While this told me that the application may be an issue running in any large scale deployment it also told me that maybe virtualization wasn’t going to work for this specific configuration. Putting this on a virtual machine would require so much CPU time that I wouldn’t be able to run any other VM reliably on that host. This to me would be a huge waste of resources.
In the end I’d have to say whatever you do really depends on your applications specific needs. I know I didn’t cover every possible angle of virtualization but hopefully I got you thinking; is virtualization necessary or is it more like Pogs in the 4th grade? Personally I would look into the Ubuntu Enterprise Cloud (Amazon EC2 did!), they take virtualization to a whole new level allowing shared resources reducing the amount of waste across any single machine. Virtual environments are great for testing purposes, if you’re just playing around, like most of what I do, go for it; production environments really should consider how virtualization may impact their QoS. If you’re interested VMWare came up with this nifty little page called why virtualize; they talk about some of the issues above and a few others, just remember, they’re trying to sell you something: http://www.vmware.com/virtualization/why-virtualize.html.