Defining Cloud Computing from the scratch

Infrastructure as a Service (IaaS)
IaaS clouds make it very easy and affordable to provision resources such as servers, connections, storage, and related tools necessary to build an application environment from scratch on-demand. IaaS clouds are the underlying infrastructure of PaaS and SaaS clouds. A common characteristic of IaaS clouds is that they are more complex to work with but with that complexity comes a high degree of flexibility. So, these are generally lower level services in the grand scheme of things; not in a derogatory sense of course. You’ll be dealing with virtual machines, operating systems, patches, and various other issues. You’ll likely require some specialized help to make it all work well.
Some current examples of these types of services are (some of these are hybrids too but I put them where the most belong in my opinon).
Amazon Web Services - Extremely flexible Build your own w/ many add-ons
VMWare - Build your own
Elastra - Up an comer build and manage your own IaaS
3Tera - Sexy GUI based IaaS/PaaS building tools
Xen - Build your own
XCalibre - Very interesting and can do Linux or Windows
Nirvanix - All about cloud storage, very interesting subset similar to Amazon S3
EngineYard - Rails only Build your own
Joyent - Build your own on Solaris w/ Java/PHP/Rails/Python
The number one benefit of such services is rapid provisioning. You will not have to wait days, weeks, or months for new servers. In some cases, you can have them in minutes! In fact, it’s so easy to provision that it’s easier to just throw away “broken” servers and replace them with new instances in most cases. All the details of provisioning, racking, stacking, cabling, and more are completely abstracted away from you.
The developers of applications for such systems will often need to adjust things to accommodate for the IaaS cloud. It can also be somewhat difficult to move from one cloud to another in some cases. But, less so with IaaS clouds than the PaaS clouds we will discuss next.
Billing for these services is usually incremental by use and can get complex with tiered on-demand pricing that can be difficult to track in real time. Pricing is usually well defined but can be rather difficult to forecast in some cases. It can vary to the minute depending on levels of use, tiers of service, and other interesting combinations. Now, on to the second type of cloud computing model that’s important in the context of this article.
Platform as a Service (PaaS)
PaaS clouds are designed, often within IaaS Clouds by experts to make the deployment and scalability of your application trivial and your costs incremental and reasonably predictable. Here are a few of the choice Application Stack Cloud Providers (ASCP) in this space today.
Mosso, PHP, .NET, Java, Rails, Python, other?
Google App Engine, Python
SalesForce - Proprietary
Morph - Ruby on Rails
Heroku - Ruby on Rails
There are more and more PaaS clouds sprouting up constantly and rapidly. The number one benefit of such a service is that for very little money, none in some cases, you can launch your application with little effort beyond having developing and and possibly some porting work if it’s an existing application. Additionally, there will be a large degree of scalability built into your PaaS choice by design as it is a cloud as defined earlier in the article. Finally, you will not need to hire a professional systems administrator more than likely as they are part of the service itself. If you are trying to keep your operations staff lean this can be a useful path to follow assuming your application will capitulate.
The number one down side of choosing an PaaS Cloud provider is that all such services come with various restrictions or trade-offs that may be a non-starter for your project. This is especially true of you already have a pre-existing application that might need to be ported to the PaaS solution you choose. You will need to plan on some porting development time costs and it might not be trivial. For example, a particular PHP extension, rails gem, or operating system tool may be unavailable that your application needs and you’ll have to code around these types of issues as your ability to add this to an Application Platform Cloud will be limited unless it’s a custom PaaS.
Billing for these services varies. It can be by the hour, request, CPU cycle, or other creative ways. Some even help you do pass through billing for your customers; like Mosso. But, the defining factor in pricing of Application Platform Clouds is that they generally strive to be robust, simple, and easy to load your application into when you are ready.
Software as a Service (SaaS)
Software as a Service has been around for a while now and actually precedes the newer term Cloud Computing. What’s interesting, and the reason to include SaaS in this article is that Cloud Computing is breathing ever more life into the SaaS model by reducing the costs associated with producing a SaaS application. A couple of well known examples of SaaS are GMail or Salesforce.
SaaS is not really the ultimate goal of Cloud Computing per say but it is an important, relevant, and right now step along the evolution of compute resource management and allocation.
In summary, understanding cloud computing requires some base knowledge and historical review to know where it came from. This will enlighten people that it’s not exactly new but that there is a new excitement now due to technology and business convergence. Once you have that base, which you now do, explicitly learning to use the cloud is the next step. Then, you can almost certainly implement your ideas faster, cheaper, and more profitably than people have ever been able to do before.
So why are we defining all these terms here again when everyone else has already defined them here, here, here, here, here, here, here, here, here, etc? Heck, there’s even a definition for Web 3.0 and beyond. Wait, let’s not forget the authoritative definitions from Wikipedia on Cloud Computing, Software-as-a-Service and Platform-as-a-Service! Whew…are we there yet? Of all these different definitions, the one that made most sense is by Kent Langley over at ProductionScale.
So why are we defining these terms again here? The reason is that all these different postings and definitions is making the view a bit cloudy and I just really needed to get them straight in my head. At the same time, I want to be able to explain these concepts to my grandma. Ok, maybe not my grandma, but definitely my executive management team.
As I see it, the market today really has 3 different as-a-Service (aaS) offerings:
- Infrastructure-as-a-Service
- Platform-as-a-Service
- Software-as-a-Service

To illustrate these 3 different offerings, let’s take a look at the traditional deployment of a web application. Whenever a piece of software is to be deployed, we must acquire the server hardware from companies like HP, Dell or IBM. The server will likely come with built-in storage; or if additional storage is required, the server can connect to a NAS, SAN, CAS, or other types of storage. If we are deploying this web application for external use, we will likely need to acquire routers, switches, firewalls, VPNs, load balancers and other type of data center equipment in order to ensure uptime and security. We will then need to acquire some space and bandwidth in order to host the equipment and allow external users to access the web application. In the “Web 1.0″ days, companies such as Exodus (acquired by Savvis) and Rackspace were providers that offered such space and pipe for enterprise companies who want to have a web presence.
Once the server is available, an operating system such as Windows or Linux must be installed. Once that’s done, depending on the language of the web software, an application server stack must be installed. For example, LAMP for languages such as Perl, Python or PHP, Ruby on Rails for Ruby, Tomcat for Java, etc. In almost all cases, a piece of database software, such as MySQL or PostgreSQL, will be required.
Once the hardware and the application server stack are in place, the actual web application can then be installed or developed.
In these three steps, we have essentially installed and configured the “infrastructure,” the “platform,” and the “software.” The following image hopefully illustrates what we just described.


