We hear a lot of buzz from this topic lately but first we have to understand what cloud computing really is, so let's define cloud computing as the use of computing devices (software and hardware) that are delivered as a service over the network (typically the internet)[1]. Let's remember that this type of service is most of the time considered ubiquitous.

Cloud computing is often separated into many different groups, which offer different types of services, where the most common ones are SaaS, PaaS and IaaS, which respectively stand for: software as a service, platform as a service and infrastructure as a service. There are also other types of groups inside cloud computing that are subsets of those three bigger groups such as DBaaS (database as a service). Heroku is a DBaaS and is also PaaS, which expresses more widely what Heroku really does, so in that case DBaaS is a subset of PaaS.

Before we talk more specifically about those three groups, let's make some observations on the objectives of a typical cloud computing system in the form of an enumeration:
(1) Shared infrastructure (Clients will use the same infrastructure)
(2) Services ondemand
(3) Scalability
(4) The price of the service will be based on the amount of resources used, which is the new model for enterprise softwares
(5) Transparency on the use of information
(6) Diversity on the types of clouds, they can be either public, private or hybrid

Let's talk about SaaS

SaaS has some common characteristics such as:
(1) The web is generally used as an interface
(2) Centralized place to manage information
(3) Software patches are done server side, the clients' have no need to update softwares
(4) Application is offered to many, not to specific customers

SaaS generally satisfies enterprises' needs, but sometimes companies have restrictions such as privacy of information and in such cases SaaS does not satisfy their needs.

Let's talk about PaaS

Platform as a service is very similar to SaaS, but instead of offering software as a service, it offers an environment for customers to create, host and control their own software. PaaS is generally used when it is necessary to have a central place to control the life cycle of software engineering.

PaaS also has some common characteristics which i'll list below:
(1) Database integration
(2) Environment for the development of software integrated (source version control systems, team collaboration systems, test framework, hosting management, etc)
(3) Scalability and failover methods
(4) Integrated security

Some common examples of PaaS systems are Google App Engine, Microsoft Azure and Heroku. It fails though to handle cases when proprietary languages are required.

Let's talk about IaaS

Infrastructure as a service is the hiring of virtual machines, server storage, network and other infrastructure resources as services. The idea of scaling things is used constantly on IaaS so that it is possible to satisfy the clients' needs of infrastructure.

There are different categories on IaaS such as public, private and hybrid clouds. Public and private clouds are infrastructures that were built but that are either constructed on a public or private network and hybrid clouds is the combination of public and private clouds.

Some common characteristics of IaaS are:
(1) Resources are hired as service
(2) Different price according to use and amount of resources demanded
(3) High scalability and efficiency
(4) Advanced management options

Enterprises' regulations for privacy of data and specified performance necessities might make the use of IaaS inappropriate.

[1] Wikipedia