Cloud Computing is all about outsourcing IT infrastructure and applications to run on a remote resource. Most technical people still believe that Cloud Computing is the same as traditional web-hosting model. Among the multiple factors that led to the evolution of Cloud Computing, the way Internet Service Providers (ISP) matured over time is one. The figure below illustrates how ISP turned into Cloud Computing.
Evolution of Cloud Computing
In this article, we will look into the details of Cloud Computing from technical perspective. Starting from the concept of web services, we will see how the IT infrastructure, platform, and software can be provided as a service leveraging such web services. We will also look into the key attributes that differentiate Cloud Computing from the traditional hosting model.
Introducing Web Services
People who have done even a little bit of web development must be familiar with Web Services. They are units of code that can be invoked over the web and are based on a few simple concepts. Web Services accept one or more input parameters and execute logics on the server side that will result in an output. Web Services are usually parts of web applications that run on a typical stack that has hardware, a server OS and an application development platform.
Web Services Stack
Let us now discuss how every layer on this stack can be exposed using web services to provide different kinds of services.
Infrastructure as a Service (IaaS)
In this scenario, the hardware and the operating system are exposed as a Web Service over the Internet. Based on the working principles of Web Services, a request can be sent to this service along with a few parameters. Since the OS resides on top of hardware devices, a service can be developed that accepts a command that will be processed by the OS and the underlying hardware. Technically, when it is possible to delegate a program to execute on a remote OS running on the Web, we are actually talking about providing Infrastructure as a Service (IaaS). The OS can be managed either using REST API or by using SSH or Remote Desktop console. On the other hand, traditional web hosting only allows hosting web pages, and does not allow execution of code that needs low level access to the OS API. Amazon EC2 is an example of popular commercial IaaS.
Infrastructure as a Service
Platform as a Service (PaaS)
Developers use application development platforms like .NET or Java to develop and deploy their applications. In this scenario, the application development platform is offered as a service. Through this, developers will be able to develop and test their applications on low end, inexpensive notebooks but will be able to access powerful hardware infrastructure. This is, in essence, Platform as a Service (PaaS). With PaaS, the developers need not worry about installing, maintaining, securing, and patching their environment. The provider takes care of all that. Also, the developers can achieve higher levels of scalability, reliability and availability of their applications. Microsoft Azure and Google App Engine are popular examples of PaaS.
Platform as a Service
Software as a Service (SaaS)
This scenario is probably the easiest to understand from an end user’s point of view. Nowadays, traditional desktop applications like word processors, spreadsheets, and presentation packages are available over the Internet. These applications not only require just a browser but also reduce the hassle of purchasing and installing the application individually. Moreover, people are allowed to only subscribe to selected features of applications that they need and only pay for what they use over time. This is called providing Software as a Service (SaaS). End users can get their work done by using inexpensive devices like Intel Atom based Netbooks with an Internet connection. Google Apps, Salesforce.com and Microsoft Office 365 are examples of SaaS.
Software as a Service
Key Attributes of the Cloud
We’ve now seen how different things (infrastructure, platform, and application) can be outsourced to run on a remote resource using Web Services. But, just running them on a remote resource does not qualify them as being called the Cloud – without the following key attributes:
This is the most important attribute of the Cloud. In the beginning, one might start running the application on just a single server, but Cloud Computing enables to scale the same application to run on multiple servers. Depending on the traffic and usage of the application, it can be scaled down to only required number of servers. This process can happen almost instantly and seamlessly that the application and the end users may not notice what is going behind the scene. This dynamic behavior of being able to scale up and scale down is called elasticity. Most Cloud Computing vendors are offering simple and elegant ways of manipulating and configuring servers, making that the biggest unique selling point of the Cloud.
Pay-By-Use attributes go hand in hand with elasticity. With Pay-By-Use, one can subscribe and unsubscribe to IT infrastructure based on one’s needs and is required to only pay for what has been used. It is easier to know how much it is going to cost when more resources are added to scale up the application. Entrepreneurs can take advantage of this attribute by managing the cost of IT resources and hence can balance the investment between human resources and IT resources. This is probably the most optimal way of spending from IT budget.
3. Self Service
Cloud providers usually offer a Console using which a new CPU core, a server instance or an extra storage can be added in a short time. Most organizations today have dedicated IT teams to provision a new machine instance, extend storage facility etc. Cloud can work effectively only when there is a Self Service. Through Self Service, a fairly non-technical person can perform these tasks easily. With more and more applications moving to the Cloud, Self Service becomes the preferred way of configuring and managing IT infrastructure.
This is another important attribute of the Cloud. The programmability aspect of the Cloud adds a new dimension to development. Developers can create additional machine instances and add them to applications on demand. It allows the developers to treat entire data center, server, and machines as an object model that can be programmed. Cloud providers are offering APIs so that the developers can take advantage of them. For instance, Amazon Web Services has APIs for programmatically controlling the Cloud based resources. By leveraging these APIs, developers can even build smart phone applications to manage infrastructure. This allows anybody to add servers with a click of a button on their mobile phones.
Cloud computing vs. hosting model
The chart below shows the comparison between traditional hosting model and cloud computing based on the attributes discussed above. Hosting model can never provide elasticity. Even if it does to some extent, it cannot meet the economics of the Cloud. Pay-by-use attribute is offered only in few services like email accounts, ftp accounts, etc. in hosting model. Hosting model does offer some level of self service but that is not up to the mark to Cloud Computing which offers manipulation of server configuration on the fly. Finally, in order to introduce the programmability attribute to the hosting model, vendors have to invest a lot on SDK and also on the tools to manage the infrastructure.
Having understood the behind-the-scene elements of Cloud Computing, one might think about the technologies that make it possible. One of the major technologies bringing the Cloud into success is Virtualization. We will discuss Virtualization in detail in the next part of this article.