When putting my head into The Cloud for the first time, I found it very confusing to understand what Cloud Computing means as a term and what it means to me as a developer, specifically
- What are the core concepts of Cloud Computing?
- What are the different types of Cloud Computing?
A short while ago, I happened to dig into this topic because I was giving a talk on Cloud Computing. I’ll post a quick roundup in case anybody is interested.
I like to compare the term Cloud Computing to AJAX. Just like with AJAX, the technology behind Cloud Computing is not completely new or even revolutionary. And just like with AJAX, it actually makes a fair bit of sense to give a bunch of known technologies a new name once you herd them together for a specific purpose, because now whenever someone uses this new term everybody else will know what the heck he is talking about, including
- What technology is being used
- What kind of problems are likely being addressed
- That he is indeed very cool
Or so it should be. I have to say, since Cloud Computing became such a hype and everybody is doing Cloud right now, it doesn’t help in understanding what actually is going on.
Enough talk, you might say, and you’d be right. Let’s get started.
The most important idea behind Cloud Computing is <Anything> as a Service. Again, the idea of aaS is not brand new. As Rob Conery once pointed out (can’t quite remember where it was), by taking a taxi you’re already leveraging the idea of aaS. Rob called this Car as a Service, and we will quickly look at what aaS means and how we can apply it to cars.
- No aquisition costs, no overhead costs: You did not have to buy a car to get you to the train station and you do not have to pay a fixed amount of money per month to get the right to call a taxi whenever you need it.
- Variable costs: You only pay for what you consume. In case of a taxi, this is being calculated by distance and time.
- Hidden complexity and maintenance: Some of the major headaches in using a system are being abstracted so you don’t have to care about them. In this case, you don’t care how difficult it is to start that old engine or how often, why and when they have to take it to a workshop to keep it from falling apart as long as you still catch your train.
- Economies of scale: Okay, maybe our example doesn’t work too well for that one, but image that they’re buying lots of taxis and therefore get an amazingly low price and then you as a customer will benefit from that. Right?
- Scalability: In some scenarios, most of the time you need very little resources and suddenly there is a peak and you need lots of it. For example, one day you need to get your whole family (really the whole family: children, parents, relatives) to the train station. You certainly don’t want to buy 4 cars and have them standing around the whole time just to be prepared for this rare occasion? Just get 4 cabs instead of one and you’ll be fine. That’s what I call scalability.
That CaaS comparison worked pretty well for me to show what aaS is about. Then I started to wonder what it means when applied to computers instead of cars.
As mentioned above, we can apply this Service principle to virtually anything by just sticking one letter in front of aaS and you’re done. Let anyone else figure out what you meant by it. There are a lot of services in the area of Cloud Computing, that’s one reason why it is such a big mess when you look at it first. I found it helpful to distinguish between 3 different types of Cloud Computing, although there are more and one size doesn’t fit all.
Infrastructure as a Service (IaaS)
In this simplified 3-tier view of Cloud Computing, IaaS is at the bottom of our stack and the most basic layer. It basically provides abstraction over hardware (in fact, IaaS was formerly called Hardware as a Service) by applying the principles of aaS to bare metal. I like to see Amazon Web Services (AWS) as a good example for IaaS. Their services include:
- Elastic Compute Cloud (EC2): provides you with virtual machines (they are using XEN virtualisation) that are running in Amazon’s datacenter once you fired them up (the VMs, not Amazon). Their EC2 pricing model says you pay them on an hourly basis for that. That’s it! Here is our aaS principle again: No registration fees, no monthly fees, no overhead costs.
- Simple Storage Service (S3): This is a persistent storage service (see, we could already call that Storage as a Service). It goes like this: Once you’ve uploaded your file, they will replicate it so you don’t have to think about backup. You will pay them based on your usage which is, in this case, measured by 1) storage size, 2) time and 3) data transfer (in and out)
They have a lot of other services and are constantly addind new ones, however these two are what I believe to be the most commonly used ones. All of their services are directly accessible as web services (useful for programmatic control) as well as by their management console.
In IaaS, you are admin for every virtual machine you create. You can install every software you need (web server, database and so on), you can also use the programming language of your choice to implement your application you want to host. This gives you great flexibility, but also great responsibility because, at this point, it’s only the hardware you do not have to care about. You still have to patch your OS and all the software you installed, for example. In theory, this gives you infinite scalability in matters of minutes since all resources are virtualized and at every given point in time you could step up and say “give me two more of these”.
Now let’s move on in the stack.
Platform as a Service (PaaS)
PaaS provides more abstraction than IaaS because in addition to hardware, it also provides an abstraction layer for the OS as well as commonly used components like web server, database, load balancer and the likes. One example for PaaS is Microsoft’s Azure platform. Although we’ve been told that Azure is an OS for the cloud, we never actually see this OS because we’re using PaaS.
We’re not admins, we don’t get access to the OS which means we can’t choose what to install and we don’t have to. The responsibility for patching and maintenance for all necessary components is now up to the PaaS provider. For every programming language (Azure currently supports .NET and PHP) a PaaS provider will need another set of tools to run your app. You as developer take your application, load it up to the PaaS provider and say ‘run it’.
See the difference to IaaS? PaaS is a more specialised stack which takes away work as well as decisions. If this doesn’t limit you too much (do they support your programming language?), PaaS will get you started more quickly.
Time for the next step.
Software as a Service (SaaS)
With SaaS, we’re leaving the Cloud Computing domain for developers and enter that for end users. What can Cloud Computing do for end users? All the principles of taxis should apply here too.
With SaaS, you don’t buy the software. You only pay for it when you use it. You don’t have to install it on your machine, it’s running somewhere else and someone else takes care of it. You just use it. Sometimes it’s even free until you need more advanced functionality. Picnik, for example, lets you edit your pictures online, right in your browser. It’s free and gives you enough options for the occasional picture manipulation session, removing the need to install a full-blown image manipulation solution on your machine.
To summarize …
There are 3 manifestations of Cloud Computing:
- Infrastructure as a Service (IaaS)
- Platform as a Service (PaaS)
- Software as a Service (SaaS)
With CC, you get different levels of SEP (Somebody Else’s Problem). Depending on which layer of Cloud Computing you’re using, someone else will take care of necessary hardware, operating system or even a complete application.
The goal is to reduce upfront investments, complexity and time to market and to allow for great scalability and economies of scale using virtualized resources.
Usage in Cloud Computing typically is measured as
- Time (CPU time or real time)
- Data transfer (inbound and outbound)
- Storage (measured in MB or GB)
- Number of transactions (like GET and PUT)
I hope that helped anybody to see Cloud Computing in a less foggy way.