Lecture 5: RPC and Distributed Objects Haibin Zhu, PhD. Assistant Professor Department of Computer Science Nipissing University © 2002 Contents RPC (Remote Procedure Calling) Distributed objects RMI (Remote Method Invocation) 2 Remote Procedure Call (RPC) Paradigms in building distributed applications The RPC model Primitives Issues 3 Building Distributed Programs: Two Paradigms Communication-Oriented Design – – Start with communication protocol – – Design message format and syntax – – Design client and server components by specifying how they react to incoming messages Application-Oriented Design – – Start with application – – Design, build, test conventional implementation – – Partition program Problems – – – – • Protocol-design problems • Application components as finite state machines !? • Focus on communication instead of application! • Concurrency 4 5 RPC Properties Uniform call structure Type checking Full parameter functionality Distributed binding Recovery of orphan computations 6 RPC Primitives Invocation at caller side – call service (value_args; result_args); Definition at server side – declaration remote procedure service (in value_pars; out result_pars); begin body end; 7 8 RPC Issues Parameter passing – value parameters – reference parameters? Marshalling – simple data types – complex data structures Exception handling – language dependent – need to deal with asynchronous events 9 Locating Servers Broadcast requests – – broadcast call and process incoming replies Name servers – – server registers with name server Combination: publish/subscribe 10 Communication Protocols for RPC Complicated Call • long gaps between requests • acknowledge each message transmission separately – Simple Call or • periodically send “I-am-alive” message and use simple-call scheme. • long messages (don’t fit into •Client times out and retransmits request. packet) • segment message •Three cases: • segment-relative seq #’s •request lost • retransmission scheme for •server still executing segments •ack lost Reliable protocols: e.g. TCP Unreliable datagram protocols: e.g. UDP Specifically designed protocols: Example 11 RPC in Heterogeneous Environments Compile-time support Binding protocol Transport protocol Control protocol Data representation 12 Case Study: SUN RPC • Defines format for messages, arguments, and results. • Uses UDP or TCP. • Uses XDR (eXternal Data Representation) to represent procedure arguments and header data. • Compiler system to automatically generate distributed programs. • Remote execution environment: remote program. • Mutually exclusive execution of procedure in remote program. 13 Identifying Remote Programs and Procedures • Conceptually, each procedure on a computer is identified by pair : (prog, proc) – – prog: 32-bit integer identifying remote program – – proc: integer identifying procedure • Set of program numbers partitioned into 8 sets. – – – – 0x00000000 - 0x1fffffff assigned by SUN 0x20000000 - 0x3fffffff assigned by local system manager 0x40000000 - 0x5fffffff temporary 0x60000000 - 0xffffffff reserved • Multiple remote program versions can be identified: – (prog, version, proc) 14 Communication Semantics • TCP or UDP ? • Sun RPC semantics defined as function of underlying transport protocol. – RPC on UDP: calls can be lost or duplicated. • at-least-once semantics if caller receives reply. • zero-or-more semantics if caller does not receive reply. • Programming with zero-or-more semantics: idempotent procedure calls. • Sun RPC retransmission mechanism: – non-adaptive timeouts – fixed number of retransmissions 15 16 17 Message Dispatch for Remote Programs 18 Specification for rpcgen Specify: • constants • data types • remote programs, their procedures, types of parameters /* rdict.x */ /* RPC declarations for dictionary program */ const MAXWORD = 50; const DICTSIZ = 100; struct example { /* unused; rpcgen would */ int exfield1; /* generate XDR routines */ char exfield2; /* to convert this structure.*/ }; /* RDICTPROG: remote program that provides insert, delete, and lookup */ program RDICTPROG { /* name (not used) */ version RDICTVERS { /* version declarat.*/ int INITW(void) = 1;/* first procedure */ int INSERTW(string)= 2;/* second proc.... */ int DELETEW(string)= 3; int LOOKUP(string) = 4; } = 1; /* version definit.*/ } = 0x30090949; /* program no */ /* (must be unique)*/ 19 20 Distributed object model Remote object reference: an identifier that can be used throughout a distributed system to refer to a particular unique remote object. 21 Distributed object model Figure 5.3 local remote invocation A B C local E invocation invocation local invocation D remote invocation F each process contains objects, some of which can receive remote invocations, others only local invocations those that can receive remote invocations are called remote objects objects need to know the remote object reference of an object in another process in order to invoke its methods. How do they get it? the remote interface specifies which methods can be invoked remotely • 22 Figure 5.4 A remote object and its remote interface remoteobject remote interface { Data m1 m2 m3 implementation of methods 23 m4 m5 m6 Invocation semantics Local invocations are executed exactly once Remote invocations cannot achieve this. Why not? – the Request-reply protocol can apply fault-tolerance measures Figure 5.5 Fault tolerance measures Retransmit request message Duplicate filtering Invocation semantics Re-execute procedure or retransmit reply No Not applicable Not applicable Yes No Re-execute procedure At-least-once Yes Yes Retransmit reply At-most-once 24 Maybe • Invocation semantics: failure model Maybe, At-least-once and At-most-once can suffer from crash failures when the server containing the remote object fails. Maybe - if no reply, the client does not know if method was executed or not – omission failures if the invocation or result message is lost At-least-once - the client gets a result (and the method was executed at least once) or an exception (no result) – arbitrary failures. If the invocation message is retransmitted, the remote object may execute the method more than once, possibly causing wrong values to be stored or returned. – if idempotent operations are used, arbitrary failures will not occur At-most-once - the client gets a result (and the method was executed exactly once) or an exception (instead of a result, in which case, the method was executed once or not at all) • 25 RMI (Remote Method Invocation) Communication Module Remote reference module RMI software – Proxy: make RMI transparent – Dispatcher: receives the request message from the communication module, use methodId to select and pass the request – Skelton: implements the methods in the remote interfaces. Generation of RMI software: by rmic Server and client programs 26 The architecture of remote method invocation Figure 5.6 server client object A proxy for B skeleton & dispatcher for B’s class Request remote object B Reply Communication Remote reference module module Communication module Proxy - makes RMI transparent to client. implements carriesClass out Requestremote interface. Marshals requests andprotocol unmarshals reply results. Forwards request. translates local and remote objectinterface. Skeleton - between implements methods in remote references creates remote object Unmarshals requests and marshals results. Invokes Dispatcher - and gets request from communication module and references. Uses remote methodmethod in remote object. object invokes in skeleton (usingtable methodID in message). 27 Remote reference module RMI software - between application level objects and communication and remote reference modules • Representation of a remote object reference 32 bits 32 bits Internet address port number 32 bits time 32 bits object number Figure 4.10 interface of remote object a remote object reference must be unique in the distributed system and over time. It should not be reused after the object is deleted. Why not? the first two fields locate the object unless migration or re-activation in a new process can happen the fourth field identifies the object within the process its interface tells the receiver what methods it has (e.g. class Method) a remote object reference is created by a remote reference module when a reference is passed as argument or result to another process – it will be stored in the corresponding proxy – it will be passed in request messages to identify the remote object whose method is to be invoked • 28 Shared whiteboard example (p 194) In the RMI and CORBA case studies, we use a shared whiteboard as an example – this is a distributed program that allows a group of users to share a common view of a drawing surface containing graphical objects, each of which has been drawn by one of the users. The server maintains the current state of a drawing and it provides operations for clients to: – add a shape, retrieve a shape or retrieve all the shapes, – retrieve its version number or the version number of a shape • 29 Java Remote interfaces Shape and ShapeList • Note the interfaces and arguments • GraphicalObject is a class that implements Serializable. import java.rmi.*; import java.util.Vector; public interface Shape extends Remote { int getVersion() throws RemoteException; GraphicalObject getAllState() throws RemoteException; } public interface ShapeList extends Remote { Shape newShape(GraphicalObject g) throws RemoteException; Vector allShapes() throws RemoteException; int getVersion() throws RemoteException; • } 30 The Naming class of Java RMIregistry void rebind (String name, Remote obj) This method is used by a server to register the identifier of a remote object by name, as shown in Figure 15.13, line 3. void bind (String name, Remote obj) This method can alternatively be used by a server to register a remote object by name, but if the name is already bound to a remote object reference an exception is thrown. void unbind (String name, Remote obj) This method removes a binding. Remote lookup(String name) This method is used by clients to look up a remote object by name, as shown in Figure 15.15 line 1. A remote object reference is returned. String [] list() This method returns an array of Strings containing the names bound in the registry. 31 Java class ShapeListServer with main method import java.rmi.*; public class ShapeListServer{ public static void main(String args[]){ System.setSecurityManager(new RMISecurityManager()); try{ ShapeList aShapeList = new ShapeListServant(); Naming.rebind("Shape List", aShapeList ); System.out.println("ShapeList server ready"); }catch(Exception e) { System.out.println("ShapeList server main " + e.getMessage());} } } 32 1 2 Java class ShapeListServant implements interface ShapeList import java.rmi.*; import java.rmi.server.UnicastRemoteObject; import java.util.Vector; public class ShapeListServant extends UnicastRemoteObject implements ShapeList { private Vector theList; // contains the list of Shapes 1 private int version; public ShapeListServant()throws RemoteException{...} public Shape newShape(GraphicalObject g) throws RemoteException { 2 version++; Shape s = new ShapeServant( g, version); 3 theList.addElement(s); return s; } public Vector allShapes()throws RemoteException{...} public int getVersion() throws RemoteException { ... } } 33 Java client of ShapeList import java.rmi.*; import java.rmi.server.*; Figure 5.15 import java.util.Vector; public class ShapeListClient{ public static void main(String args[]){ System.setSecurityManager(new RMISecurityManager()); ShapeList aShapeList = null; try{ aShapeList = (ShapeList) Naming.lookup("//bruno.ShapeList") ; Vector sList = aShapeList.allShapes(); } catch(RemoteException e) {System.out.println(e.getMessage()); }catch(Exception e) {System.out.println("Client: " + e.getMessage());} } } 34 1 2 Summary PRC – Interface – Parameter passing – Marshalling Distributed Objects – Remote Object Reference – Remote interface RMI – each object has a (global) remote object reference and a remote interface that specifies which of its operations can be invoked remotely. – local method invocations provide exactly-once semantics; the best RMI can guarantee is at-most-once – Middleware components (proxies, skeletons and dispatchers) hide details of marshalling, message passing and object location from programmers. 35