remote procedure call and remote method invocation inf 123 – software architecture...

30
Remote Procedure Call and Remote Method Invocation INF 123 – Software architecture [email protected] 1

Upload: julianna-bryant

Post on 16-Dec-2015

218 views

Category:

Documents


0 download

TRANSCRIPT

1

Remote Procedure Calland Remote Method Invocation

INF 123 – Software [email protected]

2

Outline

• RPC theory• Sun RPC• XML RPC• RMI

3

RPC: THEORY

4

The Problem

• 1980s: Internet and web servers• How can a client make a server do something?

– Sockets are used to transmit data, not functions– Sending function code as text is a bad idea

• Client in Python, server in C#?• Server runs eval(evil_code)? Eval is evil …

5

Dr. Eval

eval(readline()), eval(message), …

6

Reminder: main and subroutines

• Main calls subroutines• Subroutines return values• Subroutines have no side-effects

• AKA “call and return”• “Not a real architecture” <- really? Why?

7

RPC

• Transparently call a procedure located in another process or machine

• “make the invocation of a procedure on a remote machine appear as though it were local” http://people.sju.edu/~jhodgson/netw/rpc.html

8

Solution: RPC

r = foo(a, b)

define foo(a, b) …end

caller

callee

program

host

Local Procedure Calls

r = foo(a, b)

define foo(a, b) …end

caller

callee

program

host 1

host 2program

Remote Procedure Calls

Caller stub

Callee stub

9

RPC with words

• The local procedure calls a caller stub• The caller stub serializes the call (function name +

arguments) and sends it to the callee stub on a remote machine

• The callee stub calls the remote procedure• The remote procedure does its job, and gives the

return value to the callee stub• The callee stub sends the value back to the caller stub• The caller stub passes that value back to the local

procedure

10

Stubs

• Caller = client (initiate, active end)• Callee = server (listen, passive end)• The stubs are coupled• Client stub must know server stub’s IP and port

– Sometimes, a port is reserved for RPC• Stubs are usually generated by tools

– Rpcgen for Sun RPC, wscompile for JAX-RPC, …• Other naming: server stub = skeleton

11

RPC

• RPC belongs to the application layer

Procedure Interface Definition (in Interface Def Language)

Callee Program (in server language)

Caller program (in client language)

Client Stub(in client language)

Server Stub(in server language)

generate

Network OS Network OS

call

Usual code

RPC code

call

Serialize and send Deserialize and receive

12

RPC as middleware

Application

RPC stubs

RPC Request-reply protocol, and RPC serialization format

OS

Middleware layers

Middleware: software between OS and application

13

RPC is not P2P

• In both cases, nodes are clients and servers to each other

• But in RPC, the goal is to execute a function remotely– A client and a server could use RPC– Peers could use RPC with each other– Peers could simply exchange data, and not use RPC

• RPC stubs use a client-server paradigm– With a request-response messaging pattern

14

SUN RPC: DATE/TIME SERVER EXAMPLE IN C

From Unix Network Programming, by Stevens et al.

15

Sun RPC

• AKA Open Network Computing• Created in the mid 80s by Sun• The developer writes:

– interface.x, the interface definition, in Interface Definition Language

– callee.c, the server with the remote procedure– caller.c, the client calling the remote procedure

• The rpcgen compiler generates:– interface.h, to be imported by caller.c and callee.c– callee_stub.c– caller_stub.c

16

XDR

• eXternal Data Representation• Created in the mid 80s by Sun• Binary encoding• The data format exchanged between stubs• Serialization format used by:

– Network File System (created by Sun)– SpiderMonkey (Firefox JS engine, XDR used to

exchange compiled JS)– R (stats tool)

17

Sun RPC

caller.c

interface.x

callee_stub.ccaller_stub.c

callee.c

Import function signature

Call Call

network

Send XDR Recv XDR

Generate

interface.h

Generate

generated

Hand-writtenImport function signature

18

caller.c (I adapted it)

server = ‘167.56.7.99’;

client = create_client(server, DATE_PROG, DATE_VERS, "udp");

bin_date = get_binary_date(NULL, client);

str_date = bin2str_date(bin_date, client);

printf("time on server %s: %s", server, *str_date); http://stencel.mimuw.edu.pl/so/3_rpc/G_rpcgen/

http://web.cs.wpi.edu/~rek/DCS/D04/SunRPC.html

19

caller_stub.c (generated and adapted)

#include "date.h"

