It used to be that scaling your infrastructure was a simple matter of buying larger boxes or more boxes, but this brings with it increased cost and complexity. As your server environment grows, it consumes more compute, storage, network, and power. Making the most efficient use of those resources is critical to managing costs, and one of the biggest shakeups in how we use computing resources over the last decade is virtualization.
What is virtualization?
Virtualization is adding a layer of abstraction between a software system and the underlying hardware. VMware, Citrix, Microsoft, and others insert a hypervisor between separate virtual machines (VMs) on the same hardware, arbitrating access and making each virtual system think it’s running on its own hardware.
EMC, IBM, and others created storage virtualization, allowing data to be stored and migrated between disparate storage arrays transparently, whether they’re SSD, traditional disk, or archival media.
Virtualization has been in networking for decades with VLANs, making a single physical switch act like several to provide security, and now expanding into more advanced concepts such as Software Defined Networking (SDN).
Virtualization isn’t a new concept. It’s actually one of the oldest, starting with Multics and mainframes (IBM and others saw computing as the next utility, where everyone in a company could tap into a huge central server).
Only in the last 15 years have these mainframe-level concepts come down to commodity servers and created that long dreamed-of computing utility, which we now know as “the cloud.”
This is all well and good, but how does virtualization relate to scalability?
In a word: efficiency.
Just as we humans use only 10% of our brains (a fake but popular figure), computing power is mostly idle.
As systems grow faster, it’s increasingly difficult to keep them busy all the time. Processing thousands of requests per second leaves huge gaps of idle time between each request. Memory is built out for that one huge dataset that is processed periodically and is idle the rest of the time.
What if while one system is idle, another system taps into that unused processing power?
The more efficiently those physical resources are used, the fewer (expensive) physical resources are required.
In a virtualized system, multiple “servers” share the same physical hardware. As one VM frees up CPU, memory, and bandwidth, another VM uses them. This helps drive up overall utilization and reduces the number of servers required. Fewer servers means less electricity, fewer network ports, and simpler asset management. Efficiency goes up, and investment goes down (ideally).
What’s the catch?
Virtualization is not a panacea, and does not automatically provide scalability.
The key problem with running multiple systems on the same hardware is contention, also known as hot spots. This is what happens when two systems ask for the same thing at the same time.
For instance, if you combine a CPU-heavy virtual machine with an I/O-heavy virtual machine, the two will coexist well, not interfering when requesting resources. Deploying multiple CPU-intensive VMs on the same hardware is less beneficial, as there are fewer idle resources left over to benefit from. Running multiple I/O-heavy systems on the same hardware is significantly worse, as it magnifies storage latency. Proper planning and performance analysis is required to make the best use of a virtualized system—but the payoff is worth it.
Virtualization doesn’t replace other scalability strategies—it enhances them. It allows you to:
- reduce the amount you spend on hardware
- use resources more effectively
- consolidate legacy systems and retire older equipment
In my next post, I’ll cover how virtualization positions you well to expand into off-site virtualization, also known as the cloud.