Cloud Computing

Let me begin with an important disclaimer: This is my understanding of Cloud Computing. Or rather, my vision of it. You get the point.

Here it goes…

Cloud Computing is the idea of abstracting computation (and storage) in a way that allows us to delegate away its management to a third party.

I have intentionally kept the above simple so as to not cloud(!) the definition with its implications such as is so often done. This definition will be the basis for the rest of the post.

Let me point out certain aspects of the definition that might not have come out very well in that one-liner:

  • Cloud Computing is not a technology, or even a set of technologies — it’s an idea. There are many technologies that need to be utilised to realise the idea but almost none of them is a constant. I think this is one aspect that confuses the most number of people.
  • Cloud Computing is not just a new paradigm of computing. It’s an altogether new idea, one that is built over several other existing paradigms such as Distributed Computing, Virtualization, etc.
  • Cloud Computing does not imply any particular system architecture. Concepts like Sevice Oriented Architecture (SOA) are heavily employed but are hardly necessary.
  • Cloud Computing is not a standard defined by any standards organisation.
  • Cloud Computing is a new idea but it actually encompasses several practices that existed long before the term became popular. I’ll elaborate on this when discussing Software as a Service (SaaS) later.

The above clarifications establish what Cloud Computing is not but don’t do much in defining what it is. I’ll now describe three Cloud Computing methodologies that will hopefully take us towards clarity: Infrastructure as a Service (IaaS), Platform as a Service (PaaS) and Software as a Service (Saas). Instead of calling them three kinds of Cloud Computing — as I have often seen being done — I call them three delivery mechanisms for Cloud Computing. Please note that these are not the only possible delivery mechanisms, these are just the most common ones at the moment; others will surely emerge.

Infrastructure as a Service (IaaS)

IaaS comes closest to the above definition in terms of obviousness. Paraphrasing from Wikipedia:

Infrastructure as a Service (IaaS) is the delivery of computer infrastructure as a service. Rather than purchasing servers, software, data center space or network equipment, clients instead buy those resources as a fully outsourced service. The service is typically billed on a utility computing basis and amount of resources consumed (and therefore the cost) will typically reflect the level of activity. It is an evolution of web hosting and virtual private server offerings.

Amazon Web Services (AWS) is one of the pioneers of such an offering. AWS’ Elastic Comput Cloud (EC2) is “a web service that provides resizable compute capacity”. Once signed up, you can use a simple API to request for any number (hence resizable) of ‘Instances’ to be brought up. An instance is a complete operating system running as a virtual machine over the cluster of machines in Amazon’s data centers. You pay for what you use. Simple Storage Service (S3) is another popular IaaS offering from AWS. S3, as the name suggests, allows you to use an API to store and retrieve vast amounts of data. Once again, you pay for what you use.

Platform as a Service (PaaS)

PaaS is a higher level of abstraction than IaaS. From Wikipedia:

The PaaS model makes all of the facilities required to support the complete life cycle of building and delivering web applications and services entirely available from the Internet — with no software downloads or installation for developers, IT managers or end-users.

PaaS offerings include workflow facilities for application design, application development, testing, deployment and hosting as well as application services such as team collaboration, web service integration and marshalling, database integration, security, scalability, storage, persistence, state management, application versioning, application instrumentation and developer community facilitation. These services are provisioned as an integrated solution over the web.

Such services provide a reasonably well-defined environment within which your application would run. You are freed from bothering about the deployment architecture, the underlying operating system used, etc. Google App Engine (GAE) is an example of PaaS. GAE provides a Python environment within which you can build, test and then deploy your applications. The lower-level details such as the operating system used and even the location of from where the application will eventually run is totally hidden from you. Heroku is a similar service that provides a Ruby on Rails environment. A very interesting thing to note about Heroku is that, under the hood, it uses AWS for the infrastructure.

Software as a Service (Saas)

SaaS is not really a new concept — we’ve been using it for well over a decade now. It is also probably as far as one can get away from the above definition while still conforming to it. From Wikipedia:

Software as a Service is a model of software deployment where an application is hosted as a service provided to customers across the Internet. By eliminating the need to install and run the application on the customer’s own computer, SaaS alleviates the customer’s burden of software maintenance, ongoing operation, and support.

Take any software that has traditionally been used on the desktop or run on a local server by an IT admin and offer it as a service and you become a SaaS provider! Email is probably the most common such software although we have been used to email provided as a service for so long that it is difficult to think of it this way. Google Docs and Zoho Office are other examples of SaaS where commong office applications such as Word Processor and Spreadsheet are provided as a service. Salesforce is a very popular Customer Relationship Management (CRM) software that is offered only as a service.

Let’s say you make an invoicing application and deploy it on Heroku. That would be a SaaS deployed on a PaaS deployed on an IaaS! Now, that’s a mouthful of aaS! :P

I hope I have been able to convey my understanding of what Cloud Computing is well enough. If you think I’m mistaken about anything here — or that I’ve got it totally wrong — please let do me know in the comments, I’m more than glad to learn.

  • About grok.in

    This is a blog primarily focussed on the subjects of Information Engineering—Retrieval, Extraction & Management, Machine Learning, Scalability and Cloud Computing.