static struct timeval TIMEOUT = { 25, 0 };

long * get_binary_date(void *argp, CLIENT *clnt) {static long clnt_res; // return value is a long

memset((char *)&clnt_res, 0, sizeof (clnt_res)); // allocate memory cli_call = client_call(clnt, GET_BIN_DATE, // RPC function number

(xdrproc_t) xdr_void, // argument type (caddr_t) argp, // argument value (xdrproc_t) xdr_long, // return value type(caddr_t) &clnt_res, // store in this memory area TIMEOUT);

if (cli_call != RPC_SUCCESS) {return (NULL);

} return (&clnt_res); }

20

Sun RPC API

• client_call • create_client

• And more …

21

XML RPC

22

XML RPC

• Over HTTP POST• 1998, many language bindings• http://xmlrpc.scripting.com/spec.html

23

XML RPC - request

POST /RPC2 HTTP/1.1User-Agent: Frontier/5.1.2 (WinNT)Host: betty.userland.comContent-Type: text/xmlContent-length: 181

<?xml version="1.0"?> <methodCall>

<methodName>examples.getStateName</methodName> <params>

<param> <value><int>41</int></value>

</param> </params>

</methodCall>

24

XML RPC – success response

HTTP/1.1 200 OK Connection: close Content-Length: 158 Content-Type: text/xml Date: Fri, 17 Jul 1998 19:55:08 GMT Server: UserLand Frontier/5.1.2-WinNT

<?xml version="1.0"?> <methodResponse>

<params> <param>

<value><string>South Dakota</string></value> </param>

</params> </methodResponse>

25

XML RPC – failure responseHTTP/1.1 200 OK Connection: close Content-Length: 426 Content-Type: text/xml Date: Fri, 17 Jul 1998 19:55:02 GMT Server: UserLand Frontier/5.1.2-WinNT

<?xml version="1.0"?> <methodResponse>

<fault> <value> <struct>

<member> <name>faultCode</name>

<value><int>4</int></value> </member> <member> <name>faultString</name> <value><string>Too many parameters.

</string> </value></member>

</struct> </value> </fault>

</methodResponse>

26

XML RPC vs XML: bandwidth <struct> <member> <name>ROOM_ID</name> <value> <int>1</int> </value> </member> <member> <name>CODE</name> <value> <string>MR-101</string> </value> </member> <member> <name>NAME</name> <value> <string>Math Room</string> </value> </member> <member> <name>CAPACITY</name> <value> <int>30</int> </value> </member> </struct>

<room> <ROOM_ID>1</ROOM_ID> <CODE>MR-101</CODE> <NAME>Math Room</NAME> <CAPACITY>30</CAPACITY></room>http://stackoverflow.com/questions/1376688/what-is-the-benefit-of-xml-rpc-over-plain-xml

class Room { int id=1; String code="MR-101"; String name="Maths room"; int capacity=30; };

27

REMOTE METHOD INVOCATION

28

Proxy objects

• Equivalent of stub, but for client objects• Goal: make RMI transparent to clients

– Proxy objects behave like a local object to the invoker– Instead of executing, proxy objects serialize arguments

and forward the call + arguments to the remote object• Human writes class interface with method names• RMI compiler generates proxy classes, skeleton

classes, and server dispatcher

29

Remote Method Invocation

Object A

Object B

Comm. Module

Comm. Module

Skeletonfor B’s Class

Server Process

Client Process

ProxyObject

B Remote

Reference Module

Dispatcher

Remote Reference Module

MIDDLEWARE

Proxy object is a hollow container of Method names.

Remote Reference Module translates between local and remote object references.

Dispatcher sends the request to Skeleton Object

Skeleton deserializes parameters, sends it to the object, & marshals the results for return

http://courses.engr.illinois.edu/cs425/fa2012/L8.fa12.ppt

30

More

• www.cs.bham.ac.uk/~bxb/courses/02_03_DS/Lecture05_Slides.pdf

• http://courses.engr.illinois.edu/cs425/fa2012/L8.fa12.ppt• www2.hh.se/staff/vero/concurrent/lectures/lecture6.pdf• Implementing Remote Procedure Calls, Birrell et al. 1984• https://docs.python.org/2/library/xmlrpclib.html• http://

technet.microsoft.com/en-us/library/cc738291%28v=WS.10%29.aspx

• http://docs.oracle.com/javaee/1.4/tutorial/doc/JAXRPC3.html