In very recent past if a company decided to create and host an application they would need to do following:
- Create a physical infrastructure Layer – They will have to buy 100s of servers, networking equipments, storage devices on which they will have to build their infrastructure. On top of that they will have to buy space to accommodate the servers and equipments, power with backup, cooling. They will also need to upgrade their servers after every few years.
- Create Platform layer – To utilize the hardware resources they will have to acquire software like OS, web-servers, application servers, databases, CDN, caching, etc. These software will have to installed on each of the groups of servers and maintained regularly.
- Create the Application – Then the company will have to hire a dedicated team of developers who will develop the actual system to be installed on platform created above.
This is the traditional way of deploying applications. This traditional way has lots of drawbacks. Let us dig a few of them.
- Large Upfront Cost – Company will have to procure all the hardware for creating infrastructure even before the application is developed. Cost of this procurement is to the tunes of 100s of million dollars. You can throw in more millions to buy space, power, cooling, security etc.
- Hiring Infrastructure team – They will have to hire a highly qualified team of infrastructure engineers to create and maintain such a complex infrastructure. This will add to overall upfront and recurring cost to deploy the application.
- Software Licencing Cost - The software required to deploy the application on the infrastructure need to installed. The licensing cost of these software are huge.
- Resource Wastage – The companies do planning in advance about how much peak traffic they will get. Based on peak traffic they purchase the hardware. Most of the time the traffic is much less than the peak. So large amount of resources in terms CPU, Bandwidth, memory etc remain underutilized hence waste.
- Scaling not guaranteed- Even with such huge infrastructure it is not guaranteed that servers will scale up if there is sudden spurt of traffic (say 100 times more).
- Less Fail-over capability - The servers are physically present in a single datacenter. In case there is an problem with datacenter like fire, earth quake, tsunami etc the datacenter is bound to go down. In that case the application will go down too. So the fail-over capability is reduced.
- Production level testing not possible – The testing or development environments are scaled down versions of production, this is because the cost of creating and maintaining production duplicate can be prohibitive. So the actual testing of application is not done in production settings.
To summarize the problem
Infrastructure is not the core business.
So all in all the traditional way of delivering application is not that great. I would not be wrong if I state that 70-80% of effort in terms of time and cost are spent in just creating and maintaining the infrastructure and platform on which final application would run. If it were me I would rather spend time is developing my application and adding new feature in it. This sucks!
Everything looks grim? Not quite Since last few years there has been lot of talk about Cloud Computing. Cloud Computing is the answer to all the problems that are listed above.
What is cloud computing?
Simply put Cloud Computing is delivery of computing as a service rather than as product.
We know that computing is sum of CPU, memory, storage, network and bandwidth which coupled with necessary software provides an ecosystem where our applications can live. In traditional approach, computing had to be assembled from scratch or bought from a data-center businesses, and we have already seen the disadvantages of this approach . Cloud Computing caters to these very pain points, it promises to deliver computing as service and it has indeed delivered that promise. Today you will find thousands of companies which claim to have cloud offerings and why not? Cloud Computing is the new cool kid in the town, and players want to take all the advantages they can get by claiming that they have a cloud offering. But how true is their claim? There are certain characteristics of a cloud service.
- Offered online and self serving – The cloud service product should be offered online and a user can access the entire range just by clicking on the browser without any intervention of human being.
- Pay-per-use model – There should be no upfront cost while using the cloud services. Users should pay only for amount of resources they have used.
- Scalability on demand – The cloud should allow users to easily scale up and down their application by few clicks of the mouse.
- Elasticity on demand – Cloud should allow user to quickly use and discard resources. This should be easy to do and should be online.
- Delivered over internet protocol – Any cloud services should be deliverable over internet protocols like HTTP, REST, SOAP etc.
So now we can check who are the genuine cloud players. If you need to call the service desk of the company to create an account with a cloud product then it is not a cloud product. If you need to call the service desk to enable any service for your account then it is not a cloud product.
As we saw that there are three distinct layer of any application infrastructure. These are physical layer, platform layer, and application itself. Cloud products falls exactly in these three layers and thus cloud services are classified into three segments.
- Infrastructure as a service or IaaS – This is delivering of hardware ie, CPU, memory, storage, networking as a service. In other words users can provision these hardware resources without buying the actual device, they can use the online application provided the cloud to get these delivered as a service. For example Amazon EC2 allows users to create compute units with desired OS, RAM, CPU and storage via their console. So Amazon EC2 is a IaaS. Other examples are Google Compute Engine, AWS S3, AWS ELB, Route 53, IBM Smartcloud, Microsoft Azure IaaS.
- Platform as Service or PaaS – Platform as a service provides the software environment which is required to run an application, as a service . For example to run a simple java web-application you require to install Tomcat on your computer. In addition you may also require a database. So a computer with tomcat and database becomes a platform in which a java web-application can run. Any cloud service which delivers this platform over the network can be classified as PaaS. Example of PaaS is Amazon Elastic Beanstalk. Beanstalk comes pre-configured with apache/tomcat/php and a database. It provides APIs using which you can deploy your application on it without worrying about what is installed there. Examples of PaaS providers are Amazon Elastic Beanstalk, Elastic Cache, SQS, SES, SNS, Google App Engine, Microsoft Azure, VMware Cloudfoundry etc.
- Software as a Service or SaaS – Last but not the least we have SaaS. SaaS delivers application as a service. For example http://zencoder.com/ is a SaaS application which delivers video transcoding service over the web. As a user all you need is to create an account and access the service. You don’t need to pay any money upfront and pay only for resources you consume while transcoding. Some examples of SaaS are Google Apps, salesforce.com, Amazon Elastic Transcoder, Kikapps, Gigya, Janrain etc.
The image below explains the various segments of cloud products and also the major players/product operating in that space.
Physical Layer = Infrastructure as a Service (IaaS)
Platform Layer = Platform as a Service (PaaS)
Application Layer = Software as a Service.
Various Advantages of Cloud Computing
- No upfront cost of buying maintaining hardware resources
- No upfront cost of buying software licences. Though cost of using oracle in cloud may be more than using mysql in cloud.
- Pay only for resources used.
- Scale up and down on demand. So less resources are wasted and also more resources are available instantly, when required.
- More available – Cloud Data-centers are generally deployed in different places and in different continents. It is easy to to replicate your application in more than one location. So if your primary application is down then you can easily route your traffic to the backup data-center.
- Easy to take backups – Since cost of resources are cheap so it is easy and cost effective to take backups.
- Testing on production level infrastructure – You can easily scale your test environment to have as many servers as production. After the testing is done you can release the extra servers. You only have to pay for the time duration for which you had used the resource. Easy and cost effective.
- Security – Cloud data-centers goes to extreme when it comes to physical security. Also they makes sure that data integrity, confidentiality is maintained at all costs. Finally they make sure that your service is available 24/7. Maintaining such kind of security in traditional data-center is very costly and difficult.
- Creating and maintaining the infrastructure and deploying the application on it much easier than on the traditional server. This becomes even more important if you are a start-up as you don’t have team of qualified infrastructure engineers to guide you through this.
Cloud Deployment model – Based on deployment model, clouds can be classified in following way
- Public Cloud – These are the cloud in which the cloud provider provides all the cloud infrastructure to general public over the internet. They can be provided free or as pay per use.
- Private Cloud – These clouds are maintained solely for a single organization. They can be created by organizations themselves or by any third party.
- Community Cloud – When two or more organization have similar cloud requirements then they can club together to create an cloud infrastructure. These kind of clouds are called community cloud.
- Hybrid Cloud – This is combination of more than one type of cloud. For example lets say that a private cloud has need of more resources then it can collaborate with public cloud player like amazon and avail their resources for any duration of time. Such clouds are called hybrid cloud.
I was always skeptical of cloud as I did not understand what it was. But last month I had an opportunity to attend an AWS workshop. I was able to create an infrastructure model for my application using EC2, RDS, Elastic Cache, S3 and Elastic Load Balancer. After that I was able deploy and scale my application with few clicks of mouse. It was amazing and almost magical. Indeed in my mind, cloud has arrived with a bang, slowly but surely I feel that most application would move to cloud and it is only matter of time before this happens. When US government can host their apps on private cloud maintained by Amazon then there should be something to it. Right?
When I think about this I remember a series of short stories written by Issac Asimov. They were about a giant fictional supercomputer called Multivac. Multivac was something like cloud, only more, Apart from having cloud like character it was also an AI. As the series went by the Multivac evolved to a Cosmic AC which resided in hyperspace. For dear readers here goes the story http://filer.case.edu/dts8/thelastq.htm. Are we moving in that direction? I don’t know I am only an average Human?
Please let me know what you think about this article. Feel free to post questions, together we can answer some of those.