Friday, July 22, 2011

Demystifying the Cloud
An introduction to Cloud Computing

Understanding Cloud Computing

If you are wondering what is so special about the ‘Cloud’ in Cloud Computing, here s the explanation. Traditionally, developers and architects used a picture of cloud to illustrate a remote resource connected via the web. Eventually cloud became the logical connector between the local and remote resources on the Internet.
Most of the developers get confused when they encounter the term Cloud Computing. According to them, their Web Services are already hosted on the Cloud and that can be potentially called as Cloud Services. While there is some truth in this argument, it is a not very accurate way of describing Cloud Computing. Let’s look at Cloud Computing through the eyes of a developer.
Think Web Services
Most of the developers are familiar with Web Services. Web Services are based on a few simple concepts. Every Web Service accepts a request and returns a response (even if there is no explicit return value, a HTTP 200 OK return value is considered as a response). They are units of code that can be invoked over the web. Typically, Web Services accept one or more input parameters and invoke processing logic which will result in an output. Web Services are a part of web applications that run on a typical stack that has hardware, a Server OS, application development platform. For a while, think how you can expose every layer that is powering your web application as a Web Service.
Cloud OS
Visualize a scenario where the hardware and the Operating System (OS) are exposed as a Web Service over the public Internet. Based on the principles of Web Services, we could send a request to this service along with a few parameters.Since the OS is expected to act as an interface to the CPU and the devices, we can potentially invoke a service that accepts a ‘job’ that will be processed by the OS and the underlying hardware. Technically, this Web Service has just turned the OS + H/W combination into a ‘Service’. We can start consuming this service by
submitting CPU intensive tasks to this new breed of Web Service. What do you call an OS that is exposed on the web as a service? May be a Cloud OS? We will answer this in the coming sections.
Cloud FX
Developers always develop and deploy their applications on the application development platforms. Some of the most popular application development platforms are .NET and Java. In the last scenario, we have seen how the OS + H/W combination is offered as a service. Now, imagine a scenario where the application development platform is offered to you as a service. Through this, you will be able to develop and test your applications on a low end, inexpensive notebook PC but will able to ‘submit’ my code to run on the most powerful hardware infrastructure. It is the same programming language, SDK and the runtime that runs on your
development environment. If the hardware, OS, the language runtime and the SDK are offered to you as a service, what would you call this? A Cloud Platform or may be Cloud FX? We will address this in the next section.
Cloud Application
Today, most of the traditional desktop applications like word processors and spreadsheet packages are available over the web. These new breed of applications just need a browser and offer high fidelity with the desktop software. This fundamentally changes the way software is deployed and licensed. You need not double click setup.exe to install an Office suite on your desktop. Just subscribe to the applications and the features that you need and only pay for what you use. This is almost equivalent to exposing the application as a service.These applications
may be called as Cloud Applications. We will take a relook at this later.
Welcome to the World of Services
Infrastructure as a Service
In the previous section we discussed the Cloud OS. All that the Cloud OS offers is the infrastructure services. You may choose to use REST API to manage this OS or use SSH or Remote Desktop console. Technically, when you are able to delegate a program to execute on a remote OS running on the Web, you are leveraging Infrastructure as a Service (IaaS). This is different from classic web hosting. Web hosting only hosts web pages and cannot execute code that needs low level access to the OS API. Web hosting cannot dynamically scale on demand. IaaS enables you to run your computing task on virtually unlimited number of machines. Remember that through IaaS, you have just moved a server running in your backyard into the
Cloud. You pretty much own the managing, patching, securing and the health of the remote servers. Amazon EC2 is an example of commercial IaaS offering.
Platform as a Service
Platform as a Service or PaaS goes one level above the Cloud OS. Through this, developers can leverage a scalable platform to run their applications. The advantage of PaaS is that the developers need not worry about installing, maintaining, securing and patching the server. The PaaS provider takes the responsibility of the infrastructure and exposes the platform alone as a service. Through this, the developers can achieve higher level of scalability, reliability and
availability of their applications. Microsoft Azure and Google App Engine are examples of PaaS.
Software as a Service
Software as a Service (SaaS) is a silent revolution in the world of traditional software products. With the availability of Intel Atom based Netbooks and abundant bandwidth, most of the applications are moving to the Cloud to be offered as services. Consumers can now use inexpensive devices that are capable of connecting to the web to get their work done. This reduces the upfront investment in software and brings the Pay-as-you-go model. Google Apps, and Microsoft Online Services are examples of SaaS.