Cloud Computing = Elasticity
At its core cloud computing is a business model innovation. Traditional datacenters have been renting out IT infrastructure by the month for quite some time now. Cloud computing providers have figured out a way to rent this stuff out by the hour. And in that process they have come up with much more scalable and superior way of managing IT resources. This lets businesses scale out their infrastructure when they need to, and more importantly, scale back in when the resources are not needed anymore. Lets take an example of an accounting firm. They will typically have a heavy load during tax season from February to April. This would mean they need more disks to store their data, higher network bandwidth to communicate with other systems, more servers to process all the tax reports, etc. With a traditional datacenter they would typically enter into a long term contract to accommodate the high capacity season, with all the excess capacity being wasted for the rest of the year. On the other hand with a cloud computing provider this accounting firm would scale out their IT infrastructure during tax season, but scale back in for the rest of the year.
Owning and operating a datacenter is a pretty expensive proposition. To begin with a datacenter needs large amounts of space to house the equipment. Next it would need powerful heating, ventilating, and air conditioning (HVAC) systems to control the large quantity of heat that would be generated by all the electronic equipment. By some estimates property and HVAC amount to around 52% of the total cost of operating a datacenter. The next big cost component is the electric power. Then comes the actual hardware – servers, communication and networking infrastructure, data storage equipment, physical security equipment, etc. Last but not least is the software – OS, application software, etc.
- Physical space
Datacenter Business Models
Clearly owning and operating a datacenter is expensive and requires specialized knowledge. Co-location facilities or “colos” make IT resource management one step easy by providing the physical space for rent, where businesses can install their own hardware and operate their own software. The colo takes care of HVAC and power. Managed datacenters make this even easier by renting out the hardware in addition to the space, HVAC, and power. Most managed datacenter providers are also hosters, that is they provide web hosting services where businesses can buy the capability of running their web applications without worrying too much about the underlying infrastructure. Cloud computing providers rent out the same set of IT resources, but by the hour. When a company rents “compute capacity” or “CPU cycles”, they are actually renting the entire gamut of resources that make up a datacenter.
Pillars of Cloud Computing – Multi-tenancy and Virtualization
Multi-tenancy and Virtualization are the two pillars upon which cloud computing stands. One of the ways cloud computing is able to provide IT resources by the hour is to provide a pretty uniform (read non-customized) set of hardware/software that can be easily shared amongst multiple customers. This notion is at the heart of multi-tenancy. To share the same disk or network port or CPU amongst multiple customers, cloud computing providers have evolved better security and data protection mechanisms than traditional datacenters, which didn’t need them to such a degree. The biggest enabler of multi-tenancy is virtualization. One of the most talked about virtualization is machine virtualization via the hypervisor. In this, a high end computer server can host several smaller virtual machines, which for all intents and purposes look like full computers to the applications running on them. It is way more cheap to have a machine with 8 CPU cores run 8 VMs instead of having 8 full single-core servers.
Infrastructure as a Service (IaaS)
It is mostly used by the IT Pro community. IaaS providers provide elastic IT infrastructure resources along with superior IT management. To make a business out of multi-tenancy and virtualization, IaaS providers have come up with better ways of monitoring performance and measuring SLAs to better meter and eventually bill for usage. All of this innovation has led to better and automated provisioning and overall management of IT resources. AWS is the most notable IaaS provider. Windows Azure has also started offering a preview version of their IaaS services.
Platform as a Service (PaaS)
It is mostly used by the developer community. PaaS providers provide a platform to develop and run an online service. It does this by abstracting out the underlying IT infrastructure to the maximum extent possible. Developing online services is hard. Any service that helps in this development – either by simplifying it, or by providing the plumbing for it – qualifies as a PaaS service. Running an online service is even harder. Running includes deploying, testing, and real time monitoring. Any service that helps in running an online service also qualifies as a PaaS service. As you might imagine, a lot of services can fit in this broad definition of PaaS. Several companies are coming up with innovative ways to make it increasingly easy to develop and run an online service. Some PaaS elements that I have seen so far are –
Things that make it easy to develop an online service –
- Programming frameworks: These range from general web application frameworks like Ruby on Rails and ASP.NET to new programming constructs like the web role, worker role, and VM role in Azure.
- Data storage abstractions: Most PaaS providers have distributed storage systems that are URL addressable. AWS has S3, Azure has Azure Storage. This talk gives an in-depth explanation of the Azure Storage system’s architecture.
- Network abstractions: Ability to create and work in a VPN in the cloud, create a virtual IP address (VIP) that fronts multiple instances of a service component – usually a website, etc. are examples of network abstractions in use today.
- Source control system: Heroku is one of the first PaaS provider I saw that had a seamless integration with git providers like github. A git push from your local developer machine resulted in that code being deployed to the cloud.
- Add-on services: An online service typically uses other services like some sort of an Identity service, a mailing service, a logging service, etc. These services are usually third party services made available by the PaaS provider.
Things that make it easy to run an online service –
- Service model: This describes the IT resources this service needs to be deployed
- Configuration management: Ability to update the configuration on a running service, specifying different configuration values for different environments, etc. are examples.
- Rolling upgrades and deployment: Ability to upgrade the online service without taking it down entirely.
- Scaling: Ability to increase and decrease the instances of any service component.
- Multiple pre-production environments: Ability to define different deployment environments for testing purposes.
Is Cloud Computing for me?
YES. For small businesses cloud computing provides a low cost alternative to spinning an entire IT department up. For large enterprises it provides a test bed for newer applications and the ability to burst from on-premises infrastructures onto the cloud for periodic spike in usage. For software startups it provides a low maintenance way to launch new products. As a developer you would need to get up to speed with this new paradigm of software development. As an IT Pro you want to leverage this technology to run your IT organization more efficiently. You get the idea…