What's the difference between cloud and virtualization?
Virtualization is technology that separates functions from hardware, while clouds rely on that split. It's easy to confuse the 2, particularly because they both revolve around creating useful environments from abstract resources.
The easiest way to describe the difference is from a purely Infrastructure-as-a-Service (IaaS) perspective. At the base of cloud computing is a stable operating system (like Linux®). This is the layer that gives users independence across public, private, and hybrid environments. Assuming intranet access, internet access, or both is already established, virtualization is what creates clouds. Software called a hypervisor sits on top of physical hardware and abstracts the machine's resources. These resources can be raw processing power, storage, or cloud-based applications containing all the runtime code and resources required to deploy it.
If the process stops here, it's not cloud computing—it's just virtualization. Virtual resources need to be allocated into centralized pools before they're called clouds, and those clouds need to be orchestrated by management and automation software before it's considered cloud computing. Clouds deliver the added benefits of self-service access, automated infrastructure scaling, and dynamic resource pools, which most clearly distinguish it from traditional virtualization.
A practical comparison
Virtualization can make 1 resource act like many, while cloud computing lets different departments (through private cloud) or companies (through a public cloud) access a single pool of automatically provisioned resources.
Virtualization is technology that allows you to create multiple simulated environments or dedicated resources from a single, physical hardware system. Software called a hypervisor connects directly to that hardware and allows you to split 1 system into separate, distinct, and secure environments known as virtual machines (VMs). These VMs rely on the hypervisor’s ability to separate the machine’s resources from the hardware and distribute them appropriately.
Cloud computing is a set of principles and approaches to deliver compute, network, and storage infrastructure resources, services, platforms, and applications to users on-demand across any network. These infrastructure resources, services, and applications are sourced from clouds, which are pools of virtual resources orchestrated by management and automation software so they can be accessed by users on-demand through self-service portals supported by automatic scaling and dynamic resource allocation.
|Purpose||Create multiple simulated environments from 1 physical hardware system||Pool and automate virtual resources for on-demand use|
|Use||Deliver packaged resources to specific users for a specific purpose||Deliver variable resources to groups of users for a variety of purposes|
|Lifespan||Years (long-term)||Hours to months (short-term)|
|Cost||High capital expenditures (CAPEX), low operating expenses (OPEX)||Private cloud: High CAPEX, low OPEX |
Public cloud: Low CAPEX, high OPEX
|Scalability||Scale up||Scale out|
|Tenancy||Single tenant||Multiple tenants|
Which one should I use?
Virtualization helps enterprises work more efficiently when compared to traditional workflows or applications installed directly on the server. Organizations can maintain a secure environment using in-house hardware and software that's managed by the organization's IT staff. Traditional workloads are well supported by enterprise virtualization products, because they are able to run on virtual instances of the outdated software the workloads are tied to.
Virtualization allows enterprises to create more environments and resources from underused hardware. It lets you split processing power, storage, and memory among environments—essentially ignoring the physical installations and commoditizing the hardware. Virtual environments are also protected from themselves: Developers’ individual sandboxes may live on the same physical server but are still separated from rogue or runaway code.
Private clouds allow enterprises to make their resources available on-demand while still adhering to security policies or regulations that require limited access, complex encryption, and a general accountability for where resources are sourced. Stateless, loosely coupled workloads—like those typically found in development, research, and telecommunications—are better supported by private clouds.
Once an enterprise has virtualized its resources, open source tools like OpenStack® make it relatively easy to deploy private clouds. OpenStack uses a consistent set of application programming interfaces (APIs) to abstract virtual resources into discrete pools that power standard cloud computing tools. The core OpenStack projects handle compute, networking, storage, identity, and images—the infrastructure that establishes a cloud computing environment.
Public clouds reduce an enterprise's need to invest in their own hardware and management teams because everything is owned and managed by a third-party provider. Enterprises don’t own the gigabytes of storage their data is backed up to; don’t manage operations at the server farm where the hardware lives; and don’t determine how their cloud-based platforms, applications, or services are secured or maintained.
Public clouds allow a client needing more resources, platforms, or services to simply pay a vendor by the hour or byte to have access to what’s needed, when it’s needed.
Today’s public clouds aren’t usually deployed as a standalone infrastructure solution, but rather as part of a heterogeneous mix of environments that leads to higher security and performance; lower cost; and a wider availability of infrastructure, services, and applications.
What’s the difference between scaling up and scaling out?
Scaling up adds resources to a system that’s managed by a single operating system or controller.
Scaling out coordinates many small systems—each with their own controller or operating system—so work can be dispersed among them.
When an application demands more from a virtual machine (VM), you can either give that VM more resources so it can handle demand by itself (scale up), or you can spin up more VMs and disperse demand among them (scale out). If that app is in a cloud environment, you either scale up by collecting more physical resources, virtualizing them, routing them into the existing resource pools, and managing them through the existing cloud’s controls (this is typical of private cloud deployments); or you can scale out by requesting more cloud environments (this is typical of public cloud deployments).