As depicted in Fig. 2.2 (from [38]), cloud computing brings together a set of
existing technologies to run business in a different way. In the rest of this section we provide an overview of the most influential technologies enabling cloud computing.
Virtualization
Virtualizationis dating back to the early 1960’s, when pioneering experimental
projects developed it as a way of time-sharing very expensive mainframe computers
[17, 87, 149]. Later, in 1972, IBM announced the first release of the Virtual
Machine Facility/370system, better known as VM/370, an operating system which
provided its users with seemingly separate and independent IBM System/360 or System/370 computing systems; this system opened the way to other successful
virtualized systems [55,74,132].
Starting from the 1980’s, virtualization saw a decrease in popularity primar- ily due to a change in computing needs; indeed, the decrease in hardware costs favoured the transition from large centralized mainframes towards a collection a several mini- and micro-computers, making the primary motivation to use virtual- ization (i.e., to increase the level of sharing and utilization of expensive computing resources) disappear. Subsequently, with the introduction of new computing paradigms, like client-server, grid and peer-to-peer computing, new challenging problems, like the need for reliability, security and reduction of management costs, caused the rebirth of the use of virtualization techniques as a way to address theses
problems [63,144]. Virtualization returned to be attractive only recently, when
innovations in hardware, like the Intel-VT [155] and the AMD-V [20] architec-
tures, and their wide availability in both server and client platforms, enabled near bare-metal performance for virtualized operating systems.
Nowadays, virtualization has been proven to be an effective way for driving
server consolidation [166] since it allows the same physical resource to be shared
among multiple applications by deploying each of them into one or more Virtual
Machines(VMs), each of which representing an isolated runtime environment.
The resulting benefit are thus an increase of server utilization and a decrease of management cost.
In the context of cloud computing, resource virtualization is the key ingredient to enable the “on-demand” physical resource provisioning model in the IaaS substrate.
Web Services and Service Oriented Architecture
A cloud computing service is usually exposed as a Web Service (WS), which can
be defined as [34]:
“a software system designed to support interoperable machine-to- machine interaction over a network. It has an interface described in a machine-processable format (specifically Web Services Description
Language(WSDL) [48,47]). Other systems interact with the Web
[77,78], typically conveyed using HTTP with an XML serialization in conjunction with other Web-related standards.”
Thus, WSs provide a standard means of interoperating between different software applications, running on a variety of platforms and/or frameworks.
To organize and orchestrate such services, one usually implements a Service-
Oriented Architecture(SOA) [61]. The purpose of a SOA is to address requirements
of loosely coupled, standards-based, and protocol-independent distributed comput- ing. The building blocks of a SOA are “services", which are well-defined, loosely coupled, self-contained modules that provide standard business functionality and are independent of the state or context of other services. Services, rather than embedding calls to each other, use defined protocols that describe how services pass and parse messages using description metadata.
The potential of WSs and SOA is in the possibility they offer for system integration. As a matter of fact, cloud applications can be built as compositions of other services (also referred to as service mashups) from the same or different providers.
Utility Computing
The utility computing paradigm [136,145] brings to the IT world the concept
of “pay-as-you-go” business model, typical of traditional public utility (like gas, electricity, water and telephony). Under this paradigm, computing resources themselves are considered an utility service as much like water and public telephony.
According to [145], utility computing is
“a collection of technologies and business practices that enables com- puting to be delivered seamlessly and reliably across multiple comput- ers. Moreover, computing capacity is available as needed and billed according to usage, much like water and electricity are today.”
Thus, in the context of utility computing, on one hand, service consumers assign to their jobs a “utility” value, representing the amount they are willing to pay a service provider to get their service level constraints satisfied; while, on the other
hand, service providers attempt to maximize their own utility (which may include their profit).
Cloud and utility computing shares several concepts. Specifically, utility com- puting can be considered the precursor of cloud computing, which in turn can be viewed as a broader concept which encompasses the utility computing one.
Autonomic Computing
The autonomic computing paradigm [98], a term derived from human biology, has
been introduced in order to make complex systems able to regulate and maintain themselves without human intervention. Specifically, as the autonomic human nervous system monitors our main vital activities with any our conscious effort, in much the same way a self-managing autonomic system should monitor and manage itself without human involvement. This can be achieved by following the
Monitor, Analysis, Plan, Execute, and Knowledge(MAPE-K) control loop model
[90], whereby the system relies on monitoring probes and gauges (e.g., sensors), on
an adaptation engine (e.g., autonomic manager) for computing optimizations based on observed data, and on effectors to act on the system itself. A system, in order to reach the self-managing behavior, should exhibit the so called Self-* properties:
Self-Configuration(for automatically configuring its components), Self-Healing
(for automatically discover and correct system faults), Self-Optimization (for auto- matically controlling and monitoring performance goals) and Self-Protection (for automatically protecting and discovering from malicious attacks).
In the context of cloud computing, concepts inspiring autonomic computing could be borrowed to automate the management of the IaaS substrate. As a matter of fact, IaaS is usually incarnated in the form of large and possibly world-wide distributed data centers, that need to managed efficiently. Thus, in this sense, the concepts of autonomic computing may inspire software technologies for data center automation, which may perform tasks such as management of service levels of running applications, management of data center capacity, proactive disaster recovery, and automation of VM provisioning.