Some of the critical characteristics that should be considered while designing and deploying the virtualization environment are listed in the following sections.
It is annoying to see “Service Unavailable” error messages popping up on an ATM machine while you are trying to draw some cash. A 404 error is equally annoying when you are trying to make your mortgage or credit card payment. Both problems are caused by the lack of service availability when users need it.
High availability is a design characteristic to ensure the availability of the offered service for end users, and it is measured by the uptime of the service. This candidly reflects the quality of the offered service. In a banking environment, the application that is used to host the user portal or the dashboard is a critical service that cannot afford downtime. In any IT company, the build server on which the application development is ported and committed is a critical one that the business cannot afford to lose, even for seconds. However, other internal low-priority services—such as a vacation request portal—can run with acceptable downtime because they do not have a critical effect on the business. While designing the infrastructure, due diligence must be given for high-priority services by considering service redundancy.
High availability must be designed by considering failures from different layers and aspects. Running the same application as two processes (active and standby) in the same virtual machine provides process-level redundancy. However, if the virtual machine fails, both processes will be lost. Cloning and running the application as two different virtual machine instances provides virtual machine–level redundancy, but they both must not run on the same physical host. It is a common practice to deploy disaster recovery sites in different parts of the geographic area by running the same instances of business-critical services so that any failures due to natural disaster in one geographical area does not stop the business. In short, high availability design that avoids any single point of failure is a compelling business requirement for IT infrastructure design.
Although high availability is not specific to end applications (remember the ATM example?), virtualization capability delivers high availability by instantiating more than one virtual machine or containers in different physical hosts. Advanced features, such as virtual machine cloning or using a virtual machine template, come in handy in such situations because they allow you to provision multiple instances of the same virtual machine or appliances in a matter of seconds.
Although service resiliency is achieved by running multiple instances of the same application in different environments, utilization efficiency depends on the high availability deployment model. There are two types of high availability deployment models:
- Active-standby: In active-standby mode, one of the services or the virtual machine acts as the primary service and takes all the load while the other instance of the virtual machine acts as a backup that takes over the role of primary service only when the primary is down. It is a common practice in data centers or disaster recovery sites to provision both active and standby services with the same IP address and the GW connected to the primary service advertises a more specific prefix. Traffic flows are redirected to stand by only if the primary service is down. This model is not as efficient as the standby virtual machine, and the service consumes computer and other resources even when the primary service is taking all the traffic load.
- Active-active: In active-active mode, the workload is distributed to both the virtual machines, which improves the efficiency drastically and yet provides high availability because one virtual machine is available even if the other fails. The characteristics of virtualization to instantly provision the virtual machine or container help users create multiple instances and configure them for efficient load distribution.
For the past two decades, resource utilization has been one of the benefits associated with the deployment of virtualization. Efficiently utilizing available IT resources is a critical business component that is directly reflected in revenue. By the end of the year, most of the employees are on vacation, which reduces server workload. Therefore, it is a common practice to shut down data centers during that time of year to save power, money, and the environment. However, resource efficiency can be realized on a per-day basis, too. It is common to see a heavy workload on the employee portal during business hours but minimal or no load during off-business hours.
The characteristics of virtualization that allow users to provision instant virtual machines or containers help to dynamically scale the service up or down based on the workload. During business hours, multiple instances of the virtual machine running business-critical applications can be deployed for load distribution, while the numbers can be drastically scaled down during off-business hours. This elastic nature of virtualization helps users utilize the resources efficiently, and the business can proudly claim that it is eco-friendly.
In a cloud computing environment, multitenancy is not new; it is a common practice for efficiently utilizing resources. Most of the XaaS services that cloud providers offer are multitenancy aware. Provisioning and running virtual machines that belong to different customers on the same physical host or data center is a classic example for multitenancy. The degree of multitenancy varies depending on the type of service offered. With infrastructure as a service (IaaS) or even bare metal as a service (BMaaS), multitenancy is all about running multiple virtual machines that belong to different tenants. With software as a service (SaaS), the granularity is at the software level where the provider creates a different user account for each tenant in the same application.
Multitenancy eventually comes with a stringent security tightening requirement. Communication between virtual machines that belong to different tenants (intertenant communication) must undergo tight scrutiny of security policies. The ability of virtualization natively helps to provide multitenant services by segregating the resources without compromising security.
It is a common misconception that multitenancy is intended only for public clouds where the cloud provider and the tenants belong to different administrative domains. Multitenancy-based service deployments in private clouds are equally common and efficient. In a private cloud where the cloud and the services belong to the same administrative domain, different departments are considered tenants that share the resources but require controlled communication between those tenants.