When you hear of “the cloud”, what comes to your mind? For many company executives when the cloud was becoming a popular thing, what came to mind was fear – fear of loss of data, fear of compromised data, fear of the unknown. As research shows, even though people still have these fears, more people are embracing the cloud and becoming more comfortable with what it has to offer. So what is the cloud and specifically, what is Cloud Computing?
Virtualization: An overview
If you have been in the networking world for any length of time, you must have seen a drawing similar to the one below:
The cloud is usually used to represent the Internet but it could also be used to represent an obscure network, meaning the person looking at the diagram does not need to know what is happening in that cloud to understand the diagram. This is similar to the “blackbox” concept where you don’t know what is going on inside the box – you only know the input and output.
In the same way, when we talk about the cloud in terms of Cloud Computing, we refer to accessing/using services that are provided over the Internet or over some other type of network that we don’t necessarily have a view into.
Note: This definition is an oversimplification of Cloud Computing but it works for now.
A good place to begin discussing Cloud Computing is Virtualization. This is because even though Virtualization is not necessary for Cloud Computing, Virtualization is an enabler for Cloud Computing and it also helps us understand the concept of shared resources.
If you have used VMware or VirtualBox before, then you know that these virtualization software (also called Hypervisors) allow you to run virtual machines (guest OS) on a host machine (host OS). The number of virtual machines you can run simultaneously will depend on the computing capacity available on the host machine.
Note: Some hypervisors can run directly on bare metal servers meaning there is no “host” OS as such. An example is VMware ESXi.
The virtual machines share the computing resources available on the host machine and in most cases, there is isolation between virtual and host machines. For example, if you are running Windows 8 as a virtual machine on a host machine and the virtual machine gets compromised (e.g. virus infection), it is unlikely that the host machine will also get affected.
There are other features of virtualization like the ability to scale resources (e.g. CPU, storage, etc.) up and down quickly, restore to a previous state using snapshots, easy migration between host machines and so on. However, we know enough to now talk about Cloud Computing.
Note: A related technology to Hardware Virtualization is Container Technology where several applications run in their own “containers” on an operating system. This type of virtualization occurs at the OS level.
What is Cloud Computing?
A good document to read to understand cloud computing is the NIST 800-145 document. It defines Cloud Computing as “a model for enabling ubiquitous, convenient, on-demand network access to a shared pool of configurable computing resources (e.g., networks, servers, storage, applications, and services) that can be rapidly provisioned and released with minimal management effort or service provider interaction“.
Did you notice the “shared pool of configurable resources” part of the definition? That points to a role virtualization can play. However, the NIST document goes further to list five (5) essential characteristics of the cloud model including On-demand self-service, Broad network access, Resource pooling, Rapid elasticity, and Measured service.
- On-demand self-service: This is the ability to provision a cloud resource on demand without requiring any human interaction with the service provider.
- Broad network access: Broad network access deals with being able to access cloud resources via several network types (e.g. Internet) using various kinds of devices (e.g. phones, laptops, etc.).
- Resource pooling: With resource pooling, the cloud service provider pools its computing resources together to serve the needs of several customers.
- Rapid elasticity: Rapid elasticity deals with the ability to expand or decrease the capacity of cloud resources as necessary.
- Measured service: Measured Service deals with the ability to monitor and control provisioned cloud resources, both by the cloud service provider and by the customer.
Case study: Amazon Web Services
To explain these characteristics, we will take a real example using Amazon Web Services (AWS) which is one of the biggest cloud service providers. I will provision a virtual machine in the AWS cloud by signing into my AWS console.
By following a couple of steps (pressing “Next”), I can launch an instance of a virtual machine and get it running in less than 2 minutes. Just like that, I have a virtual machine running somewhere in the huge Amazon “cloud”. This is what On-demand self-service is. The same way I provisioned the server, I can also delete it.
In this case, I was able to access AWS over the Internet using my laptop. Like we described above, this is the Broad network access characteristic of the cloud.
The service I just used on AWS is known as EC2 (Elastic Compute Cloud) and in this case, is just a virtual machine created on a physical server sitting somewhere in one of Amazon’s datacenter. I don’t know where that datacenter is located exactly (I know the region though) and that is the beauty of the cloud. That physical server will also be used to provision virtual machines for other customers apart from me which means that Amazon pools resources together to serve my needs and the needs of other customers. This is the Resource Pooling characteristic of the cloud.
Note: Amazon can also provision dedicated servers to customers to run EC2 instances on, meaning that virtualization does not have to be used in the cloud. Some reasons to go for dedicated hosts include compliance requirements and more control over your instances.
The instance I launched on AWS has 8GB of storage. What if I need more? Will I have to delete the whole instance (and any work I may have done on it) and then start again? No way! This is what Rapid Elasticity deals with. In the case of AWS, I can modify the 8GB volume to whatever I want even after I have created it.
Hint: You can change the instance type of your virtual machine when it is in the “stopped” or shutdown state.
Finally, through Measured Service, there should be some form of metering capability such that I pay for only what I use and in many cases, for how long I use it. In the AWS case, my instance is charged per hour and once I delete that instance, I won’t get billed for it anymore.
Cloud Computing Service Models
According to the NIST document previously referenced, there are three cloud service models as follows:
- Software as a Service (SaaS): This is probably the most famous example of the cloud. In SaaS, consumers have access to software/application provided by the cloud service provider. In this service model, the consumer does not know or have control over what is happening in the background (e.g. physical or virtual resource, operating system, etc.); they only have access to the service through some means like a web browser or thin-client. Examples of SaaS include Google Apps, Office 365, and Dropbox.
- Platform as a Service (PaaS): Many “standard” users will not be familiar with this service model but application developers will. In PaaS, the consumer is provided with a platform to develop, test, and deploy their own applications. This means that not only are they provided with the underlying physical/virtual infrastructure (e.g. server, storage), they are also provided with middleware such as development tools, databases and so on. Examples of PaaS include Google App Engine and Force.com by Salesforce.
- Infrastructure as a Service (IaaS): Most of this article has revolved around IaaS – providing the consumer access to the underlying physical or virtual resources (e.g. server, storage, networking). Examples of IaaS are Microsoft Azure and Amazon Web Services EC2.
Note: Microsoft Azure will probably fall into both the IaaS and PaaS service models.
Cloud Computing Deployment Models
Generally speaking, there are three ways by which clouds can be deployed as follows:
- Public Cloud: The cloud infrastructure is owned, managed and operated by the service provider and available for use by the general public. AWS is an example of a public cloud.
- Private Cloud: Private here means that the cloud infrastructure is exclusively provisioned for use by one organization. It could be owned, managed and operated by that organization (maybe in their datacenter) or by a third-party service provider.
- Hybrid Cloud: This is a mix of both public and private clouds in such a way that data can flow between the two clouds. For example, an organization can host their own private cloud internally and then rely on a public cloud for extra computing power when necessary. A real world example of a hybrid cloud is the model being used by Dropbox. Initially, Dropbox relied heavily on AWS until they moved most of their data to their own private cloud a couple of years ago. Even though they now use their own private cloud, they still use AWS for some of their storage requirements.
Choosing which cloud deployment model is right for you will depend on a variety of factors. For example, a startup may be better off using a public cloud so that they can concentrate on their core business and rely on the technical expertise of the cloud provider. An organization that can afford the expertise to do so and wants greater control and visibility into their computing resources, may choose to go for a private cloud. A couple of other factors to consider include security, cost and flexibility.
In this article, we have discussed Cloud Computing and seen how Virtualization can be an enabler of the cloud. We discussed the three cloud computing service models including Software as a Service (SaaS), Platform as a Service (PaaS) and Infrastructure as a Service (IaaS). We have also seen three deployment models of the cloud including Private Cloud, Public Cloud and Hybrid Cloud.
Cloud Computing offers several benefits to individuals and organizations alike. For example, without having to invest in any hardware, I had access to a virtual server in less than 2 minutes for about one cent per hour! In the same way, organizations do not have to invest in huge upfront costs (hardware, power, cooling, etc.) and can just rely on the computing power already available in the cloud.
Other benefits include the ability to quickly provision new services/resources, elasticity (scaling up and down as necessary), and reliability (most cloud service providers provide multiple layers of redundancy than many organizations will be able to do on their own).