What is Virtualization?
Virtualization refers to a set of techniques and tools to create a virtual (i.e., software-based) solution for processes that would typically require a physical platform. It is a very broad discipline that spreads into many different computing branches, including servers, personal workstations, and everything in between.
It’s hard to overstate how vital virtualization technology is for the Internet and our world as a whole. It forms the backbone of cloud computing. It is an invaluable resource for managing complex systems while reducing hardware complexity, which sounds like a contradiction until you learn how it works.
A common advantage to virtualization is that it provides quick and automated ways to run processes that would otherwise need time and effort from a human. The virtualization software that manages these processes is known as a hypervisor, as we’ll see below.
What is a Server?
In classical terms (without any virtualization involved), a server is just a computer set up to process requests from other computers, whether it’s website access, email delivery, or database management.
Setting up a new physical server requires a lengthy installation and provisioning process where a technician will install and configure the operating system and all necessary applications. This can be sped up but not eliminated by directly installing a preconfigured disk image.
With virtualization, that lengthy process can be automated and simplified.
It is possible to automate the provisioning process completely by using what’s known as a Type 1 hypervisor. This is perfect for servers with only one tenant using the resources.
A Type 1 hypervisor is a program that runs directly on the physical server (also known as bare metal) and provides a virtual environment on which operating systems can run. Since the hypervisor is always running, even when no operating system is present, it can create a new virtual machine from an image within minutes, with no direct intervention.
At the same time, they can provide full hardware access to the virtual machine running on it, so it preserves all the performance benefits of a regular server install.
Now, a virtual machine might not necessarily use all the resources of the physical machine it was created in. In that case, another benefit of virtualization is the ability to host several virtual machines in a single physical machine, sharing the physical resources of the host.
In this way, a company could have their database, mail, and web servers hosted on a single, more powerful machine while still acting as three separate servers, significantly reducing the complexity of supporting the system.
Virtual machines don’t have to have different purposes. Load balancing is a common use of virtualization that involves multiple machines handling the same data. By distributing requests across multiple virtual servers, a website can efficiently handle a much higher volume of traffic than a single server could manage.
One option is a Cloud Server powered by OpenStack, which combines an arbitrary amount of load-balanced nodes with a virtualized filesystem and load balancer, which we will discuss below.
When a hosting provider creates multiple virtual machines for separate clients in a single parent server, we are talking about Virtual Private Servers (VPS Hosting), which are one of the most popular options for general-purpose online hosting. These still have all the capabilities of physical servers while being much more cost-friendly due to the reduced physical cost of maintaining a single, larger server, which simplifies data center operations.
Another functionality benefit of VPS Hosting is that changes such as adding more capacity, backing up and restoring the entire server, or even creating and destroying additional ones can be done entirely remotely in a few minutes.
While virtualization is beneficial for Internet services and the cloud, that is by no means its only use case. Virtual machines on desktop computers are useful for many different purposes, such as testing applications developed for multiple operating systems on a single machine or running legacy applications that aren’t compatible with newer operating systems.
Virtualization on desktops is accomplished through what’s known as a Type 2 hypervisor, which exists alongside the non-virtualized operating system that the computer uses typically (instead of having full control over all of the system’s resources).
That said, while you can run virtual machines on personal computers, it’s also possible to turn things around and run personal computers as virtual machines instead. There is usually a single central machine running one (or several) virtual computers in this type of setup.
Individual users connect through devices known as thin clients to establish remote desktop connections without the full power and cost associated with a regular workstation. This simplifies IT costs and management in offices with many employees by centralizing individual workstations. Remote desktop is also very useful in schools and other similar organizations.
Other Uses of Virtualization
The technology world is filled with virtualization of all kinds that help connect devices that may not otherwise be able to talk to each other. This includes storage devices, network devices, and application virtualization.
A central data repository is immensely useful in any organization that creates content, but it can be problematic to access if the storage devices that hold the data are formatted for a specific operating system.
Storage virtualization alleviates that problem by presenting the data to each computer in the format it expects while storing it in a generic, compatible format that minimizes data loss.
Data virtualization has a lot of benefits over directly storing data on individual hard drives. Data virtualization:
- Allows for multiple clients to access the same data (as any networked storage would) without having to manage the technical details of how that data is stored.
- Lets administrators quickly implement safety measures such as RAID mirroring and parity checks to minimize the chance of data loss during a drive failure.
- Presents data to clients as if it was stored on a single drive, simplifying access.
We’ve discussed ways to virtualize servers, workstations, and network-attached storage, but what about virtualizing networks and the devices that connect them together? Many network devices that are used physically can be virtualized to minimize cost and make management easier:
- Load Balancers: Distribute requests among multiple (physical or virtual) servers to ensure consistent performance.
- Firewalls: Filter incoming and outgoing requests to block any malicious or unwanted traffic.
- Intrusion Detection Systems: Monitor networks to detect suspicious activity.
- WAN Accelerators: Compress and cache data traveling through a network to increase its throughput.
The set of tools and techniques that allow us to virtualize these devices is Network Function Virtualization (NFV). Like with the virtualization techniques we discussed earlier, this simplifies data center operations by allowing a few more powerful machines to perform several custom appliances for each network function. Combining this with virtualized storage and servers provides powerful and complete infrastructure solutions such as VMware Private Cloud.
Even more so than individual devices, entire networks can be virtualized over the Internet using a Virtual Private Network (VPN), allowing multiple devices to connect privately across the Internet as if physically connected.
The term VPN has become synonymous with Internet proxies, which are just one application of VPNs. When connected privately in this way, a server in another part of the world can securely handle all incoming and outgoing traffic for any other members in the network.
We’ve briefly touched on how virtualization allows applications to run on machines they may not have been originally designed to run on. Developers can intentionally leverage application virtualization to deploy their software in countless systems without targeting each one. When applied in this way, virtualization enables developers to have a virtual environment that matches their application’s needs regardless of where it’s running.
Two popular solutions for virtualization:
- Virtual Machine: Used by the Java Runtime Environment, it allows programs developed in Java to run regardless of the platform.
- Docker Containers: It is an open-source solution allowing developers to provide a defined set of dependencies for an application regardless of what is installed on the host machine, without the need to emulate an entire operating system.