You have a server, and it is not busy enough. Understandably, you want more value from your hardware investment. The default answer now -- and a good one, much of the time -- is to virtualize. With virtualization, you can easily use 80% or more of capacity rather than 10% or less in non-virtualized environments.
But virtualization is not without its flaws. First, it adds an entirely new tier of infrastructure, with associated staff learning curves. Second, you must license (if you are using Windows) an operating system (OS) for each virtual machine -- which requires money to purchase and maintain, and staff time to track. Finally, using virtual machines is heavy: Each virtual machine (VM) drags along with it the weight of an entire OS instance, and that's a lot of overhead for one application.
There are alternatives to virtualization
The first alternative is to install multiple applications on a server to keep it busier. Windows systems administrators are used to running one application per server. But system administrators running any Unix variant expect that any given server will be able to support many applications. Sun, IBM and HP offer fine-grain control of server resources to make sure processes get what they need. Windows has made great strides in this in the last decade. For Java, this is just a matter of running more apps inside the application server. For other applications, tools like Librato LoadManager and HP Resource Partitioning Manager can help consolidate workloads without losing control of resource allocation among them.
Virtual OS and virtual applications to the rescue
If, however, you can't run multiple applications on the OS instance -- for reasons of risk, compliance, performance or compatibility -- consider alternatives for partitioning at or above the OS level, rather than below it.
OS virtualization adds a partitioning layer above the OS that lets each application think it has its own copy of the OS. By isolating the apps from seeing one another, OS partitions prevent the applications that don't play nicely together from interfering with one another. Parallels Virtuozzo and Solaris Containers are good examples of this option.
Another option is to use application virtualization, which works in one of two ways: streaming or containerization. A streamed virtual application works by pulling an executable over block by block, as needed. This mode of virtualization doesn't help resolve resource conflicts, since as far as the OS is concerned the streamed app is just another app.
A containerized application works more like an OS partition. Each virtualized application is installed in a software envelope that keeps the application from interacting directly with the OS. Likewise, it keeps applications from interfering directly with one another. This form of virtualization can smooth over versioning differences, allowing the same system to run multiple versions of the same application, or an application written for an older version of the OS to run on the current version. Citrix XenApp offers this mode of virtualization. Because it works at a higher level of abstraction (above the OS), it is, in turn, lighter-weight than partitioning the OS and so can be expected to have a lower performance overhead.
Using lean OS images with virtualized servers
If you do decide to virtualize servers in order to boost resource utilization, at least lighten the load by building lean OS images. A lighter-weight OS means more VMs per host and more real work accomplished by the 80% utilization on that host. This is something you can do by hand or with the aid of tools like FastScale (which claims to be able to strip a Linux system down to about one-tenth the size it would be by default, or a Windows system to about half its normal size).
Getting more work out of your hardware investment is always a worthwhile goal. Virtualization is a good way to achieve it, but not the only one. Explore your options before charting your course.
About the author
John Burke is a principal research analyst with Nemertes Research, where he focuses on software-oriented architectures and management.