Communications
Communications
Communications
Distributed Systems
FACULTY OF INFORMATION TECHNOLOGY 1
Communication: Foundations Layered Protocols
Middleware layer
Observation
Middleware is invented to provide common services and protocols that can be
used by many different applications
A rich set of communication protocols
(Un)marshaling of data, necessary for integrated systems
Naming protocols, to allow easy sharing of resources
Security protocols for secure communication
Scaling mechanisms, such as for replication and caching
Note
What remains are truly application-specific protocols... such as?
2
Communication: Foundations Layered Protocols
Application protocol
Application
Middleware protocol
Middleware
Physical/Link-level protocol
Hardware
Network
3
Communication: Foundations Types of Communication
Types of communication
Distinguish...
Synchronize at Synchronize at Synchronize after
request submission request delivery processing by server
Client
Request
Transmission
interrupt
Storage
facility
Reply
Server Time
Types of communication
Transient versus persistent
Synchronize at Synchronize at Synchronize after
request submission request delivery processing by server
Client
Request
Transmission
interrupt
Storage
facility
Reply
Server Time
8 / 49
Communication: Foundations Types of Communication
Types of communication
Request
Transmission
interrupt
Storage
facility
Reply
Server Time
At request submission
At request delivery
After request processing 6
Communication: Foundations Types of Communication
Client/Server
Some observations
Client/Server computing is generally based on a model of transient
synchronous communication:
Client and server have to be active at time of communication
Client issues request and blocks until it receives reply
Server essentially waits only for incoming requests, and subsequently
processes them
Messaging
Message-oriented middleware
Aims at high-level persistent asynchronous communication:
Processes send each other messages, which are queued
Sender need not wait for immediate reply, but can do other things
Middleware often ensures fault tolerance
8
Communication: Remote procedure call Basic RPC operation
Observations
Application developers are familiar with simple procedure model
Well-engineered procedures operate in isolation (black box)
There is no fundamental reason not to execute procedures on separate
machine
Wait for result
Client
9
Communication: Remote procedure call Basic RPC operation
3. Message is sent
across the network
1 Client procedure calls client stub. 6 Server does local call; returns result to stub.
2 Stub builds message; calls local OS. 7 Stub builds message; calls OS.
3 OS sends message to remote OS. 8 OS sends message to client’s OS.
4 Remote OS gives message to stub. 9 Client’s OS gives message to stub.
5 Stub unpacks parameters; calls 10 Client stub unpacks result; returns to client.
server.
10
13 / 49
Communication: Remote procedure call Parameter passing
Conclusion
Client and server need to properly interpret messages, transforming them into
machine-dependent representations.
11
Communication: Remote procedure call Parameter passing
Some assumptions
Copy in/copy out semantics: while procedure is executed, nothing can be
assumed about parameter values.
All data that is to be operated on is passed by parameters. Excludes
passing references to (global) data.
Conclusion
Full access transparency cannot be realized.
Asynchronous RPCs
Essence
Try to get rid of the strict request-reply behavior, but let the client continue
without waiting for an answer from the server.
Essence
Sending an RPC request to a group of servers.
Callbacks to client
Client
Call remote
procedures
RPC in practice
Uuidgen
Interface
definition file
IDL compiler
#include #include
Runtime Runtime
Linker Linker
library library
Client Server
binary binary 15
Communication: Remote procedure call Example: DCE RPC
Issues
(1) Client must locate server machine, and (2) locate the server.
Directory machine
Directory
server
2. Register service
3. Look up server
Server machine
Client machine
16
Server
socket bind listen accept receive send close
Client
1 from socket import *
2 s = socket(AF_INET, SOCK_STREAM)
3 s.connect((HOST, PORT)) # connect to server (block until accepted)
4 s.send(’Hello, world’) # send same data
5 data = s.recv(1024) # receive the response
6 print data # print the result
7 s.close() # close the connection
18
21 / 49
Communication: Message-oriented communication Advanced transient messaging
Observation
Sockets are rather low level and programming mistakes are easily made.
However, the way that they are used is often the same (such as in a
client-server setting).
Alternative: ZeroMQ
Provides a higher level of expression by pairing sockets: one for sending
messages at process P and a corresponding one at process Q for receiving
messages. All communication is asynchronous.
Three patterns
Request-reply
Publish-subscribe
Pipeline
19
Communication: Message-oriented communication Advanced transient messaging
Request-reply
Server
1 import zmq
2 context = zmq.Context()
3
4 p1 = "tcp://"+ HOST +":"+ PORT1 # how and where to connect
5 p2 = "tcp://"+ HOST +":"+ PORT2 # how and where to connect
6 s = context.socket(zmq.REP) # create reply socket
7
8 s.bind(p1) # bind socket to address
9 s.bind(p2) # bind socket to address
10 while True:
11 message = s.recv() # wait for incoming message
12 if not "STOP" in message: # if not to stop...
13 s.send(message + "*") # append "*" to message
14 else: # else...
15 break # break out of loop and end
20
Communication: Message-oriented communication Advanced transient messaging
Request-reply
Client
1 import zmq
2 context = zmq.Context()
3
4 php = "tcp://"+ HOST +":"+ PORT # how and where to connect
5 s = context.socket(zmq.REQ) # create socket
6
7 s.connect(php) # block until connected
8 s.send("Hello World") # send message
9 message = s.recv() # block until response
10 s.send("STOP") # tell server to stop
11 print message # print result
21
Communication: Message-oriented communication Advanced transient messaging
Publish-subscribe
Server
1 import zmq, time
2
3 context = zmq.Context()
4 s = context.socket(zmq.PUB) # create a publisher socket
5 p = "tcp://"+ HOST +":"+ PORT # how and where to communicate
6 s.bind(p) # bind socket to the address
7 while True:
8 time.sleep(5) # wait every 5 seconds
9 s.send("TIME " + time.asctime()) # publish the current time
Client
1 import zmq
2
3 context = zmq.Context()
4 s = context.socket(zmq.SUB) # create a subscriber socket
5 p = "tcp://"+ HOST +":"+ PORT # how and where to communicate
6 s.connect(p) # connect to the server
7 s.setsockopt(zmq.SUBSCRIBE, "TIME") # subscribe to TIME messages
8
9 for i in range(5): # Five iterations
10 time = s.recv() # receive a message
11 print time
Using messaging patterns: ZeroMQ 25 / 49
22
Communication: Message-oriented communication Advanced transient messaging
Pipeline
Source
1 import zmq, time, pickle, sys, random
2
3 context = zmq.Context()
4 me = str(sys.argv[1])
5 s = context.socket(zmq.PUSH) # create a push socket
6 src = SRC1 if me == ’1’ else SRC2 # check task source host
7 prt = PORT1 if me == ’1’ else PORT2 # check task source port
8 p = "tcp://"+ src +":"+ prt # how and where to connect
9 s.bind(p) # bind socket to address
10
11 for i in range(100): # generate 100 workloads
12 workload = random.randint(1, 100) # compute workload
13 s.send(pickle.dumps((me,workload))) # send workload to worker
23
Communication: Message-oriented communication Advanced transient messaging
Pipeline
Worker
1 import zmq, time, pickle, sys
2
3 context = zmq.Context()
4 me = str(sys.argv[1])
5 r = context.socket(zmq.PULL) # create a pull socket
6 p1 = "tcp://"+ SRC1 +":"+ PORT1 # address first task source
7 p2 = "tcp://"+ SRC2 +":"+ PORT2 # address second task source
8 r.connect(p1) # connect to task source 1
9 r.connect(p2) # connect to task source 2
10
11 while True:
12 work = pickle.loads(r.recv()) # receive work from a source
13 time.sleep(work[1]*0.01) # pretend to work
24
Communication: Message-oriented communication Advanced transient messaging
Representative operations
Operation Description
MPI bsend Append outgoing message to a local send buffer
MPI send Send a message and wait until copied to local or
remote buffer
MPI ssend Send a message and wait until transmission starts
MPI sendrecv Send a message and wait for reply
MPI isend Pass reference to outgoing message, and continue
MPI issend Pass reference to outgoing message, and wait until
receipt starts
MPI recv Receive a message; block if there is none
MPI irecv Check if there is an incoming message, but do not
block
25
Communication: Message-oriented communication Message-oriented persistent communication
Message-oriented middleware
Essence
Asynchronous persistent communication through support of middleware-level
queues. Queues correspond to buffers at communication servers.
Operations
Operation Description
put Append a message to a specified queue
get Block until the specified queue is nonempty, and
remove the first message
poll Check a specified queue for messages, and remove
the first. Never block
notify Install a handler to be called when a message is put
into the specified queue 26
Communication: Message-oriented communication Message-oriented persistent communication
General model
Queue managers
Queues are managed by queue managers. An application can put messages
only into a local queue. Getting a message is possible by extracting it from a
local queue only ) queue managers need to route messages.
Routing
Look up
Source queue contact address Destination queue
manager of destination manager
queue manager
Logical
queue-level
address (name)
Contact
Network address 27
Communication: Message-oriented communication Message-oriented persistent communication
Message broker
Observation
Message queuing systems assume a common messaging protocol: all
applications agree on message format (i.e., structure and data representation)
Application Application
Interface Interface
Queuing
layer
Local OS Local OS Local OS
29
Communication: Message-oriented communication Example: IBM’s WebSphere message-queuing system
IBM’s WebSphere MQ
Basic concepts
Application-specific messages are put into, and removed from queues
Queues reside under the regime of a queue manager
Processes can put messages only in local queues, or through an RPC
mechanism
Message transfer
Messages are transferred between queues
Message transfer between queues at different processes, requires a
channel
At each end point of channel is a message channel agent
Message channel agents are responsible for:
Setting up channels using lower-level network communication
facilities (e.g., TCP/IP)
(Un)wrapping messages from/in transport-level packets
Sending/receiving packets 30
Overview 33 / 49
Communication: Message-oriented communication Example: IBM’s WebSphere message-queuing system
IBM’s WebSphere MQ
Schematic overview
Client's receive
Sending client Routing table Send queue queue Receiving client
Queue Queue
manager manager
MQ Interface MQ Interface
IBM’s WebSphere MQ
Routing
By using logical names, in combination with name resolution to local queues, it
is possible to put a message in a remote queue
Alias table
LA1 QMA
SQ1
LA2 QMC
QMD
Message transfer 36 / 49
33