Post on 09-Feb-2016
description
04/22/23 Distributed Systems - Comp 655 1
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– (skip) Streams
04/22/23 Distributed Systems - Comp 655 2
Communication patterns
Producer Consumer
query
response
04/22/23 Distributed Systems - Comp 655 3
Communication patterns with broker
Producer 2
query
response
Producer 1Consumer 2
Consumer 1
Consumer 3
Subscriptionservice
Client 2
Client 1Server 2
Server 1
Server 3
Requestbroker
queryresponse
04/22/23 Distributed Systems - Comp 655 4
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
04/22/23 Distributed Systems - Comp 655 5
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
04/22/23 Distributed Systems - Comp 655 6
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
04/22/23 Distributed Systems - Comp 655 7
OSI Reference Model
2-1
TCP/IP
sending bitse.g. Ethernetconnectionless IPTCP, UDP
not usednot used
HTTP, FTP, …
04/22/23 Distributed Systems - Comp 655 8
Middleware Protocols
2-5RPCRMI
04/22/23 Distributed Systems - Comp 655 9
Where does http fit?• Originally, it looked like an
application-level 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
04/22/23 Distributed Systems - Comp 655 10
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
04/22/23 Distributed Systems - Comp 655 11
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)
04/22/23 Distributed Systems - Comp 655 12
Ordinary procedure callprocess
caller
callee(callee is atanh)
0.98 2.3
04/22/23 Distributed Systems - Comp 655 13
RPC: call the procedure across a network
clientprocess
serverprocess
network
caller callee
clientstub
serverstub
0.98
Atanh, 0.98message
0.98
04/22/23 Distributed Systems - Comp 655 14
RPC: call the procedure across a network
clientprocess
serverprocess
network
caller callee
clientstub
serverstub
2.3
OK, 2.3message
2.3
04/22/23 Distributed Systems - Comp 655 15
RPC Summaryclient
processserver
process
network
caller
clientstub
callee
serverstub
•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)
04/22/23 Distributed Systems - Comp 655 16
Warning: passing parameters and results
can be tricky
04/22/23 Distributed Systems - Comp 655 17
Passing Value Parameters (1)
04/22/23 Distributed Systems - Comp 655 18
Passing Value Parameters (2)
a) Original message (JILL, 5) on the Pentium (little endian)b) The message after receipt on the SPARC (big endian)c) The message after being inverted. The little numbers in
boxes indicate the address of each byte
Number is backwards String is backwards
04/22/23 Distributed Systems - Comp 655 19
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.
04/22/23 Distributed Systems - Comp 655 20
Interface definitionInterface definitions are critical
factors in • Openness• Flexibility• Access transparency• Enabling proxy construction in
middleware
04/22/23 Distributed Systems - Comp 655 21
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 BNetwork
04/22/23 Distributed Systems - Comp 655 22
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
04/22/23 Distributed Systems - Comp 655 23
Activity – what could you do about it?
Brainstorm approaches to dealing with the top three failure modes
A BNetwork
04/22/23 Distributed Systems - Comp 655 24
Communication patterns -reminder
Parameters:• Query-response or producer-consumer• Blocking or non-blocking• Connection-based or connection-less• Persistent or transientExamples:• blocking transient query-response == RPC• non-blocking persistent
producer/consumer == message queuing
04/22/23 Distributed Systems - Comp 655 25
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
04/22/23 Distributed Systems - Comp 655 26
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
04/22/23 Distributed Systems - Comp 655 27
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
04/22/23 Distributed Systems - Comp 655 28
Distributed Objects
• Common organization of a remote object with client-side proxy.
2-16
04/22/23 Distributed Systems - Comp 655 29
Basic Java RMI
rmiregistry**
Server
Client1. Server registers its name
and remote object2. Client gets reference to
remote object from rmiregistry
3. Client calls server
Interface.class_Stub.class *
1.
2.
3.
Interface.class_Skel.class *
* = 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.
04/22/23 Distributed Systems - Comp 655 30
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?
04/22/23 Distributed Systems - Comp 655 31
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
04/22/23 Distributed Systems - Comp 655 32
Parameter Passing in RMI
04/22/23 Distributed Systems - Comp 655 33
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
04/22/23 Distributed Systems - Comp 655 34
Steps in an HTTP interaction
1. Client requests TCP connection2. Client and server collaborate to
create a TCP connection3. Client sends an HTTP request4. Server sends a response5. TCP connection torn down
• In HTTP 1.1, connection can be kept alive
04/22/23 Distributed Systems - Comp 655 35
Anatomy of an HTTP request
POST /don/demo HTTP/1.1accept: */*accept-language: en-usreferer: http://localhost:8080/don/echoclient.htmcontent-type: application/x-www-form-urlencodedaccept-encoding: gzip, deflateuser-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:8080content-length: 37connection: Keep-Alivecache-control: no-cache
name=007&mission=deep%20dark%20secret
methodrequest URI protocolheaders
content
04/22/23 Distributed Systems - Comp 655 36
Watch out for Norton (and others)
POST /don/demo HTTP/1.1accept: */*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:8080content-length: 37connection: Keep-Alivecache-control: no-cache
name=007&mission=deep%20dark%20secret
04/22/23 Distributed Systems - Comp 655 37
Anatomy of an HTTP response
HTTP/1.1 200 OKX-Powered-By: Servlet/2.5Content-Type: text/xml;charset=utf-8Content-Length: 57Date: Sun, 16 Sep 2007 17:55:54 GMTServer: Sun Java System Application Server Platform Edition 9.0_01
<greeting>Hello, 007. You made a POST request.</greeting>
protocolstatuscode
headers
content
reason phrase
04/22/23 Distributed Systems - Comp 655 38 Mak
ing
an H
TTP
requ
est i
n Ja
va
04/22/23 Distributed Systems - Comp 655 39
Server side: HttpServlet
04/22/23 Distributed Systems - Comp 655 40
Servlet container
client
Container (Tomcat, Glassfish,WebLogic, WebSphere, etc)
your Servlet
DB
Servletbase classrequest
response
whatever
04/22/23 Distributed Systems - Comp 655 41
Smudging the transparency …
• Network-unfriendly code• Lots of clients can mean lots of
configuration management
04/22/23 Distributed Systems - Comp 655 42
Network-unfriendly code …• In OO, there are usually lots of fine-grained
classes, and lots of getters and setters
• Performance is not good if you do this over a network
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);…
04/22/23 Distributed Systems - Comp 655 43
Network-unfriendlyclient server
domainobject
domainobject
04/22/23 Distributed Systems - Comp 655 44
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
04/22/23 Distributed Systems - Comp 655 45
Using Remote Façade + DTO1. Client creates a DTO
2. Client calls lots of setters on DTO3. Client calls façade with DTO as
parameter4. Service calls lots of getters on DTO,
setters (and other methods, as needed) on the domain object(s)
5. Façade creates DTO26. Façade calls setters on DTO27. Façade returns DTO2 to client8. Client calls lots of getters on DTO2
04/22/23 Distributed Systems - Comp 655 46
Using Remote Façade + DTO
client server
DTO DTOdomainobject
DTO2 DTO2
Façade
domainobject
04/22/23 Distributed Systems - Comp 655 47
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);…
04/22/23 Distributed Systems - Comp 655 48
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
04/22/23 Distributed Systems - Comp 655 49
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
04/22/23 Distributed Systems - Comp 655 50
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
04/22/23 Distributed Systems - Comp 655 51
Remote façade + DTO (again)
client server
PersonTO PersonTO Person+ name+ addr
client server
PersonTO PersonTO Person+ name
Address
befo
reaf
ter
Façade
Façade
04/22/23 Distributed Systems - Comp 655 52
I hate to wait …
04/22/23 Distributed Systems - Comp 655 53
RMI is usually synchronous
04/22/23 Distributed Systems - Comp 655 54
Asynchronous RPC (1)
a) interconnection between client and server in a traditional RPC
b) The interaction using asynchronous RPC
2-12
04/22/23 Distributed Systems - Comp 655 55
Asynchronous RPC (2)
2-13
04/22/23 Distributed Systems - Comp 655 56
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
04/22/23 Distributed Systems - Comp 655 57
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 remote-machine policies
• Message queuing enables more loosely-coupled communication
04/22/23 Distributed Systems - Comp 655 58
General Architecture of a Message-Queuing System (1)
04/22/23 Distributed Systems - Comp 655 59
Message-Queuing Primitives
Primitive MeaningPut 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.
04/22/23 Distributed Systems - Comp 655 60
Consumer message queuing: email
sender’smachine
sender’semailserver
receiver’semailserver
receiver’smachine
host hostcommserver
commserver
04/22/23 Distributed Systems - Comp 655 61
Example: IBM MQSeries• General organization of IBM's MQSeries
message-queuing system.2-31
04/22/23 Distributed Systems - Comp 655 62
Message Brokers
• The general organization of a message broker in a message-queuing
• system.
2-30
04/22/23 Distributed Systems - Comp 655 63
Middleware communication summary
Common name PatternRPC Blocking, transient
request/responseRMI Blocking, transient
request/responsehttp (officially) non-blocking,
transient request/response
Asynchronous RPC
Non-blocking, transient request/response
Message queuing
Non-blocking, persistent producer/consumer
04/22/23 Distributed Systems - Comp 655 64
Bonus material
04/22/23 Distributed Systems - Comp 655 65
Implementing a Java RMI server and client
1. Define the remote interface2. Write a class that implements it3. Include that class in an application4. Compile5. Generate stub and skeleton with
rmic(not necessary with 1.5)
6. Start rmiregistry, if necessary
04/22/23 Distributed Systems - Comp 655 66
1. Define the Interfaceimport 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;
}
04/22/23 Distributed Systems - Comp 655 67
2. Implement the interfacepublic class HelloServer extends UnicastRemoteObject implements HelloInterface {
HelloServer() throws RemoteException {super(Constants.serverPort);System.out.println(toString());
// RegisterRegistry reg =
LocateRegistry.getRegistry(Constants.rmiPort);reg.rebind(Constants.serverName, this);
}
…
04/22/23 Distributed Systems - Comp 655 68
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;}
04/22/23 Distributed Systems - Comp 655 69
3. Include in an applicationpublic static void main(String[] args) throws
RemoteException {new HelloServer();
}
04/22/23 Distributed Systems - Comp 655 70
6. Start RMI Registry>> start rmiregistry
04/22/23 Distributed Systems - Comp 655 71
Implementation continued8. Assign the server a name9. Run the server, using that name10.Write a class that uses the
remote interface (by name)11.Compile12.Run13.Enjoy
04/22/23 Distributed Systems - Comp 655 72
8,9. Name the serverpublic class Constants {
public static final int rmiPort = 5555;public static final int serverPort = 43215;public static final String serverName =
"whatever";}
04/22/23 Distributed Systems - Comp 655 73
10. Write a clientpublic 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();}
}
04/22/23 Distributed Systems - Comp 655 74
11. Run>> java HelloClient Alice Bob Carol DaveHello, AliceHello, BobHello, CarolHello, Davegoodbye goodbye goodbye goodbye
>>
04/22/23 Distributed Systems - Comp 655 75
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/windows/rmiregistry.html