Chapter 2
Chapter 2
(3rd Edition)
Architectures
• Distributed Systems are often complex pieces of software
• Those components are by definition dispersed across
multiple machines
• There are different ways on how to view the organization of
DS
• Logical organization of the collection of software
components
• The actual physical realization
• The organization of DS is mostly about the SW components
that constitute the system
• The Software architectures tell us
• how the various software components are to be organized, and
• how they should interact
2 / 36
Outline
• Architectural styles
• Middleware organization
• System architecture
Architectures: Architectural styles
Architectural styles
Basic idea
A style is formulated in terms of
► (replaceable) components with well-defined interfaces
► the way that components are connected to each other
► the data exchanged between components
► how these components and connectors are jointly configured into
a system.
Connector
A mechanism that mediates communication, coordination, or
cooperation among components. Example: facilities for (remote)
procedure call, messaging, or streaming.
4 / 36
Architectures: Architectural styles
Architectural styles
Important note
Most real-world distributed systems combined different styles
5 / 36
Architectures: Architectural styles Layered architectures
Layered architecture
6 / 36
Architectures: Architectural styles Layered architectures
Layered architecture
Handle
Upcall
Layer N-2
Layer N-2
Layer 2
Layer N-3
Layer 1
7 / 36
Architectures: Architectural styles Layered architectures
Layer N Layer N
Interface Service
Two-party communication
Server
1 from so ck et import *
2 s = socket(AF_INET, SOCK_STREAM)
3 (conn, a d d r) = s . a c c e p t ( ) # re t u r n s new s o c k e t and a d d r. c l i e n t
4 while True: # f o re v e r
5 d a t a = conn.recv(1024) # re c e i v e data from c l i e n t
6 i f not d a t a : break # s t o p i f c l i e n t stopped
7 conn.send(str(data)+" * ") # re t u r n s e n t data p l u s an " * "
8 co n n .clo se() # c l o s e t h e connection
Client
1 from so ck et import *
2 s = socket(AF_INET, SOCK_STREAM)
3 s.connect((HOST, PORT)) # connect t o s e r v e r (b l o c k u n t i l accepted)
4 s. se n d ( ’He l l o , world’) # send some data
5 d a t a = s.recv(1024) # re c e i v e t h e response
6 print d a t a # p rin t th e re su l t
7 s.close() # c l o s e t h e connection
Application Layering
Application layering 6 / 36
Architectures: Architectural styles Layered architectures
Application Layering
Observation
This layering is found in many distributed information systems, using
traditional database technology and accompanying applications.
Application layering 6 / 36
Architectures: Architectural styles Layered architectures
Application Layering
HTML page
Keyword expression containing list
HTML
generator Processing
Query Ranked list level
generator of page titles
Ranking
Database queries algorithm
Application layering 7 / 36
Architectures: Architectural styles Object-based and service-oriented architectures
Object-based style
Essence
Components are objects, connected to each other through procedure
calls. Objects may be placed on different machines; calls can thus
execute across a network.
State
Object Object
Method
Method call
Object
Object
Object
Interface
Encapsulation
Objects are said to encapsulate data and offer methods on that data
without revealing the internal implementation.
8 / 36
Architectures: Architectural styles Resource-based architectures
RESTful architectures
Essence
View a distributed system as a collection of resources, individually
managed by components. Resources may be added, removed,
retrieved, and modified by (remote) applications.
1. Resources are identified through a single naming scheme
2. All services offer the same interface
3. Messages sent to or from a service are fully self-described
4. After executing an operation at a service, that component forgets
everything about the caller
Basic operations
Operation Description
PUT Create a new resource
GET Retrieve the state of a resource in some representation
DELETE Delete a resource
POST Modify a resource by transferring a new state
9 / 36
Architectures: Architectural styles Resource-based architectures
Essence
Objects (i.e., files) are placed into buckets (i.e., directories). Buckets
cannot be placed into buckets. Operations on ObjectName in bucket
Bucket Name require the following identifier:
http://BucketName.s3.amazonaws.com/ObjectName
Typical operations
All operations are carried out by sending HTTP requests:
► Create a bucket/object: PUT, along with the URI
► Listing objects: GET on a bucket name
► Reading an object: GET on a full URI
10 / 36
Architectures: Architectural styles Resource-based architectures
On interfaces
Issue
Many people like RESTful approaches because the interface to a
service is so simple. The catch is that much needs to be done in the
parameter space.
11 / 36
Architectures: Architectural styles Resource-based architectures
On interfaces
Simplifications
Assume an interface bucket offering an operation create, requiring
an input string such as mybucket, for creating a bucket “mybucket.”
12 / 36
Architectures: Architectural styles Resource-based architectures
On interfaces
Simplifications
Assume an interface bucket offering an operation create, requiring
an input string such as mybucket, for creating a bucket “mybucket.”
SOAP
import bucket
bucket . creat e( "mybucket ")
12 / 36
Architectures: Architectural styles Resource-based architectures
On interfaces
Simplifications
Assume an interface bucket offering an operation create, requiring
an input string such as mybucket, for creating a bucket “mybucket.”
SOAP
import bucket
bucket . creat e( "mybucket ")
RESTful
PUT "
http://mybucket.s3.amazon
sws.com/
"
12 / 36
Architectures: Architectural styles Resource-based architectures
On interfaces
Simplifications
Assume an interface bucket offering an operation create, requiring
an input string such as mybucket, for creating a bucket “mybucket.”
SOAP
import bucket
bucket . creat e( "mybucket ")
RESTful
PUT "
http://mybucket.s3.amazon
sws.com/
"
Conclusions
Are there any to draw?
12 / 36
Architectures: Architectural styles Publish-subscribe architectures
Coordination
Temporal and referential coupling
Temporally Temporally
coupled decoupled
Referentially Direct Mailbox
coupled
Referentially Event- Shared
decoupled based data space
Subscribe Notification
Publish Subscribe Data
delivery
delivery
Event bus
Publis h
Component
Shared (persistent) data space
13 / 36
Architectures: Architectural styles Publish-subscribe architectures
More details
► Calling o u t ( t ) twice in a row, leads to storing two copies of tuple
► t ⇒ a tuple space is modeled as a multiset.
Both i n and r d are blocking operations: the caller will be blocked
until a matching tuple is found, or has become available.
14 / 36
Architectures: Architectural styles Publish-subscribe architectures
Bob
1 blog = linda.universe._rd(("MicroBlog",linda.TupleSpace))[1]
2
3 b l o g . _ o u t (( "b o b " , "d i st sy s" , "I am studying chap 2 " ) )
4 blog._out(("bob","distsys","The l i n d a example’s p r e t t y si mp le"))
5 blog._out(("bob","gtcn","Cool book!"))
Alice
1 blog = linda.universe._rd(("MicroBlog",linda.TupleSpace))[1]
2
3 b l o g . _ o u t (( "a l i c e " , "g t c n " , "T h i s graph th eo ry s t u f f i s n o t e a s y " ) )
4 b l o g . _ o u t ( ( " a l i c e " , " d i s t s y s " , " I l i k e systems more t h a n g rap h s"))
Chuck
1 blog = linda.universe._rd(("MicroBlog",linda.TupleSpace))[1]
2
3 t 1 = blog._rd(("bob","distsys",str))
4 t 2 = blog._rd(("alice","gtcn",str))
5 t 3 = b l o g . _ rd (( "b o b " , "g t c n " , str ))
15 / 36
Architectures: Middleware organization Wrappers
Problem
The interfaces offered by a legacy component are most likely not
suitable for all applications.
Solution
A wrapper or adapter offers an interface acceptable to a client
application. Its functions are transformed into those available at the
component.
16 / 36
Architectures: Middleware organization Wrappers
Organizing wrappers
Application Broker
17 / 36
Architectures: Middleware organization Interceptors
Problem
Middleware contains solutions that are good for most applications ⇒
you may want to adapt its behavior for specific applications.
18 / 36
Architectures: Middleware organization Interceptors
Client application
Intercepted call
B.doit(val)
Application stub
Object middleware
Message-level interceptor
Local OS
To object B
19 / 36
Architectures: System architecture Centralized organizations
Request
User interface User interface User interface User interface User interface
Application Application
Application
Database
User interface
Server machine
(a) (b) (c) (d) (e)
Multitiered Architectures 21 / 36
Architectures: System architecture Centralized organizations
Three-tiered architecture
Client Application Database
server server
Request
operation
R
e
q
Wait for Wait for u
e
reply data s
t
d Return
a data
Return t
reply a
Multitiered Architectures 22 / 36
Architectures: System architecture Decentralized organizations: peer-to-peer systems
Alternative organizations
Vertical distribution
Comes from dividing distributed applications into three logical layers,
and running the components from each layer on a different server
(machine).
Horizontal distribution
A client or server may be physically split up into logically equivalent
parts, but each part is operating on its own share of the complete data
set.
Peer-to-peer architectures
Processes are all equal: the functions that need to be carried out are
represented by every process ⇒ each process will act as a client and
a server at the same time (i.e., acting as a servant).
23 / 36
Architectures: System architecture Decentralized organizations: peer-to-peer systems
Structured P2P
Essence
Make use of a semantic-free index: each data item is uniquely
associated with a key, in turn used as an index. Common practice: use
a hash function
key(data item) = hash(data item’s value).
P2P system now responsible for storing (key,value) pairs.
0100
0101 1101
1100
0110 0111 1111
1110
Example: Chord
Principle
► Nodes are logically organized in a ring. Each node has an m-bit
identifier.
► Each data item is hashed to an m-bit key.
► Data item with key k is stored at node with smallest identifier
id ≥ k , called the successor of key k .
► The ring is extended with various shortcut links to other nodes.
Example: Chord
31 0 1
30 2
29 3
Actual node Shortcut 4
28
5
27
26 6
Nonexisting 25 7
node
24 8
21 11
20 12
19 13
18 14
17 16 15
lookup(3)@9 : 28
Structured peer-to-peer systems →1→4 26 / 36
Architectures: System architecture Decentralized organizations: peer-to-peer systems
Unstructured P2P
Essence
Each node maintains an ad hoc list of neighbors. The resulting overlay
resembles a random graph: an edge (u, v) exists only with a certain
probability P[(u, v )].
Searching
► Flooding: issuing node u passes request for d to all neighbors.
Request is ignored when receiving node had seen it before.
Otherwise, v searches locally for d (recursively). May be limited
by a Time-To-Live: a maximum number of hops.
► Random walk: issuing node u passes request for d to randomly
chosen neighbor, v . If v does not have d , it forwards request to
one of its randomly chosen neighbors, and so on.
Model
Assume N nodes and that each data item is replicated across r
randomly chosen nodes.
Random walk
P[k ] probability that item is found after k attempts:
r r
P[k ] = (1 − )k −1 .
N N
S (“search size”) is expected number of nodes that need to be probed:
N N
r r k −1
S= ∑ k · P[k ] =k =∑1 k·
N
(1 −
N
) ≈ N/ r for 1 « r ≤
N.
k=1
Flooding
► Flood to d randomly chosen neighbors
► After k steps, some R(k ) = d · (d − 1) k−1 will have been
reached (assuming k is small).
► With fraction r / N nodes having data, if Nr · R(k ) ≥ 1, we will
found the data item.
have
Comparison
► If r / N = 0.001, then S ≈ 1000
► With flooding and d = 10, k = 4, we contact 7290 nodes.
► Random walks are more communication efficient, but might take
longer before they find the result.
Super-peer networks
Essence
It is sometimes sensible to break the symmetry in pure peer-to-peer
networks:
► When searching in unstructured P2P systems, having index
servers improves performance
► Deciding where to store data can often be done more efficiently
through brokers.
Super peer
Overlay network of super peers
Weak peer
Edge-server architecture
Essence
Systems deployed on the Internet where servers are placed at the
edge of the network: the boundary between enterprise networks and
the actual Internet.
ISP
ISP
Core Internet
Edge server
Enterprise network
Edge-server systems 32 / 36
Architectures: System architecture Hybrid Architectures
Client node
K out of N nodes
Lookup(F) Node 1
Exchange blocks
► A file is divided into equally sized pieces (typically each being 256
KB)
► Peers exchange blocks of pieces, typically some 16 KB.
► A can upload a block d of piece D, only if it has piece D.
► Neighbor B belongs to the potential set PA of A, if B has a block
that A needs.
► If B ∈ PA and A ∈ PB : A and B are in a position that they can
trade
a block.
Collaborative distributed systems 34 / 36
Architectures: System architecture Hybrid Architectures
BitTorrent phases
Bootstrap phase
A has just received its first piece (through optimistic unchoking: a node
from NA unselfishly provides the blocks of a piece to get a newly
arrived node started).
Trading phase
|PA| > 0: there is (in principle) always a peer with whom A can trade.
BitTorrent phases
0.8
0.6
|P|
|N|
0.4
|N| = 5
0.2 |N| = 10
|N| = 40