In last week’s post, we discussed the advantages that virtualization brings to the table when scaling your environment. Here’s a quick recap:
- There more you can utilize the idle time on most servers, the less you have to worry about scaling via additional hardware.
- Virtualizing servers and loading them on a single physical box is a great way to make use of spare computing power, but it’s just the tip of the iceberg.
This week, we’ll cover the possibilities that open up once physical servers are converted to virtual machines:
1. You Gain Portability
Virtual machines are portable. Since the hypervisor abstracts the OS from the underlying hardware, a VM can be moved from one machine to another without any impact. This has a lot of benefits, whether you're scaling up, scaling out, or planning for redundancy and disaster recovery.
2. Scaling Your Deployment Becomes Easier
If you recall, scaling up can be difficult if your application can't take full advantage of the additional CPU and memory resources. In a virtualized environment, you can deploy additional clones of a virtual machine on the same physical hardware, using those idle resources. Additionally, you can deploy small virtual machines today and expand their CPU allocations as needed, and shift them from server to server without rebuilding.
3. Costs Decrease
If you're scaling out, the abstraction from hardware lets you deploy servers from any vendor without worrying about fine tuning your application to different adapters, configurations, and underlying storage. Older, less-efficient hardware can be heavily consolidated. For instance, a dozen older 1000W servers might be consolidated to a single modern 750W server, saving on power, connectivity, and hardware maintenance. Given the rapid rise in core counts and 1U servers running in excess of 20 cores, the savings can be dramatic.
4. You Gain Flexibility
Additionally, virtualized servers can even have multiple identities where it makes sense. For example, a development environment can be turned off and a QA and integration environment turned on—all on the same hardware. This can be extremely useful for short-lived, temporary, or mutually-exclusive environments. Rather than buying physical servers for every task (or reconfiguring and reloading them constantly), changing from one role to another is as simple as shutting down one OS and starting up another.
5. You Become Primed to Scale Into Offsite Virtual Machines, Also Known as The Cloud
So far we've discussed how virtualization increases efficiency, flexibility, and portability. This can help when scaling your environment, but once it's virtualized and abstracted, there's nothing saying it has to stay on premise. This is where the Cloud comes in.
Virtualization and cloud services go hand-in-hand, as the basis for cloud architecture is the benefits of virtualization: effective use of resources, simplified deployment, portability, and scalability.
While it's an oversimplification in some ways, a cloud instance is essentially a virtual machine hosted on offsite infrastructure, with all of the supporting hardware and services baked into a convenient billable package. Virtualizing your environment makes it much easier to migrate into the cloud or use cloud resources to extend your physical footprint.
Things to Look Out For:
Keep in mind that not all cloud resources are created equal. As you place more and more resources in the cloud, you'll need to make sure you maintain service quality and don't encounter “hot spots” or "noisy neighbors," which happens when one customer on the same hardware starves others for resources.
Consistent and predictable performance is critical for service reliability and planning for the future, so make sure you know exactly what you're getting and how far your provider can scale with you. We have some thoughts on that.
With proper planning and application architecture, you can design highly scalable environments that grow from a small initial rollout, to thousands and millions of users. As you scale up and out, making best use of those resources is critical to managing costs. Virtualization helps with consolidation and deploying new servers/services, setting the stage for adding in cloud resources.
In the future we'll take a different tack on scalability: how underlying network and storage systems scale to support server growth.