Note - Academic Csuohio - Cleveland State University

Download Report

Transcript Note - Academic Csuohio - Cleveland State University

EEC-681/781
Distributed Computing
Systems
Lecture 5
Wenbing Zhao
Department of Electrical and Computer Engineering
Cleveland State University
[email protected]
2
Outline
• Remote Procedure Call
• Remote Method Invocation
• Case study: Java RMI
– Material taken from
http://java.sun.com/developer/onlineTraining/rmi/RMI.html
Fall Semester 2006
EEC-681: Distributed Computing Systems
Wenbing Zhao
3
Conventional Procedure Call
count = read(fd, buf, bytes);
Parameter passing in a local
procedure call: the stack
before the call to read()
Fall Semester 2006
The stack while the
called procedure is active
EEC-681: Distributed Computing Systems
Wenbing Zhao
4
Parameter Passing in
Procedure Call
• Passing by value
• Passing by reference
0x01400000
buffer
fd = 10;
bytes = 1024;
buf = 0x01400000;
count = read(fd, buf, bytes);
Fall Semester 2006
EEC-681: Distributed Computing Systems
Read()
fd = 10;
bytes = 1024;
buf = 0x01400000;
Wenbing Zhao
5
Remote Procedure Call
• Observations:
– Application developers are familiar with simple
procedure model
– Well-engineered procedures operate in isolation
(black box)
– There is no fundamental reason not to execute
procedures on separate machine
• Conclusion: communication between caller &
callee can be hidden by using procedure-call
mechanism
Fall Semester 2006
EEC-681: Distributed Computing Systems
Wenbing Zhao
6
Client and Server Stubs
• Remote Procedure Call (RPC) achieves
distribution transparency by using a client stub
and a server stub
• The client stub provides the interface of the
procedure call => illusion of a local call interface
– It packs the parameters into a message and requests
that message be sent to the server
• The server stub is a piece of code that
transforms requests coming in over the network
into local procedure calls
Fall Semester 2006
EEC-681: Distributed Computing Systems
Wenbing Zhao
7
RPC between Client and Server
Fall Semester 2006
EEC-681: Distributed Computing Systems
Wenbing Zhao
8
Steps of Remote Procedure Call
Fall Semester 2006
EEC-681: Distributed Computing Systems
Wenbing Zhao
Parameter Passing for RPC
• Marshaling: must convert the parameters into a
message
• Marshaling is not trivial:
– Client and server machines may have different data
representations (think of byte ordering)
– Wrapping a parameter means transforming a value into
a sequence of bytes
– Client and server have to agree on the same encoding
– Client and server need to properly interpret messages,
transforming them into machine-dependent
representations
Fall Semester 2006
EEC-681: Distributed Computing Systems
Wenbing Zhao
9
10
Passing Value Parameters
Original message
on the Pentium
Fall Semester 2006
The message after The message after being
receipt on the SPARC
inverted. The little
numbers in boxes
indicate the address of
each byte
EEC-681: Distributed Computing Systems
Wenbing Zhao
11
Parameter Passing
A procedure
Fall Semester 2006
The corresponding message
EEC-681: Distributed Computing Systems
Wenbing Zhao
12
External Data Representation
• Data structures:
– “flattened” on transmission
– rebuilt upon reception
• Primitive data types:
– Byte order (big-endian: MSB comes first)
– ASCII vs UNICODE (2 bytes per character)
– Marshalling/unmarshalling
• To/from agreed external format
Fall Semester 2006
EEC-681: Distributed Computing Systems
Wenbing Zhao
13
External Data Representation
• XDR (RFC 1832), CDR (CORBA), Java:
– data -> byte stream
– object references
• HTTP/MIME:
– data -> ASCII text
Fall Semester 2006
EEC-681: Distributed Computing Systems
Wenbing Zhao
14
CORBA CDR Example
index in
sequence of bytes
0–3
4–7
8–11
12–15
16–19
20-23
24–27
4 bytes
notes
on representation
5
length of string
"Smit"
"h___"
‘Smith’
6
"Lond"
length of string
"on__"
1934
‘London’
unsigned long
The flattened form represents a Person struct with value: {‘Smith’, ‘London’, 1934}
Fall Semester 2006
EEC-681: Distributed Computing Systems
Wenbing Zhao
15
Interface Definition Language
• In order to allow servers to be accessed by
differing clients, Interface Definition Language
(IDL) is usually used to allow various platforms
to call the RPC
– The first popular implementation of RPC on Unix was
Sun's RPC, which was used as the basis for NFS
• From IDL, client and server stubs can be
generated automatically to facilitate
development
Fall Semester 2006
EEC-681: Distributed Computing Systems
Wenbing Zhao
16
Parameter Passing
• While passing value parameters is relatively
straightforward, passing reference parameters
is difficult
• If we introduce a remote reference mechanism,
access transparency can be enhanced:
– Remote reference offers unified access to remote
data
– Remote references can be passed as parameter in
RPCs
Fall Semester 2006
EEC-681: Distributed Computing Systems
Wenbing Zhao
17
Asynchronous RPC
The interconnection
between client and server
in a traditional RPC
Fall Semester 2006
The interaction using
asynchronous RPC
EEC-681: Distributed Computing Systems
Wenbing Zhao
18
Asynchronous RPC
A client and server interacting through two asynchronous
RPCs. This scheme is also called deferred synchronous RPC
Fall Semester 2006
EEC-681: Distributed Computing Systems
Wenbing Zhao
19
Remote Distributed Objects
• Data and operations encapsulated in an object
• Operations are implemented as methods, and
are accessible through interfaces
• Object offers only its interface to clients
• Object server (or host server) is responsible for
a collection of objects
• Server skeleton handles (un)marshaling and
object invocation
• Client stub (proxy) implements interface
Fall Semester 2006
EEC-681: Distributed Computing Systems
Wenbing Zhao
20
Distributed Objects
Fall Semester 2006
EEC-681: Distributed Computing Systems
Wenbing Zhao
Client-to-Object Binding
• Object reference: denotes server, object, and
communication protocol. Having an object
reference allows a client to bind to an object:
– Client loads associated stub code
– Stub is instantiated and initialized for specific object
• Two ways of binding:
– Implicit: Invoke methods directly on the referenced
object
– Explicit: Client must first explicitly bind to object
before invoking it
Fall Semester 2006
EEC-681: Distributed Computing Systems
Wenbing Zhao
21
22
Remote Method Invocation Steps
•
•
•
•
Client invokes method at stub
Stub marshals request and sends it to server
Server ensures referenced object is active
Request is unmarshaled by object’s skeleton,
and referenced method is invoked
• Result is marshaled and passed back to client
• Client stub unmarshals reply and passes result
to client application
Fall Semester 2006
EEC-681: Distributed Computing Systems
Wenbing Zhao
23
RMI: Parameter Passing
• Passing objects by value: A client may
pass a complete object as parameter value:
– An object has to be marshaled:
• Marshall its state
• Marshall its methods, or give a reference to where an
implementation can be found
– Server unmarshals object. Note that we have
now created a copy of the original object
Fall Semester 2006
EEC-681: Distributed Computing Systems
Wenbing Zhao
24
RMI: Parameter Passing
• Passing objects by reference: Much
easier than in the case of RPC:
– One can simply bind to referenced object, and
invoke methods
– Unbind when referenced object is no longer
needed
Fall Semester 2006
EEC-681: Distributed Computing Systems
Wenbing Zhao
25
Parameter Passing
• Passing an object by reference or by value
Fall Semester 2006
EEC-681: Distributed Computing Systems
Wenbing Zhao
26
Java RMI Architecture
• Design goal: to create a Java distributed object
model that integrates naturally into the Java
programming language and the local object model
• The definition of a remote service is coded using a Java
interface
• The implementation of the remote service is coded in a
class
• Interfaces define behavior and classes define
implementation
Fall Semester 2006
EEC-681: Distributed Computing Systems
Wenbing Zhao
27
Java RMI Architecture Layers
• Stub and Skeleton layer: intercepts method calls made
by the client to the interface and redirects these calls to a
remote RMI service
• Remote reference layer: to interpret and manage
references made from clients to the remote service objects
• Transport layer: provides basic connectivity, as well as
some firewall penetration strategies
RMI
System
Client Program
Server Program
Stubs & Skeletons
Stubs & Skeletons
Remote Reference Layer
Remote Reference Layer
Transport Layer
Fall Semester 2006
EEC-681: Distributed Computing Systems
Wenbing Zhao
28
Stub and Skeleton Layer
• Java RMI follows the Proxy pattern
– The stub class plays the role of the proxy
– The remote service implementation class plays the role
of the RealSubject
<<Interface>>
Subject
Request()
RealSubject
Proxy
Request()
Request()
Fall Semester 2006
EEC-681: Distributed Computing Systems
Wenbing Zhao
29
Remote Reference Layer
• Defines and supports the invocation
semantics of the RMI connection
– This layer provides a RemoteRef object that
represents the link to the remote service
implementation object
– The stub objects use the invoke()method in
RemoteRef to forward the method call
– The RemoteRef object understands the
invocation semantics for remote services
Fall Semester 2006
EEC-681: Distributed Computing Systems
Wenbing Zhao
30
Transport Layer
• The Transport Layer makes network connection
between JVMs
• Java Remote Method Protocol (JRMP): Java
RMI’s wire protocol (proprietary) on top of TCP/IP
Fall Semester 2006
EEC-681: Distributed Computing Systems
Wenbing Zhao
31
RMI Registry
• RMI Registry (rmiregistry): a simple naming
service that comes with Java RMI
– It runs on each machine that hosts remote service
objects, by default on port 1099
– It accepts registration request only from the local RMI
servers
– It accepts queries for services anywhere
Fall Semester 2006
EEC-681: Distributed Computing Systems
Wenbing Zhao
32
RMI Registry
• To access the remote server from client side:
– Query a registry by invoking the lookup()method on
the static Naming class
– The method lookup()accepts a URL that specifies
the server host name and the name of the desired
service
• rmi://<host_name>[:<name_service_port>]/<service_name>
– The method returns a remote reference to the service
object
Fall Semester 2006
EEC-681: Distributed Computing Systems
Wenbing Zhao
33
Steps to Create a Remote Service
• First create a local object that implements that
service
• Next, export that object to Java RMI. When the
object is exported, Java RMI creates a listening
service that waits for clients to connect and
request the service
• After exporting, register the object in the Java
RMI Registry under a public name
Fall Semester 2006
EEC-681: Distributed Computing Systems
Wenbing Zhao
34
Using Java RMI
• A working Java RMI system is composed of
several parts:
–
–
–
–
–
Interface definitions for the remote services
Implementations of the remote services
Stub and Skeleton files
A server to host the remote services
An RMI Naming service that allows clients to find the
remote services
– A class file provider (an HTTP or FTP server)
– A client program that needs the remote services
Fall Semester 2006
EEC-681: Distributed Computing Systems
Wenbing Zhao
35
Steps to Build a System
• Design your system
• Write and compile Java code for interfaces
• Write and compile Java code for implementation
classes
• Generate Stub and Skeleton class files from the
implementation classes
• Write Java code for a remote service host program
• Develop Java code for Java RMI client program
• Install and run Java RMI system
Fall Semester 2006
EEC-681: Distributed Computing Systems
Wenbing Zhao
36
Service Interface
public interface Calculator extends java.rmi.Remote {
public long add(long a, long b) throws
java.rmi.RemoteException;
public long sub(long a, long b) throws
java.rmi.RemoteException;
public long mul(long a, long b) throws
java.rmi.RemoteException;
public long div(long a, long b) throws
java.rmi.RemoteException;
}
To compile it:
> javac Calculator.java
Fall Semester 2006
EEC-681: Distributed Computing Systems
Wenbing Zhao
37
Implementation of Remote Service
public class CalculatorImpl
extends java.rmi.server.UnicastRemoteObject
implements Calculator {
// Implementations must have an explicit constructor //
in order to declare the RemoteException exception
public CalculatorImpl() throws
java.rmi.RemoteException {
super();
}
public long add(long a, long b)
throws java.rmi.RemoteException {
return a + b;
}
…
Fall Semester 2006
EEC-681: Distributed Computing Systems
Wenbing Zhao
38
Stubs and Skeletons
• To generate the stub and skeleton files,
invoke the RMI compiler, rmic
• The compiler runs on the remote service
implementation class file
> rmic CalculatorImpl
• After you run rmic you should find the file
CalculatorImpl_Stub.class
Fall Semester 2006
EEC-681: Distributed Computing Systems
Wenbing Zhao
39
Host Server
• Remote RMI services must be hosted in a server
process
import java.rmi.Naming;
public class CalculatorServer {
public CalculatorServer() {
try {
Calculator c = new CalculatorImpl();
Naming.rebind("rmi://localhost:1099/CalculatorService", c);
} catch (Exception e) {
System.out.println("Trouble: " + e);
}
}
public static void main(String args[]) {
new CalculatorServer();
}
}
Fall Semester 2006
EEC-681: Distributed Computing Systems
Wenbing Zhao
40
Client
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.net.MalformedURLException;
import java.rmi.NotBoundException;
public class CalculatorClient {
public static void main(String[] args) {
try {
Calculator c = (Calculator) Naming.lookup(
"rmi://localhost/CalculatorService");
System.out.println( c.sub(4, 3) );
System.out.println( c.add(4, 5) );
System.out.println( c.mul(3, 6) );
System.out.println( c.div(9, 3) );
}
…
Fall Semester 2006
EEC-681: Distributed Computing Systems
Wenbing Zhao
41
Running the RMI System
• Make sure you change to the directory that
contains the classes you have written
• Launch a terminal, start Java RMI registry
> rmiregistry
• Launch another terminal, start the server
> java CalculatorServer
• Launch the 3rd terminal, start the client
> java CalculatorClient
Fall Semester 2006
EEC-681: Distributed Computing Systems
Wenbing Zhao
42
Parameter Passing in Java RMI
• When Java RMI calls involve passing
parameters or accepting a return value
– How does RMI transfer these between JVMs?
– What semantics are used?
– Does RMI support pass-by-value or pass-byreference?
Fall Semester 2006
EEC-681: Distributed Computing Systems
Wenbing Zhao
43
Parameter Passing in Java RMI
• Primitive parameters: pass by value
– For both input parameter and return type,
Java RMI makes a copy of a primitive data
type and send it to the destination
• Object parameters: pass by value
– The object to be passed, together with all the
objects it references, are serialized and
copied over
Fall Semester 2006
EEC-681: Distributed Computing Systems
Wenbing Zhao
44
Parameter Passing in Java RMI
• Remote object parameters: pass by
reference
– A client can obtain a reference to a remote
object through the Java RMI Registry program
– A client can obtain a remote reference as a
result of making a remote method call
Fall Semester 2006
EEC-681: Distributed Computing Systems
Wenbing Zhao
Distributed Garbage Collection in
Java RMI
• Java takes care of memory management
• Distributed garbage collection is needed in Java
RMI
– Many challenges to do so. Most prominent problem is
that a client might quit without notice
– Solution: lease based. The resource is granted to a
client for certain period of time. It is the client’s
responsibility to renew the lease. The resource is
reclaimed if lease is not renewed
Fall Semester 2006
EEC-681: Distributed Computing Systems
Wenbing Zhao
45