CORBA [28] offered programmable interfaces to overcome
the complexities of remote p rocedure calls. Specificatio ns
such as OMA, in the CORBA case, served as reference
architectures for services offered at different levels in the
frameworks, e.g. vertical (industry domain specific) versus
horizontal (infrastructure support) services. These catego-
rizations simplified interoperability and promoted vendor
independence. A decade later the Grid community pro-
posed the Open Grid Services Architecture (OGSA) [20]
as an effort to standardize de-facto Grid service interfaces
and help adoption of Grid technologies across organizations
at a global scale. The Service Oriented Architecture (SOA)
inherent in the WS-I specifications [18] serve a similar pur-
pose for the Web services B2B community.
What differs the Cloud from these earlier technologies
is the “grass-root” evolution of a wide range of technolo-
gies from successful Web 2.0 enterprises such as Google,
Facebook, and Amazon, and the enhanced programmabil-
ity (access to APIs, RPCs, SDKs etc) offered to develop-
ers. This plethora of interfaces brings an unprecedented op-
portunity to systems integrators or mash-up technologists to
realize their business ideas with minimal investment in in-
frastructure development. It can be a daunting task to n av-
igate around the technologies in the Cloud landscape, and
although various mind maps have been proposed (e.g. [57]),
they p rovide little architectural guidance as to how the of-
ferings may be integrated.
In the spirit of earlier distributed co mputing architectures
we therefore propose a first architectural categorization of
Cloud technologies as a stack of service types. Our stack
was inspired by the “everyting as a service” (XaaS) taxon-
omy; Infrastructure as a Service (IaaS), Platform as a Ser-
vice (PaaS), and Software as a Service (SaaS); recent de-
velopments of a Cloud stack for the HP, Intel, and Yahoo!
Open Cirrus Cloud testbed [45]; and a survey of state-of-
the-art Cloud services tools. The stack is depicted in Fig-
ure 1.
2.1. Infrastructure as a Service
On the lowest level of the infrastructure closest to the
hardware we distinguish two types o f services, Physical Re-
source Set (PRS) and Virtual Resource Set (VRS) services.
Both of these service types provide a management front-end
API for a set or pool of resources in order to allow higher
level services to automate setup and tear-down, demand-
based scalability, fail-over and operating system hosting.
Primary functionality includes starting and stopping indi-
vidual resources, OS imaging, network topology setup and
capacity configuration. The PRS layer implementation is
hardware dependent and therefore tied to a hardware ven-
dor, whereas the VRS layer can be built on vendor inde-
pendent hypervisor technology such as Xen [14] or on top
of a PRS service to run in multi-vendor Clouds such as the
Open Cirrus testbed. Examples of PRS services include,
Emulab [33] and iLO [32]. VRS services include Amazon
EC2 [4], Eucalyptus [43], Tycoon [37], Nimbus [36], and
OpenNebula [53]. The reaso n to split these Reso urce Set
(RS) services into two types allows automated management
of physical as well as virtual resources. Furthermote some
Cloud applications may incur too much overhead from run-
ning on a hypervisor but might still want to use similar auto-
mated management capabilities offered by virtual machine
monitors (VMMs) and VMM management toolkits such as
the VRS examples given. Another reason for demarcation
is that different types of resources such as storage, network
and compute node resources might need to be virtualized in
different ways. However, they might still be able to have a
common PRS interface.
One level higher up in the stack but still in the
IaaS category we distinguish three types of Basic Infras-
tructure Services (BIS), computational, storage, and net-
work. Some examples are MapReduce [11] (computa-
tional), GoogleFS [52] (storage), and OpenFlow [39] (net-
work). As the highest level in the IaaS stack we con-
sider Higher Infrastructure Services (HIS). Amazon’s Dy-
namo [22], and Google’s Bigtable [17] all fall into this cat-
egory as they are typically built on top of BIS tools.
2.2. Platform as a Service
Moving up to the PaaS level of our integrated stack
we catego rize the services into Programming Environ-
ments and Execution Environments. Example of the for-
mer is Sun’s project Caroline [42] and the Django frame-
work [13], and examples of the latter are Google’s App En-
gine [24], Joyent’s Reasonably Smart [34] and Microsoft’s
Azure [40]. As seen by these examples an Execution
Environment PaaS typically also encompasses a Program-
ming Environment PaaS. You could potentially replace the
Django framework in Google App Engine with your own
Programming Environment and Microsoft Azure offers a
wide range of alternative programming tools under the
Azure runtime u mbrella. This decoupling between execu-
tion and development environments is thus represented by
having two categories in our stack model.
2.3. Software as a Service
All the applications that run on the Cloud and provide a
direct service to the customer are located in the SaaS layer.
The application developers can either use the PaaS layer to
develop and run their applications or directly use the IaaS
infrastructure. Here we distinguish between Basic Appli-
cation S ervices and Composite Application Services.Ex-
amples of Basic Application Services are the OpenId [46]
24