Upload
brian-wilkerson
View
215
Download
0
Tags:
Embed Size (px)
Citation preview
RPCRemote Procedure Call
Dave Hollinger
Rensselaer Polytechnic Institute
Troy, NY
Y Kermarrec Netprog: RPC Overview2
Distributed Program Design
Communication-Oriented Design• Design protocol first. • Build programs that adhere to the protocol.
Application-Oriented Design• Build application(s).• Divide programs up and add communication
protocols.
Typical
Sockets
Approach
RPC
Y Kermarrec Netprog: RPC Overview3
RPCRemote Procedure Call
Call a procedure (subroutine) that is running on another machine.
Issues:• identifying and accessing the remote procedure• parameters• return value
Y Kermarrec Netprog: RPC Overview4
blah, blah, blah
bar = foo(a,b);
blah, blah, blah
blah, blah, blah
bar = foo(a,b);
blah, blah, blah
int foo(int x, int y ) { if (x>100)
return(y-2); else if (x>10)
return(y-x); else
return(x+y);}
int foo(int x, int y ) { if (x>100)
return(y-2); else if (x>10)
return(y-x); else
return(x+y);}
Client
Server
protocol
Remote Subroutine
Y Kermarrec Netprog: RPC Overview5
Sun RPC
There are a number of popular RPC specifications. Sun RPC (ONC RPC) is widely used. NFS (Network File System) is RPC based. Rich set of support tools.
Y Kermarrec
Classic Procedure Call
Call Stack Parameter Passing Error and exception Semantics
Y Kermarrec
Implementing RPC
Seems to be complex as we need to go through the network
The trick:• Create stub functions to make it appear to the user that the call is local•Stub function contains the function’s interface
Y Kermarrec
client server
Stub functions
network routinesnetwork routines
server functionsserver functions
server stub(skeleton)
server stub(skeleton)
network routinesnetwork routines
1. Client calls stub (params on stack)
client functionsclient functions
client stubclient stub
Y Kermarrec
client server
Stub functions
server functionsserver functions
server stub(skeleton)
server stub(skeleton)
network routinesnetwork routines
2. Stub marshals params to net message
client functionsclient functions
client stubclient stub
network routinesnetwork routines
Y Kermarrec
client server
Stub functions3. Network message sent to server
client functionsclient functions
client stubclient stub
network routinesnetwork routines
server functionsserver functions
server stub(skeleton)
server stub(skeleton)
network routinesnetwork routines
Y Kermarrec
client server
Stub functions4. Receive message: send to stub
client functionsclient functions
client stubclient stub
network routinesnetwork routines
server functionsserver functions
server stub(skeleton)
server stub(skeleton)
network routinesnetwork routines
Y Kermarrec
client server
Stub functions5. Unmarshal parameters, call server func
client functionsclient functions
client stubclient stub
network routinesnetwork routines
server functionsserver functions
server stub(skeleton)
server stub(skeleton)
network routinesnetwork routines
Y Kermarrec
client server
Stub functions6. Return from server function
client functionsclient functions
client stubclient stub
network routinesnetwork routines
server functionsserver functions
server stub(skeleton)
server stub(skeleton)
network routinesnetwork routines
Y Kermarrec
client server
Stub functions7. Marshal return value and send message
client functionsclient functions
client stubclient stub
network routinesnetwork routines
server functionsserver functions
server stub(skeleton)
server stub(skeleton)
network routinesnetwork routines
Y Kermarrec
client server
Stub functions8. Transfer message over network
client functionsclient functions
client stubclient stub
network routinesnetwork routines
server functionsserver functions
server stub(skeleton)
server stub(skeleton)
network routinesnetwork routines
Y Kermarrec
client server
Stub functions9. Receive message: direct to stub
client functionsclient functions
client stubclient stub
network routinesnetwork routines
server functionsserver functions
server stub(skeleton)
server stub(skeleton)
network routinesnetwork routines
Y Kermarrec
client server
Stub functions10. Unmarshal return, return to client code
client functionsclient functions
client stubclient stub
network routinesnetwork routines
server functionsserver functions
server stub(skeleton)
server stub(skeleton)
network routinesnetwork routines
Y Kermarrec
RPCL : an example
program MESSAGE_PROG {
version MESSAGE_VERS {
int PRINT_MESSAGE (string) = 1 ;
} = 1 ;
} = 0x 2000 0001 ;
Y Kermarrec Netprog: RPC Overview19
Procedure Arguments
To reduce the complexity of the interface specification, Sun RPC includes support for a single argument to a remote procedure.*
Typically the single argument is a structure that contains a number of values (the parameters).
* Newer versions can handle multiple args.
Y Kermarrec Netprog: RPC Overview20
Procedure Identification
Each procedure is identified by:• Hostname (IP Address)• Program identifier (32 bit integer)• Procedure identifier (32 bit integer)
– Program Version identifier» for testing and migration » Used also to detect out dated version of a server
Y Kermarrec Netprog: RPC Overview21
Procedure Identifiers &Program Version Numbers
Procedure Identifiers usually start at 1 and are numbered sequentially
Version Numbers typically start at 1 and are numbered sequentially.
Service number is coded on 32 bits• Possible user value range : 0x 2000 0000 à 0x 3fff
ffff
Y Kermarrec Netprog: RPC Overview22
Iterative Server
Sun RPC specifies that at most one remote procedure within a program can be invoked at any given time.
If a 2nd procedure is called, the call blocks until the 1st procedure has completed.
Y Kermarrec Netprog: RPC Overview23
Call Semantics
What does it mean to call a local procedure?• the procedure is run exactly one time.
What does it mean to call a remote procedure?• It might not mean "run exactly once"!
Y Kermarrec Netprog: RPC Overview24
Remote Call Semantics
To act like a local procedure (exactly one invocation per call) - a reliable transport (TCP) is necessary.
Sun RPC does not support reliable call semantics.
"At Least Once" Semantics "Zero or More" Semantics
Y Kermarrec Netprog: RPC Overview25
Sun RPC Call Semantics
At Least Once Semantics• if we get a response (a return value)
Zero or More Semantics• if we don't hear back from the remote subroutine.
Y Kermarrec Netprog: RPC Overview26
Remote Procedure deposit()
deposit(DavesAccount,$100)
Always remember that you don't know how many times the remote procedure was run!• The net can duplicate the request (UDP).
Y Kermarrec Netprog: RPC Overview27
Network Communication
The actual network communication is nothing new - it's just TCP/IP.
Many RPC implementations are built upon the sockets library.• the RPC library does all the work!
The programmer may select UDP or TCP based on his/her requirements
Y Kermarrec Netprog: RPC Overview28
Dynamic Port Mapping
How to determine where the server is waiting requests ?
Servers typically do not use well known protocol ports
Clients know the Program ID (and host IP address).
RPC includes support for looking up the port number of a remote program.
Y Kermarrec Netprog: RPC Overview29
The portmapper
Each system which will support RPC servers runs a port mapper server that provides a central registry for RPC services.
Servers tell the port mapper what services they offer.
Y Kermarrec Netprog: RPC Overview30
More on the portmapper
Clients ask a remote port mapper for the port number corresponding to Remote Program ID.
The portmapper is itself an RPC server!
The portmapper is available on a well-known port (111).
Y Kermarrec Netprog: RPC Overview31
RPCGEN
There is a tool for automating the creation of RPC clients and servers.
The program rpcgen does most of the work for you.
The input to rpcgen is a protocol definition in the form of a list of remote procedures and parameter types.
Y Kermarrec
Protocol Definition: simp.x
struct operands { int x; int y;};program SIMP_PROG { version SIMP_VERSION { int ADD(operands) = 1; int SUB(operands) = 2; } = VERSION_NUMBER;} = 555555555;
RPC Programming32
Y Kermarrec Netprog: RPC Overview33
RPCGEN
Input FileInput File
rpcgen
Client Stubs XDR filters header file Server skeleton
C Source Code
ProtocolDescription
Y Kermarrec Netprog: RPC Overview34
rpcgen Output Files
> rpcgen –C foo.x
foo_clnt.c (client stubs)
foo_svc.c (server main)
foo_xdr.c (xdr filters)
foo.h (shared header file)
Y Kermarrec
RPC compiler in action
IDLIDL RPCcompiler
client code (main)client code (main)
server functionsserver functions
client stubclient stub
headersheaders
server skeletonserver skeleton
data conv.data conv.
data conv.data conv. compilercompiler
compilercompiler serverserver
clientclient
Code you write
Code RPC compiler generates
Y Kermarrec
XDR
Powerful paradigm for creation and transfer of complex data structures
XDR provides a service associated with the OSI Presentation Layer.• Common data representation• Library
- not part of the O.S.
• Easy to port to new architectures• Independence from transport layer
XDR36
Y Kermarrec
Data Conversion
Asymmetric Data Conversion• client always converts to the server’s data
representation.
Symmetric Data Conversion• both client and server convert to/from some
standard representation.
XDR is Symmetric Data Conversion
XDR37
Y Kermarrec
Implicit vs. Explicit Typing
Explicit typing• each piece of data includes information about the
type
Implicit typing• the sender and receiver must agree on the order
and type of all data
XDR uses Implicit Typing
XDR38
Y Kermarrec
XDR Data Types
boolean char short int long float double
XDR39
enumeration structure string fixed length array (1-D) variable length array (1-D) union opaque data
Y Kermarrec
XDR Programming
XDR libraries are based on a stream paradigm
The process of converting local data to XDR also puts the data in the XDR stream
When extracting an item from a stream, conversion is done to the local representation
Streams can be attached to a file, pipe, socket or memory• Individual data items are added to (removed from) the
stream one at a time
XDR40
Y Kermarrec
Conversion Terminology
Converting from local representation to XDR representation is called Encoding.
Converting from XDR representation to local representation is called Decoding.
XDR41
SenderSender ReceiverReceiverXDRXDRENCODEENCODE DECODEDECODE
Y Kermarrec
Information for the labs
You are going to experiment :• how to go from a classic procedure call to an RPC• How to run a server and activate clients calls• What is the magic (the work of rpcgen) behind the
scene in terms of socket management, connections, errors and fault detection.
• Get the initial insights for all the other paradigms (distributed object, Java RMI, web services…) work and are handled
Y Kermarrec
Survey
RPC is a powerful way to program distributed system quite easily
It was initialy an OS feature that has been moved to the programmer’s world
Numerous benefits in terms of transparencies and above all fault tolerance