1 / 30

Remote Procedure Call and Remote Method Invocation

Remote Procedure Call and Remote Method Invocation. INF 123 – Software architecture tdebeauv@uci.edu. Outline. RPC theory Sun RPC XML RPC RMI. RPC: theory. The Problem. 1980s: Internet and web servers How can a client make a server do something?

duy
Download Presentation

Remote Procedure Call and Remote Method Invocation

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Remote Procedure Calland Remote Method Invocation INF 123 – Software architecture tdebeauv@uci.edu

  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 Local Procedure Calls Remote Procedure Calls host 1 host program program caller caller r = foo(a, b) r = foo(a, b) Caller stub host 2 callee program define foo(a, b) … end Callee stub define foo(a, b) … end callee

  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 Usual code RPC code • RPC belongs to the application layer Caller program (in client language) Procedure Interface Definition (in Interface Def Language) Callee Program (in server language) call generate call Server Stub (in server language) Client Stub (in client language) Serialize and send Deserialize and receive Network OS Network OS

  12. RPC as middleware Middleware: software between OS and application Application RPC stubs Middleware layers RPC Request-reply protocol, and RPC serialization format OS

  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. From Unix Network Programming, by Stevens et al. Sun RPC: DATE/Time server example IN C

  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 • eXternalData 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. generated Sun RPC Hand-written Import function signature Import function signature interface.h caller.c callee.c Generate Call Call interface.x caller_stub.c callee_stub.c Generate Send XDR Recv XDR network

  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" staticstructtimeval TIMEOUT ={25,0}; long*get_binary_date(void*argp, CLIENT *clnt){ staticlongclnt_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.1 • User-Agent: Frontier/5.1.2 (WinNT) • Host: betty.userland.com • Content-Type: text/xml • Content-length: 181 • <?xmlversion="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 • <?xmlversion="1.0"?> • <methodResponse> • <params> • <param> • <value><string>South Dakota</string></value> • </param> • </params> • </methodResponse>

  25. XML RPC – failure response • HTTP/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 • <?xmlversion="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> class Room { intid=1; String code="MR-101"; String name="Maths room"; intcapacity=30; }; http://stackoverflow.com/questions/1376688/what-is-the-benefit-of-xml-rpc-over-plain-xml

  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 Client Process Proxy Object B Proxy object is a hollow container of Method names. Remote Reference Module translates between local and remote object references. Object A Remote Reference Module Comm. Module Server Process Remote Reference Module Comm. Module Dispatcher sends the request to Skeleton Object Skeletondeserializes parameters, sends it to the object, & marshals the results for return Dispatcher Object B Skeleton for B’s Class MIDDLEWARE 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

More Related