Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
Communication essentials • Communication patterns • Communication structure: OSI reference model and TCP/IP coverage • Major middleware communication services – – – – – – 5/25/2017 RPC RMI http I hate to wait … Message passing (skip) Streams Distributed Systems - Comp 655 1 Communication patterns Producer Consumer query response 5/25/2017 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 5/25/2017 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 5/25/2017 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 5/25/2017 Distributed Systems - Comp 655 5 Communication essentials • Communication patterns • Communication structure: OSI reference model and TCP/IP coverage • Major middleware communication services – – – – – 5/25/2017 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 5/25/2017 Distributed Systems - Comp 655 7 Middleware Protocols 2-5 RPC RMI 5/25/2017 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 5/25/2017 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 5/25/2017 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) 5/25/2017 Distributed Systems - Comp 655 11 Ordinary procedure call process caller 0.98 callee 5/25/2017 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 5/25/2017 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 5/25/2017 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 5/25/2017 Distributed Systems - Comp 655 15 Warning: passing parameters and results can be tricky 5/25/2017 Distributed Systems - Comp 655 16 Passing Value Parameters (1) 5/25/2017 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 5/25/2017 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. 5/25/2017 Distributed Systems - Comp 655 19 Interface definition Interface definitions are critical factors in • Openness • Flexibility • Access transparency • Enabling proxy construction in middleware 5/25/2017 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 5/25/2017 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 5/25/2017 Distributed Systems - Comp 655 22 Activity – what could you do about it? Brainstorm approaches to dealing with the top three failure modes A 5/25/2017 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 5/25/2017 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 5/25/2017 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 5/25/2017 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 5/25/2017 Distributed Systems - Comp 655 27 Distributed Objects 2-16 • Common organization of a remote object with client-side proxy. 5/25/2017 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 * 5/25/2017 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? 5/25/2017 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 5/25/2017 Distributed Systems - Comp 655 31 Parameter Passing in RMI 5/25/2017 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 5/25/2017 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 5/25/2017 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 5/25/2017 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 5/25/2017 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 5/25/2017 Distributed Systems - Comp 655 37 Distributed Systems - Comp 655 38 Making an HTTP request in Java 5/25/2017 Server side: HttpServlet 5/25/2017 Distributed Systems - Comp 655 39 Servlet container request client response Servlet base class your Servlet Container (Tomcat, Glassfish, WebLogic, WebSphere, etc) DB 5/25/2017 Distributed Systems - Comp 655 whatever 40 Smudging the transparency … • Network-unfriendly code • Lots of clients can mean lots of configuration management 5/25/2017 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 5/25/2017 Distributed Systems - Comp 655 42 Network-unfriendly client server domain object domain object 5/25/2017 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 5/25/2017 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 5/25/2017 Distributed Systems - Comp 655 45 Using Remote Façade + DTO client DTO server DTO domain object DTO2 DTO2 domain object Façade 5/25/2017 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); … 5/25/2017 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 5/25/2017 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 5/25/2017 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 5/25/2017 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 5/25/2017 Distributed Systems - Comp 655 Person + name Address 51 I hate to wait … 5/25/2017 Distributed Systems - Comp 655 52 RMI is usually synchronous 5/25/2017 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 5/25/2017 Distributed Systems - Comp 655 54 Asynchronous RPC (2) 2-13 5/25/2017 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 5/25/2017 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 5/25/2017 Distributed Systems - Comp 655 57 General Architecture of a Message-Queuing System (1) 5/25/2017 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. 5/25/2017 Distributed Systems - Comp 655 59 Consumer message queuing: email sender’s machine host 5/25/2017 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 5/25/2017 Distributed Systems - Comp 655 61 Message Brokers 2-30 • The general organization of a message broker in a message-queuing • system. 5/25/2017 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 5/25/2017 Distributed Systems - Comp 655 63 Bonus material 5/25/2017 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 5/25/2017 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; } 5/25/2017 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); } … 5/25/2017 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; } 5/25/2017 Distributed Systems - Comp 655 68 3. Include in an application public static void main(String[] args) throws RemoteException { new HelloServer(); } 5/25/2017 Distributed Systems - Comp 655 69 6. Start RMI Registry >> start rmiregistry 5/25/2017 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 5/25/2017 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"; } 5/25/2017 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(); } } 5/25/2017 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 >> 5/25/2017 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 5/25/2017 Distributed Systems - Comp 655 75