Cloud Computing
Mod
ule I
Building Cloud Computing
Environments, Computing
Platforms and Technologies,
Principles of Parallel and
Distributed Computing: Eras of
Computing, Parallel vs. Distributed
Computing, Elements of Parallel
Computing, Elements of
Distributed Computing.
The cloud is a large group of interconnected computers.
These computers can be personal computers or network
servers; they can be public or private.
Cloud computing is a technology that uses the internet and
central remote servers to maintain data and applications.
CHARACTERISTICS OF CLOUD COMPUTING
1. Cloud computing is user-centric. Once users are connected to the cloud,
whatever is available (stored) in cloud as documents, messages, images,
applications, it becomes users own. Users can also share it with others.
2. Cloud computing is task-centric. It focusing on the application for users on
what users need to done and how the application can do it for users. Eg collage,
Animation, Movie in Google Photos
3. Cloud computing is powerful. Connecting hundreds or thousands of computers
together in a cloud creates a wealth of computing power impossible with a single
desktop PC.
4. Cloud computing is accessible. Data is stored in the cloud; users can instantly
retrieve more information from multiple repositories. You’re not limited to a single
source of data.
5. Cloud computing is intelligent. With all the various data stored on the
computers in a cloud, data mining and analysis are necessary to access that
information in an intelligent manner.
PROS OF CLOUD COMPUTING
Lower-Cost Computers for Users
• Improved Performance
• Lower IT Infrastructure Costs
• Fewer Maintenance Issues
• Lower Software Costs
• Instant Software Updates
• Unlimited Storage Capacity
• Increased Data Safety
• Easier Group Collaboration
• Universal Access to Documents
• Latest Version Availability
CONS OF CLOUD COMPUTING
● Requires a Constant Internet Connection
● Doesn’t Work Well with Low-Speed Connections
● Can Be Slow
● Features Might Be Limited
● Stored Data Might Not Be Secure
● Problem will arise If Data loss occurs
HISTORICAL DEVELOPMENTS
Client/Server Computing: Centralized
Applications and Storage
In client/server model all the software applications, data,
and the control resided on huge mainframe computers,
known as servers.
If a user wanted to access specific data or run a program,
he had to connect to the mainframe, gain appropriate
access, and then do his business.
Users connected to the server via a computer terminal,
called a workstation or client.
Drawbacks in client /server Model
Even on a mainframe computer, processing power is limited.
Access was not immediate nor could two users access the same data
at the same time.
When multiple people are sharing a single computer, you have to
wait for your turn.
There isn’t always immediate access in a client/server environment.
So the client/server model, while providing similar centralized
storage, differed from cloud computing in that it did not have a
user-centric focus.
It was not a user-enabling environment.
Peer-to-Peer Computing: Sharing
Resources
P2P computing defines a network architecture in which each
computer has equivalent capabilities and responsibilities.
In the P2P environment, every computer is a client and a
server; there are no masters and slaves.
P2P enables direct exchange of resources and services. There
is no need for a central server, because any computer can
function in that capacity when called on to do so.
P2P was a decentralizing concept. Control is decentralized,
with all computers functioning as equals.
Distributed Computing: Providing More
Computing Power
One of the subsets of the P2P model.
Distributed computing, where idle PCs across a network or
Internet are tapped to provide computing power for large,
processor-intensive projects.
Collaborative Computing: Working as a
Group
Multiple users to work simultaneously on the same computer-based
project called collaborative computing. The goal was to enable
multiple users to collaborate on group projects online, in real time.
To collaborate on any project, users must first be able to talk to one
another. Most collaboration systems offer the complete range of
audio/video options, for full-featured multiple-user video
conferencing.
In addition, users must be able to share files and have multiple
users work on the same document simultaneously.
Cloud Computing: The Next Step in
Collaboration
With the growth of the Internet, there was no need to limit
group collaboration to a single enterprise’s network
environment.
Users from multiple locations within a corporation, and from
multiple organizations, desired to collaborate on projects that
crossed company and geographic boundaries.
Cloud Computing Services
The three major Cloud Computing Offerings are
● Software as a Service (SaaS)
● Platform as a Service (PaaS)
● Infrastructure as a Service (IaaS)
SaaS (Software as a Service)
● SaaS or software as a service is a software distribution model in
which applications are hosted by a vendor or service provider and
made available to customers over a network (internet).
● SaaS provides a complete software solution that you purchase on
a pay-as-you-go basis from a cloud service provider.
● SaaS applications are sometimes called Web-based software,
on-demand software, or hosted software.
Examples of popular SaaS products:
● Google Workspace
● Salesforce
● Zoom
● Adobe Creative Cloud
● Netflix
PaaS (Platform as a Service)
Platform as a service, is referred as PaaS, it provides a platform
and environment to allow developers to build applications and
services. This service is hosted in the cloud and accessed by the
users via internet.
● Cloud infrastructure: Data centers, storage, network equipment, and
servers
● Middleware software: Operating systems, frameworks, development
kits (SDK), libraries, and more
● User interface: A graphical user interface (GUI), a command line
interface (CLI), an API interface
IaaS (Infrastructure as a Service)
IaaS (Infrastructure As A Service) is one of the fundamental
service model of cloud computing alongside PaaS( Platform as a
Service).
It provides access to computing resources in a virtualized
environment “the cloud” on internet.
It provides computing infrastructure like virtual server space,
network connections, bandwidth, load balancers and IP
addresses.
The pool of hardware resource is extracted from multiple
servers and networks usually distributed across numerous data
centers.
CLOUD COMPUTING PLATFORMS AND
TECHNOLOGIES
Amazon Web Services (AWS) –
AWS provides different wide-ranging clouds IaaS services, which ranges from virtual compute,
storage, and networking to complete computing stacks.
AWS is well known for its storage and compute on demand services, named as Elastic Compute
Cloud (EC2) and Simple Storage Service (S3).
EC2 offers customizable virtual hardware to the end user which can be utilized as the base
infrastructure for deploying computing systems on the cloud.
S3 is well ordered into buckets which contain objects that are stored in binary form and can be
grown with attributes. End users can store objects of any size, from basic file to full disk images
and have them retrieval from anywhere.
In addition, EC2 and S3, a wide range of services can be leveraged to build virtual computing
systems including: networking support, caching system, DNS, database support, and others.
Google AppEngine
Google AppEngine is a scalable runtime environment frequently dedicated to executing web
applications.
● These utilize the benefits of the large computing infrastructure of Google to dynamically
scale as per the demand.
● AppEngine offers both a secure execution environment and a collection of which simplifies
the development of scalable and high-performance Web applications.
● These services include: in-memory caching, scalable data store, job queues, messaging,
and corn tasks.
● Currently, the supported programming languages are Python, Java, and Go.
Microsoft Azure–
● Microsoft Azure is a Cloud operating system and a platform in which users
can develop the applications in the cloud.
● Azure provides a set of services that support storage, networking, caching,
content delivery, and others
Hadoop
● Apache Hadoop is an open source framework that is appropriate for
processing large data sets on commodity hardware.
● Hadoop is an implementation of MapReduce, an application programming
model which is developed by Google.
● This model provides two fundamental operations for data processing: map
and reduce.
[Link] and [Link] –
● [Link] is a Cloud computing platform at which users can develop
social enterprise applications.
● The platform is the basis of [Link] – a Software-as-a-Service
solution for customer relationship management.
● [Link] allows creating applications by composing ready-to-use
blocks: a complete set of components supporting all the activities of an
enterprise are available.
Manjrasoft Aneka
It supports a collection of programming abstractions for developing applications and a
distributed runtime environment that can be deployed on heterogeneous hardware (clusters,
networked desktop computer)
. Developers can choose different abstractions to design their application: tasks, distributed
threads, and map-reduce.
These applications are then executed on the distributed service-oriented runtime
environment, which can dynamically integrate additional resource on demand.
Difference between Parallel Computing and
Distributed Computing
Parallel Computing: In parallel computing multiple processors performs multiple tasks
assigned to them simultaneously. Memory in parallel systems can either be shared or
distributed. Parallel computing provides concurrency and saves time and money.
Distributed Computing: In distributed computing we have multiple autonomous computers
which seem to the user as a single system. In distributed systems there is no shared
memory and computers communicate with each other through message passing. In
distributed computing a single task is divided among different computers.
ELEMENTS OF PARALLEL COMPUTING
The primary goal of parallel computing is to increase the computational power available to your essential applications.
In the earliest computer software, that executes a single instruction at a time that has written for serial computation. A
Problem is broken down into multiple series of instructions, and that Instructions executed one after another.
Only one computational instruction complete at a time.
Main Reasons to use Parallel Computing is that:
1. Save time and money.
2. Solve larger problems.
3. Provide concurrency.
4. Multiple execution units
Types of parallel computing
Processing of multiple tasks simultaneously on multiple processors is called parallel processing.
The parallel program consists of multiple active processes (tasks) simultaneously solving a given
problem.
A given task is divided into multiple subtasks using a divide-and-conquer technique, and each subtask
is processed on a different central processing unit (CPU).
Programming on a multiprocessor system using the divide-and-conquer technique is called parallel
programming.
Bit-level parallelism In the Bit-level parallelism every task is running on the processor level and depends on
processor word size (32-bit, 64-bit, etc.) and we need to divide the maximum size of instruction into multiple
series of instructions in the tasks. For Example, if we want to do an operation on 16-bit numbers in the 8-bit
processor, then we would require dividing the process into two 8 bit operations.
Instruction-level parallelism (ILP): Instruction-level parallelism (ILP) is running on the hardware level
(dynamic parallelism), and it includes how many instructions executed simultaneously in a single CPU clock
cycle.
Data Parallelism: The multiprocessor system can execute a single set of instructions (SIMD), data parallelism
achieved when several processors simultaneously perform the same task on the separate section of the
distributed data.
Task Parallelism :Task parallelism is the parallelism in which tasks are splitting up between the processors to
perform at once.
Hardware architectures for parallel processing
1. Single-instruction, single-data (SISD) systems
2. Single-instruction, multiple-data (SIMD) systems
3. Multiple-instruction, single-data (MISD) systems
4. Multiple-instruction, multiple-data (MIMD) systems
Single-instruction, single-data (SISD) systems (uniprocessor machine capable of executing a
single instruction) [Sequential Computers)
1. Machine Instructions are
Processed sequentially
2. All the instructions and data to
be processed have to be
stored in primary memory
3. The speed of the processing
element in the SISD model is
limited by the rate at which
the computer can transfer
information internally
Single-instruction, multiple-data (SIMD) systems
1. multiprocessor machine capable of
executing the same instruction on all
the CPUs but operating on different
data streams
Multiple-instruction, single-data (MISD) systems
multiprocessor
machine capable of
executing different
instructions on
different PEs but all
of them operating
on the same data set
Multiple-instruction, multiple-data (MIMD) systems
multiprocessor machine
capable of executing multiple
instructions on multiple data
sets
MIMD machines are broadly
categorized into
shared-memory MIMD and
distributed-memory MIMD
Shared Memory MIMD( Systems based on this model are also called loosely coupled
multiprocessor systems.)
Distributed Memory MIMD(Systems based on this model are also called
tightly coupled multiprocessor systems.)
1. shared-memory MIMD architecture is easier to program but is less tolerant
to failures
2. Failures in a shared-memory MIMD affect the entire system
3. shared memory MIMD architectures are less likely to scale
4. distributed memory MIMD architectures are most popular today.
Approaches to parallel programming
A sequential program is one that runs on a single processor and has a single
line of control.
the program divided into smaller independent chunks so that each processor
can work on separate chunks of the problem
A wide variety of parallel programming approaches are available.
❏ Data parallelism
❏ Process parallelism
❏ Farmer-and-worker model
In the case of data parallelism, the divide-and-conquer technique is
used to split data into multiple sets, and each data set is processed
on different PEs using the same instruction.
In the case of process parallelism, a given operation has multiple (but
distinct) activities that can be processed on multiple processors.
In the case of the farmer and-worker model, a job distribution
approach is used: one processor is configured as master and all other
remaining PEs are designated as slaves; the master assigns jobs to
slave PEs and, on completion, they inform the master, which in turn
collects results.
Levels of parallelism
Levels of parallelism are decided based on the lumps of code (grain size) that
can be a potential candidate for parallelism
goal
to boost processor efficiency by hiding latency.
To conceal latency, there must be another thread ready to run whenever a
lengthy operation occurs.
The idea is to execute concurrently two or more single-threaded applications,
such as compiling, text formatting, database searching, and device simulation.
Task Level
Control level
Data level
Multiple -instruction issue
Elements of distributed computing
A distributed system is a collection of independent computers that appears to
its users as a single coherent system
A distributed system is one in which components located at networked
computers communicate and coordinate their actions only by passing
messages.
Layered view of Distributed System
At the very bottom layer, computer and network hardware constitute the physical
infrastructure; these components are directly managed by the operating system,
which provides the basic services for interprocess communication (IPC), process
scheduling and management, and resource management in terms of file system and
local devices.
At the operating system level, IPC services are implemented on top of standardized
communication protocols such Transmission Control Protocol/Internet Protocol
(TCP/IP), User Datagram Protocol (UDP) or others.
The top of the distributed system stack is represented by the applications and
services designed and developed to use the middleware
The middleware layer leverages such services to build a uniform environment
for the development and deployment of distributed applications. This layer
supports the programming paradigms for distributed systems. the
middleware develops its own protocols, data formats, and programming
language or frameworks for the development of distributed applications.
Architectural styles for distributed computing
Although a distributed system comprises the interaction of several layers, the
middleware layer is the one that enables distributed computing.
Architectural styles are mainly used to determine the vocabulary of
components and connectors that are used as instances of the style together
with a set of constraints on how they can be combined .
the architectural styles into two major classes:
• Software architectural styles
• System architectural styles
Software architectural styles
Software architectural styles are based on the logical arrangement of software
components.
Data centered architectures-repository & Blackboard
These architectures identify the data as the fundamental element of the
software system, and access to shared data is the core characteristic of the
data-centered architectures.
Repository architecture style is characterized by two main components: the
central data structure, which represents the current state of the system, and a
collection of independent components, which operate on the central data.
repository-based architectures differentiate and specialize further into
subcategories according to the choice of control discipline to apply for the
shared data structure.
The blackboard architectural style is characterized by three main components:
• Knowledge sources. These are the entities that update the knowledge base
that is maintained in the blackboard.
• Blackboard. This represents the data structure that is shared among the
knowledge sources and stores the knowledge base of the application.
• Control. The control is the collection of triggers and procedures that govern
the interaction with the blackboard and update the status of the knowledge
base.
Data-flow architectures: data flow styles explicitly incorporate the pattern of data flow
Batch Sequential Style. The batch sequential style is characterized by an
ordered sequence of separate programs executing one after the other. These
programs are chained together by providing as input for the next program the
output generated by the last program after its completion, which is most likely
in the form of a file.
Pipe-and-Filter Style. The pipe-and-filter style is for expressing the activity of
a software system as sequence of data transformations. Each component of
the processing chain is called a filter, and the connection between one filter
and the next is represented by a data stream. data is processed incrementally
and each filter processes the data as soon as it is available on the input
stream.
Virtual machine architectures
This styles is characterized by the presence of an abstract execution
environment (generally referred as a virtual machine) that simulates features
that are not available in the hardware or software.
Rule-Based Style. Programs are expressed in the form of rules or predicates
that hold true. The input data for applications is represented by a set of
assertions or facts to activate rules or to apply predicates, thus transforming
data. The output can either be the product of the rule activation or a set of
assertions that holds true for the given input data.
Interpreter Style. The core feature of the interpreter style is the presence of
an engine that is used to interpret a pseudo-program expressed in a format
acceptable for the interpreter. Systems modeled according to this style exhibit
four main components:
the interpretation engine that executes the core activity of this style,
an internal memory that contains the pseudo-code to be interpreted,
a representation of the current state of the engine,
and a representation of the current state of the program being executed.
Call & return architectures
identifies all systems that are organised into components mostly connected
together by method calls.
it is possible to identify three major subcategories,
Top-Down Style.:
divide-and-conquer approach to problem resolution.
one large main program that accomplishes its tasks by invoking subprograms
or procedures.
The calling program passes information with parameters and receives data
from return values or parameters
The overall structure of the program execution at any point in time is
characterized by a tree, the root of which constitutes the main function of the
principal program.
Object-Oriented Style.