Virtualization is a technology that provides the possibility of creating several simulated (or virtual) processing environments within a single physical hardware system. The hardware components (real, physical) are abstracted to make them available to the software in the form of a virtual resource. The set of virtual hardware components (Hard disk, RAM, CPU, Network Card) takes the name of a virtual machine (Virtual Machine, VM), and on it. You can install the operating system and applications as if you were interacting with a "real" system. This procedure can be performed both on desktop systems and on server systems.
On the physical machine, called a host, software called Hypervisor is run that connects to the hardware to distribute the computer resources appropriately, dividing the system into different separate, distinct, and secure environments: virtual machines or guest machines. Each virtual machine (guest) does not exist physically, but only in the memory of the hypervisor.
Virtualization provides the ability to establish (and possibly easily reposition) the computing power, storage capacity, and memory to be assigned to the VMs.
Cloud and virtualization
In general, in a Cloud solution, a supplier rents hypervisor access on their hardware to give users the opportunity to run their own virtual machines (or use pre-built virtual machines). The user may not know which physical server the virtual machine is running on. For example, Amazon operates large data centers in California, Oregon, and Virginia. Using Amazon's AWS service, the user does not know in which data center their virtual server is located, and even if they do, they know which machine in that data center is hosting their server.
There are three cloud distribution models:
- Private: The Company owns the hardware running the cloud application.
- Public: The Company does not have the hardware running the cloud application, but uses third-party cloud services.
- Hybrids: the company uses both public and private cloud solutions.
A further classification of the types of Cloud Computing is as follows, based on the type of services:
- Infrastructure as a Service (Iaas): This is the most basic category of cloud computing services, where storage, hardware infrastructure, and the network are made available as services. With an IaaS solution, companies rent their IT infrastructure (servers and virtual machines (VMs), storage resources, networks, and operating systems) from a consumer-based cloud service provider.
- Platform as a Service (PaaS): They are cloud services that provide an environment (the application platform and/or the Operating System) on demand for the development, testing, distribution, and management of software applications. It allows developers to more easily. It quickly creates web applications or apps for mobile devices without having to deal with the configuration or management of the underlying server infrastructure, the storage network, and the databases needed for development.
- Software as a Service (SaaS): It is a method for distributing software applications via the Internet, on-demand, and generally on a subscription basis. Cloud service providers host and manage the underlying software application and infrastructure and take care of maintenance tasks, such as software updates and the use of security patches. Users connect to the app via the Internet, usually with a web browser on the phone, tablet, or PC. Some examples are Google Documents, an application similar to Microsoft Office, but which is made publicly accessible as a service on the Web.
The advantages of virtualization
One of the main benefits of virtualization is the efficient use of hardware. In a nutshell, virtualization allows you to use the resources you need, avoiding that a server is significantly undersized or oversized. Almost all hypervisors currently available on the market allow you to resize a virtual machine manually easily. The task of increasing or decreasing the number of processors, the amount of RAM, or the size of the hard disk is the task (manual) of the administrators. But some hypervisors do it automatically, continuously monitoring a virtual machine, and allocating resources when needed, or out of office when not needed.
Virtualization offers some more options for disaster recovery. Hypervisors let you save the state (snapshot or checkpoint) of a virtual machine at a given time and then be able to restore that state.
Finally, virtualization can save energy. With virtualization, generally, less hardware is purchased.
The disadvantages of virtualization
The first disadvantage of virtualization is greater complexity. Furthermore, virtualization generally does not use local storage, but a kind of storage connected to the network. When cloning a VM, you can have duplicate IP addresses and duplicate Mac addresses. All these problems are not always easy to identify, even if once found, they are easily resolved. As for storage, with virtualization, we need to increase the amount (and also the quality) of storage space.
The cost of virtualization can be another negative point. Money is saved in an adequately designed virtual environment in the long run, but some expenses associated with virtualization can get out of hand without adequate control. The cost may concern the service itself and the licenses of the operating systems and applications of the VMs.
A common problem associated with virtualization is having too many virtual machines (sprawl ). This is because, in most hypervisors, it is very easy to create a new virtual machine. With just a few clicks of the mouse, you get a new VM. But just because it's so easy, users tend to create more than necessary. Each VM created requires memory, processor, storage space, and bandwidth.
Common uses of virtualization
One of the most common applications of virtualization is desktop virtualization. Companies face difficulties in maintaining desktop computers, i.e., configuration problems if each user has a different desktop computer, different hardware, different operating systems, and physical movement on each machine, etc. Some of these problems can be overcome by using virtualization, in particular, a technique called Virtual Desktop Infrastructure, or VDI (Virtual Desktop Infrastructure), in which a central server supplies a VM to each user, which uses only one terminal.
Another common use of virtualization concerns the need to run a specific program that, for some reason, cannot run on your computer. In this case, it can be a good solution to install a hypervisor and create a virtual machine with an operating system that is better suited to the application you want to run.
Another typical use of virtualization is the creation of a virtual test environment. A company that has an application in production (for example, e-commerce) will probably have a test infrastructure, and before making changes to the application in production, performs tests in the test environment. Virtualizing the test environment allows the use of checkpoints and snapshots, so you can easily restore a previous state if something has not gone as planned.