May 3, 2017 // By Bill Roske
Recently, I read an article on the benefits of the trend to ‘Consolidate and Virtualize' in the IT Industry. Reading it took me back a few years to when "Big Iron" was a bad thing; this monolithic mainframe, that cost hundreds of thousands (or even millions) of dollars that was not flexible enough and was a potential single point of failure. The IT Pendulum swung away from mainframes and towards racks of relatively small, individual, physical systems. Divide and conquer was (and still is?) the mantra. I believe that mantra has pushed software development in a good direction. It has forced us to learn to develop our code in small, relatively independent, components that can run on separate machines in order to take advantage of the new paradigm.
The problem? All those systems needed to be maintained; both the hardware and the software. Power distribution systems and network connections were quickly beginning to overwhelm the physical infrastructure of the data center. Operating system and supporting software updates were requiring more and more complicated distribution and management. Systems were being under-utilized (or not utilized at all), burning up power and money for no benefit. Mechanisms to identify and re-capture those little-used systems were cumbersome and frustrating. An email I once received from IT went something like this: "We notice that you are never using more than 25% of your CPU or Memory on system DC3R_dev12. We would like to consolidate your system with another system that is also under-utilized so we can reclaim that hardware for other uses…" My response was direct: “Really?! I PAID for that system!” I lost that argument. Every. Dang. Time.
The concept of Server Virtualization evolved out of the need to make better (re)use of these un-utilized system cycles and the desire to reduce the expense of operations and maintenance (power, network ports, and space, just to name a few). It seems the pendulum has swung back again. We are now consolidating back into large systems (dare I say "mainframes?”) running virtualization software. These systems allow you to run multiple “virtual machines” that look like they are separate (on the network), but are really on the same hardware; sharing resources (memory/CPU/Network) across multiple (virtual) machines. The other benefit is you can quickly provision new virtual machines, or “dismantle” ones that are no longer needed.
This is all good stuff! Especially from a testing and test automation perspective! We can now "spin up" a machine to host a specific version of the software under test, or to use to execute automated tests. When we are done, we can just "tear it back down". The advent of tools and services like Google Cloud, Microsoft Azure, and Amazon's AWS make it even easier to do the spinning and pay as you go, so budgets are simplified. We don’t have to buy/cable/power/update machines to handle high-water usage that then stand near-idle the rest of the time. Updates are easier as we don’t have to update "all those systems." We can upgrade a single base OS image, clone it and spin up the systems we need.
Nirvana, right? Well… All the hype around consolidation and virtualization reminds me of a quote from Jurassic Park. Dr. Ian Malcom (played by Jeff Goldblum), in response to the re-generation of a number of dinosaur species, says, "Yeah, yeah, but your scientists were so preoccupied with whether or not they could that they didn't stop to think if they should." Don’t get me wrong, I think the overall effects of the original de-centralization, and the current trend of "consolidation and virtualization" have been positive. It has forced us, as software engineers, to think a bit deeper about how we design software and the effect that hosting options will have on architecture and design. Let us just be careful not to create new dinosaurs that could lead to our own downfall. Whether on-premises virtualization servers or in the cloud, we have to remember to be careful of the single point of failure. Lest we find ourselves with another monstrous mainframe that devours all the gains we have made.