Comp 655 - Communications

Download Report

Transcript Comp 655 - Communications

Communication essentials
• Communication patterns
• Communication structure: OSI reference
model and TCP/IP coverage
• Major middleware communication services
–
–
–
–
–
–
7/7/2015
RPC
RMI
http
I hate to wait …
Message passing
(skip) Streams
Distributed Systems - Comp 655
1
Communication patterns
Producer
Consumer
query
response
7/7/2015
Distributed Systems - Comp 655
2
Communication patterns with
broker
Producer 1
Producer 2
Client 1
Client 2
Consumer 1
Subscription
service
Consumer 2
Consumer 3
query
response
Request
broker
query
response
Server 1
Server 2
Server 3
7/7/2015
Distributed Systems - Comp 655
3
Communication patterns other variations
• Blocking or non-blocking
• Connection-based or connectionless
• Transient or persistent
Examples:
• blocking transient query-response == RPC
• non-blocking persistent producer/consumer
== message queuing
7/7/2015
Distributed Systems - Comp 655
4
A note about blocking
• Blocking communication blocks the
thread that makes the call
• Other work may continue in other
threads in the same process
• More about threads and processes next
week
7/7/2015
Distributed Systems - Comp 655
5
Communication essentials
• Communication patterns
• Communication structure: OSI reference
model and TCP/IP coverage
• Major middleware communication services
–
–
–
–
–
7/7/2015
RPC
RMI
http
I hate to wait …
Message passing
Distributed Systems - Comp 655
6
OSI Reference Model
TCP/IP
2-1
HTTP, FTP, …
not used
not used
TCP, UDP
connectionless IP
e.g. Ethernet
sending bits
7/7/2015
Distributed Systems - Comp 655
7
Middleware Protocols
2-5
RPC
RMI
7/7/2015
Distributed Systems - Comp 655
8
Where does http fit?
• Originally, it looked like an applicationlevel protocol, where the application
was fetching and viewing HTML pages
• As the Web has matured, it has been
used increasingly as middleware.
• It’s the foundation for
– Web applications
– Web services
7/7/2015
Distributed Systems - Comp 655
9
Communication essentials
• Communication patterns
• Communication structure: OSI reference
model and TCP/IP coverage
• Major middleware communication services
– RPC
– RMI
– http
– I hate to wait …
– Message passing
7/7/2015
Distributed Systems - Comp 655
10
RPC is all about
• Allowing a client to make a procedure
call that is processed on a remote
machine
• Without the client’s having to care
(much)
7/7/2015
Distributed Systems - Comp 655
11
Ordinary procedure call
process
caller
0.98
callee
7/7/2015
2.3
(callee is atanh)
Distributed Systems - Comp 655
12
RPC: call the procedure across
a network
client
process
server
process
caller
callee
client
stub
7/7/2015
0.98
0.98
message
Atanh, 0.98
Distributed Systems - Comp 655
server
stub
network
13
RPC: call the procedure across
a network
client
process
server
process
caller
callee
client
stub
7/7/2015
2.3
2.3
message
OK, 2.3
Distributed Systems - Comp 655
server
stub
network
14
RPC Summary
client
process
caller
client
stub
•client stub pretends
to be the callee
•server stub pretends
to be the caller
•caller and callee are
written as if they
were on the same
machine
•location
transparency!!
(almost)
server
process
callee
server
stub
network
7/7/2015
Distributed Systems - Comp 655
15
Warning: passing parameters
and results can be tricky
7/7/2015
Distributed Systems - Comp 655
16
Passing Value Parameters (1)
7/7/2015
Distributed Systems - Comp 655
17
Passing Value Parameters (2)
Number is backwards
a)
b)
c)
String is backwards
Original message (JILL, 5) on the Pentium (little endian)
The message after receipt on the SPARC (big endian)
The message after being inverted. The little numbers in
boxes indicate the address of each byte
7/7/2015
Distributed Systems - Comp 655
18
Conclusion from the byte
order problem
• You have to explicitly define your
interfaces.
• This problem is one of the fundamental
motivators for the use of Interface
Definition Languages (IDL)
• Passing value parameters is a key
component of access transparency.
7/7/2015
Distributed Systems - Comp 655
19
Interface definition
Interface definitions are critical factors in
• Openness
• Flexibility
• Access transparency
• Enabling proxy construction in
middleware
7/7/2015
Distributed Systems - Comp 655
20
Activity – what can go wrong?
(with an RPC)
Brainstorm things that can go wrong
when a program on machine A tries to
make an RPC to a server on machine B
A
7/7/2015
Network
Distributed Systems - Comp 655
B
21
Pick the top three
• The instructor will pick some of the
failures you brainstormed
• Multi-vote on the ones in whose
solutions you are most interested
• You will use the top three vote-getters
in the next activity
7/7/2015
Distributed Systems - Comp 655
22
Activity – what could you do
about it?
Brainstorm approaches to dealing with
the top three failure modes
A
7/7/2015
Network
Distributed Systems - Comp 655
B
23
Communication patterns reminder
Parameters:
• Query-response or producer-consumer
• Blocking or non-blocking
• Connection-based or connection-less
• Persistent or transient
Examples:
• blocking transient query-response == RPC
• non-blocking persistent producer/consumer
== message queuing
7/7/2015
Distributed Systems - Comp 655
24
Finding the server or peer
• In all cases, the process that initiates a
communication has to find the process it
wants to communicate with
• The address could be in
– Source code (simplest, least flexible)
– Configuration file
– A network directory service (requires client to
know a name for a server) (e.g. DNS)
– A series of directories (e.g. LDAP, then RMI
Registry)
• Interaction with the directory is usually
blocking request/response
7/7/2015
Distributed Systems - Comp 655
25
Communication essentials
• Communication patterns
• Communication structure: OSI reference
model and TCP/IP coverage
• Major middleware communication services
– RPC
– RMI
– http
– I hate to wait …
– Message passing
7/7/2015
Distributed Systems - Comp 655
26
Focus on Remote Objects
• Here, object ==
state + methods + interface
• Usually, only the interface is distributed
• “Remote objects” refers to approaches in
which, for each object there is some
server where all of it state resides
7/7/2015
Distributed Systems - Comp 655
27
Distributed Objects
2-16
• Common organization
of a remote object with
client-side proxy.
7/7/2015
Distributed Systems - Comp 655
28
Basic Java RMI
Interface.class
_Stub.class *
1.
Client
2.
2.
3.
rmiregistry**
3.
1.
Server
Interface.class
_Skel.class *
7/7/2015
Server registers its name
and remote object
Client gets reference to
remote object from
rmiregistry
Client calls server
* = not needed if Client and Server are
both Java 1.5 or newer
** = RMI Registry can be a separate
process or an object inside the
Server process. If separate, must be
on same machine.
Distributed Systems - Comp 655
29
Passing objects around …
• In RMI, parameters and return values
can be object references
– If the parameter refers to a local object, do
you copy the object or pass only a
reference?
– If the parameter refers to a remote object,
what do you pass?
7/7/2015
Distributed Systems - Comp 655
30
Local, remote objects in Java RMI
• Local objects are passed by value
• Remote objects by reference
• Passing a remote object by reference
means passing a proxy by value
7/7/2015
Distributed Systems - Comp 655
31
Parameter Passing in RMI
7/7/2015
Distributed Systems - Comp 655
32
http
• Communication patterns:
– Transient
– Query/response
• But, http does NOT simulate a procedure call
– Non-blocking (officially)
• Many clients choose to block
• HTTP 1.1 is defined in RFC 2616
• Depends on TCP for reliable
communication
7/7/2015
Distributed Systems - Comp 655
33
Steps in an HTTP interaction
1. Client requests TCP connection
2. Client and server collaborate to create
a TCP connection
3. Client sends an HTTP request
4. Server sends a response
5. TCP connection torn down
• In HTTP 1.1, connection can be kept alive
7/7/2015
Distributed Systems - Comp 655
34
Anatomy of an HTTP request
method request URI
protocol
headers
POST /don/demo HTTP/1.1
accept: */*
accept-language: en-us
referer: http://localhost:8080/don/echoclient.htm
content-type: application/x-www-form-urlencoded
accept-encoding: gzip, deflate
user-agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT
5.1; SV1; NovaPacs Viewer 6.0.197.0; .NET CLR 1.1.4322; .NET
CLR 2.0.50727)
host: localhost:8080
content-length: 37
connection: Keep-Alive
cache-control: no-cache
name=007&mission=deep%20dark%20secret content
7/7/2015
Distributed Systems - Comp 655
35
Watch out for Norton (and others)
POST /don/demo HTTP/1.1
accept: */*
accept-language: en-us
-------: ----:-----------:----------------------content-type: application/x-www-form-urlencoded
---------------: ----- ------user-agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT
5.1; SV1; NovaPacs Viewer 6.0.197.0; .NET CLR 1.1.4322; .NET
CLR 2.0.50727)
host: localhost:8080
content-length: 37
connection: Keep-Alive
cache-control: no-cache
name=007&mission=deep%20dark%20secret
7/7/2015
Distributed Systems - Comp 655
36
Anatomy of an HTTP response
protocol
status
code reason phrase
headers
HTTP/1.1 200 OK
X-Powered-By: Servlet/2.5
Content-Type: text/xml;charset=utf-8
Content-Length: 57
Date: Sun, 16 Sep 2007 17:55:54 GMT
Server: Sun Java System Application Server Platform Edition
9.0_01
<greeting>Hello, 007. You made a POST request.</greeting>
content
7/7/2015
Distributed Systems - Comp 655
37
Distributed Systems - Comp 655
38
Making an HTTP request in Java
7/7/2015
Server side: HttpServlet
7/7/2015
Distributed Systems - Comp 655
39
Servlet container
request
client
response
Servlet
base class
your Servlet
Container (Tomcat, Glassfish,
WebLogic, WebSphere, etc)
DB
7/7/2015
Distributed Systems - Comp 655
whatever
40
Smudging the transparency …
• Network-unfriendly code
• Lots of clients can mean lots of
configuration management
7/7/2015
Distributed Systems - Comp 655
41
Network-unfriendly code …
• In OO, there are usually lots of fine-grained
classes, and lots of getters and setters
Person person = new Person();
person.setFirstName(fname);
person.setMiddleInitial(initial);
person.setLastName(lname);
Address address = new Address();
address.setStreet(street);
address.setCity(city);
address.setState(state);
person.setAddress(address);
…
• Performance is not good if you do this over a
network
7/7/2015
Distributed Systems - Comp 655
42
Network-unfriendly
client
server
domain
object
domain
object
7/7/2015
Distributed Systems - Comp 655
43
A more network-friendly way
• This is a recurring problem in distributed systems
• Remote façade and Data transfer object patterns
provide the core of a solution
– Define a façade class with methods that group
multiple fine-grained operations together
– Define classes (DTOs) with nothing but getters and
setters for moving groups of data items around
– Keep the business logic in the original class(es) on the
server side
7/7/2015
Distributed Systems - Comp 655
44
Using Remote Façade + DTO
1.
2.
3.
4.
5.
6.
7.
8.
Client creates a DTO
Client calls lots of setters on DTO
Client calls façade with DTO as parameter
Service calls lots of getters on DTO, setters
(and other methods, as needed) on the
domain object(s)
Façade creates DTO2
Façade calls setters on DTO2
Façade returns DTO2 to client
Client calls lots of getters on DTO2
7/7/2015
Distributed Systems - Comp 655
45
Using Remote Façade + DTO
client
DTO
server
DTO
domain
object
DTO2
DTO2
domain
object
Façade
7/7/2015
Distributed Systems - Comp 655
46
Remote Façade + DTO code (flavor)
PersonTO pto = new PersonTO();
pto.setFirstName(fname);
pto.setMiddleInitial(initial);
pto.setLastName(lname);
pto.setStreet(street);
pto.setCity(city);
pto.setState(state);
Facade facade = new Facade();
ResultTO rto =
facade.addPerson(pto);
…
7/7/2015
Distributed Systems - Comp 655
47
Remote Façade + DTO
consequences
• Reduced network traffic
• Reduced coupling between client and domain
model
• Costs include
– More classes to deal with
– Getters and setters called multiple times (client
DTO.get, server DTO.get + domain.set)
• Risks include
– Temptation to put business logic in DTO
– Temptation to skip domain model development
and build a DTO-processing system
7/7/2015
Distributed Systems - Comp 655
48
More about client/domain coupling
• Refactoring is a good thing
• Issues with refactoring a network
service
– Refactored client needs to be deployed in
many places
– Service administrators may not know
where all the clients are
– There may be clients the service developers
know nothing about
7/7/2015
Distributed Systems - Comp 655
49
A more refactoring-friendly way
• This is a recurring problem in
distributed systems
• Patterns include
– Migrate code at runtime
• e.g. applet
• See Tanenbaum & van Steen, section 3.5, if
interested
– Remote façade + DTO helps here, too
7/7/2015
Distributed Systems - Comp 655
50
Remote façade + DTO (again)
before
client
PersonTO
server
PersonTO
Person
+ name
+ addr
Façade
client
after
PersonTO
server
PersonTO
Façade
7/7/2015
Distributed Systems - Comp 655
Person
+ name
Address
51
I hate to wait …
7/7/2015
Distributed Systems - Comp 655
52
RMI is usually synchronous
7/7/2015
Distributed Systems - Comp 655
53
Asynchronous RPC (1)
2-12
a)
b)
interconnection between client and server in a
traditional RPC
The interaction using asynchronous RPC
7/7/2015
Distributed Systems - Comp 655
54
Asynchronous RPC (2)
2-13
7/7/2015
Distributed Systems - Comp 655
55
Communication essentials
• Communication patterns
• Communication structure: OSI reference
model and TCP/IP coverage
• Major middleware communication services
– RPC
– RMI
– http
– I hate to wait …
– Message passing
7/7/2015
Distributed Systems - Comp 655
56
Looser coupling
• In RPC and RMI, client and server must
be running at the same time
• This coupling makes them relatively
sensitive to failures and remotemachine policies
• Message queuing enables more looselycoupled communication
7/7/2015
Distributed Systems - Comp 655
57
General Architecture of a Message-Queuing
System (1)
7/7/2015
Distributed Systems - Comp 655
58
Message-Queuing Primitives
Primitive
Meaning
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.
7/7/2015
Distributed Systems - Comp 655
59
Consumer message queuing: email
sender’s
machine
host
7/7/2015
sender’s
email
server
comm
server
receiver’s
email
server
comm
server
Distributed Systems - Comp 655
receiver’s
machine
host
60
Example: IBM MQSeries
• General organization of IBM's MQSeries
message-queuing system.
2-31
7/7/2015
Distributed Systems - Comp 655
61
Message Brokers
2-30
• The general organization of a message broker
in a message-queuing
•
system.
7/7/2015
Distributed Systems - Comp 655
62
Middleware communication summary
Common name
RPC
Pattern
Blocking, transient
request/response
RMI
Blocking, transient
request/response
http
(officially) non-blocking,
transient request/response
Asynchronous
Non-blocking, transient
RPC
request/response
Message queuing Non-blocking, persistent
producer/consumer
7/7/2015
Distributed Systems - Comp 655
63
Bonus material
7/7/2015
Distributed Systems - Comp 655
64
Implementing a Java RMI
server and client
1.
2.
3.
4.
5.
Define the remote interface
Write a class that implements it
Include that class in an application
Compile
Generate stub and skeleton with rmic
(not necessary with 1.5)
6. Start rmiregistry, if necessary
7/7/2015
Distributed Systems - Comp 655
65
1. Define the Interface
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface HelloInterface extends Remote {
String sayHello(String yourName) throws
RemoteException;
String sayGoodbye(int howMany) throws
RemoteException;
void ping() throws RemoteException;
}
7/7/2015
Distributed Systems - Comp 655
66
2. Implement the interface
public class HelloServer extends UnicastRemoteObject
implements HelloInterface {
HelloServer() throws RemoteException {
super(Constants.serverPort);
System.out.println(toString());
// Register
Registry reg =
LocateRegistry.getRegistry(Constants.rmiPort);
reg.rebind(Constants.serverName, this);
}
…
7/7/2015
Distributed Systems - Comp 655
67
2. Implement the interface, con’t
public void ping() throws RemoteException {
System.out.println("I've been pinged");
}
public String sayGoodbye(int howMany) throws
RemoteException {
StringBuffer sb = new StringBuffer();
for(int i=0;i<howMany;i++) sb.append("goodbye ");
return sb.toString();
}
public String sayHello(String yourName) throws
RemoteException {
return "Hello, " + yourName;
}
7/7/2015
Distributed Systems - Comp 655
68
3. Include in an application
public static void main(String[] args) throws
RemoteException {
new HelloServer();
}
7/7/2015
Distributed Systems - Comp 655
69
6. Start RMI Registry
>> start rmiregistry
7/7/2015
Distributed Systems - Comp 655
70
Implementation continued
8. Assign the server a name
9. Run the server, using that name
10. Write a class that uses the remote
interface (by name)
11. Compile
12. Run
13. Enjoy 
7/7/2015
Distributed Systems - Comp 655
71
8,9. Name the server
public class Constants {
public static final int rmiPort
= 5555;
public static final int serverPort
= 43215;
public static final String serverName =
"whatever";
}
7/7/2015
Distributed Systems - Comp 655
72
10. Write a client
public class HelloClient {
public static void main(String args[]) throws
RemoteException, NotBoundException {
Registry reg =
LocateRegistry.getRegistry(Constants.rmiPort);
HelloInterface hi = (HelloInterface)
reg.lookup(Constants.serverName);
for( String name : args ) {
System.out.println(hi.sayHello(name));
}
System.out.println(hi.sayGoodbye(args.length));
hi.ping();
}
}
7/7/2015
Distributed Systems - Comp 655
73
11. Run
>> java HelloClient Alice Bob Carol Dave
Hello, Alice
Hello, Bob
Hello, Carol
Hello, Dave
goodbye goodbye goodbye goodbye
>>
7/7/2015
Distributed Systems - Comp 655
74
RMI Resources
• java.sun.com/j2se/1.5.0/docs/guide/rmi/
• java.sun.com/j2se/1.5.0/docs/guide/rmi/
faq.html
(Java RMI and Object Serialization FAQ)
• java.sun.com/j2se/1.5.0/docs/tooldocs/wi
ndows/rmiregistry.html
7/7/2015
Distributed Systems - Comp 655
75