Vous êtes sur la page 1sur 42

III-2 Invocacin Remota

Introduccin
Protocolos Request Reply
Llamadas a Procedimientos Remotos (RPC)
Invocacin a Mtodos Remotos
Ejemplo: Java RMI

Capas Intermedias - Middleware

Applications
Remote invocation, indirect communication
Underlying interprocess communication primitives:
Sockets, message passing, multicast support, overlay networks
UDP and TCP
Invocacin Remota,
Mcomunicacin indirecta

La comunicacin entre procesos en SD:


- Protocolos Solicitud-Respuesta/Request Reply
- Llamadas a Procedimientos Remotos
- Invocacin a Mtodos Remotos

Capas
Intermedia

Protocolos Solicitud-Respuesta/Request Reply

Sncrono
Reconocimientos redundante ya que cada solicitud es
seguido de una respuesta
Establecer una conexin involucar dos pares de mensajes
adems del par solicitud-respuesta
Control del flujo es redundante para la mayora de las
invocaciones, que contienen argumentos pequeos y
respuestas a ellos.

Protocolo Solicitud-Respuesta/ Request-reply


Client

doOperation

Server

Request
message

(wait)

(continuation)

Reply
message

Protocolo Request-reply:
Sncrona: Cliente se bloquea hasta que recibe respuesta
Puede usar TCP o UDP. Para ello pesa
+ Redundancia por reconocimiento
+ Pares de mensajes adicionales por request / reply
+ Redundancia por Control de Flujo

getRequest
select object
execute
method
sendReply

Operaciones del protocolo request-reply


public byte[] doOperation (RemoteRef s, int operationId, byte[] arguments)
enva una solicitud al servidor y ste retorna una respuesta.
Los argumentos especifican el servidor remoto, las operaciones que se invocarn y los
argumentos de esas operaciones.

public byte[] getRequest ();


solicita una peticin de cliente a travs del puerto del servidor.

public void sendReply (byte[] reply, InetAddress clientHost, int clientPort);


enva un mensaje de respuesta al cliente a su direccin internet y puerto
.
doOperation: Operacion Bloqueante
- mtodos para obtener la direccin y puerto del servidor
- Envia un request e invoca un receive
- se bloquea. Cuando recibe la respuesta se desbloquea

getRequest: Ocurre en el servidor.


sendReply: servidor responde

Estructura del mensaje Request-reply

messageType

int (0=Request, 1= Reply)

requestId

int

remoteReference

RemoteRef

operationId

int or Operation

arguments

array of bytes

RequestID (id peticin): sucesin de enteros + puerto y direccin internet


Modelo de Fallas: Con UDP el modelo de fallas es igual.
- doOperation esta provisto de timeout
- eliminacin de mensajes duplicados
- prdidas de mensajes de respuesta : servidores con operaciones idempotentes
o servidores con historia

Estilos de Protocolo de Intercambio: RPC

Nombre

Mensaje enviado por


Client

Server

Request

RR

Request

Reply

RRA

Request

Reply

Client

Acknowledge reply

Con UDP:
R: No se espera por respuesta. Se implementa sobre UDP
RR: se basa en el protocolo resquest y reply pero sin los mensajes de reconocimiento
Para UDP sirve para superar su modelo de falla (en cuanto a retransmisin de mensaje)
RR A: solicitud-respuesta- confirmacin.
- No se bloquea el cliente.
- confirmacin contiene el requestId de la solicitud / - Limpiar historial del servidor
TCP: Simplifica la implementacin

Ejemplo: Mensaje de solicitud de HTTP


mtodo: GET, PUT, POST, etc
Protocolo negocia contenido: que tipo de representacin datos, lenguajes, etc.
Autenticacin: del estilo name y password

method

URL or pathname

GET

//www.dcs.qmw.ac.uk/index.html

HTTP version

headers message body

HTTP/ 1.1

-Implementado sobre TCP:


Cliente enva una solicitud y el servidor acepta una conexin en el puerto del servidor o en
el puerto especificado en el URL
El cliente envia un mensaje de solicitud al servidos
El servidor envia una respuesta al cliente
La conexin se cierra

-Se modific a: conexiones persistentes: permanecen abiertas sobre una


serie de intercambios solicitud-respuesta .
Operaciones idempotentes:
Si: cliente recibe del servidor el cierre de la conexin entonces el browser reenva la solicitud
sin involucrar al cliente
No: el browser consulta al cliente que hacer

Ejemplo: Mensaje de respuesta de HTTP

HTTP version
HTTP/1.1

status code reason headers message body


200

OK

resource data

Instructors Guide for Coulouris, Dollimore, Kindberg and Blair, Distributed Systems: Concepts and Design Edn. 5
Pearson Education 2012

RPC - Llamadas a Procedimientos Remotos

RPC:
Representa un gran aporte a los sistemas
distribuidos al proporcionar un nivel alto de
transparencia en la distribucin
Extiende la abstraccin de llamadas a
procedimientos para ambientes distribuidos

RPC - Llamadas a Procedimientos Remotos

Cuestiones de Diseo sobre RPC:


Estilo de programacin
Semntica asociada a las llamadas
Transparencia

RPC - Llamadas a Procedimientos Remotos

Cuestiones de Diseo sobre RPC:


Programacin con interfaces:
Para controlar la interaccin entre mdulos. Las interfaces contienen procedimientos y
variables bien definidos.
Interfaces en Sistemas Distribuidos: cada servidor proporciona procedimientos a los
clientes.
No Detalle de implementacin, No lenguaje de programacin y Si evolucin
software
No hay acceso a variables mediante ejecucin de procesos remotos
No mecanismos pase de parmetros (llamada por valor o referencia)
Direcciones en procesos locales no son vlidas en los remotos

RPC - Llamadas a Procedimientos Remotos


Cuestiones de Diseo sobre RPC: Programacin con
interfaces:
Mecanismo RPC se integra con el lenguaje de programacin e
incluye la notacin adecuada para la definicin de interfaces
permiteindo mensajes input/output
Escritas en variedades de lenguajes, C++, Java,
Lenguajes de definicin de interfaces (IDL) estn diseados para
permitir que los procedimientos implementados en distintos
lenguajes puedan ser invocados por otros

CORBA IDL example

// In file Person.idl
struct Person {
string name;
string place;
long year;
};
interface PersonList {
readonly attribute string listname;
void addPerson(in Person p) ;
void getPerson(in string name, out Person p);
long number();
};

RPC - Llamadas a Procedimientos Remotos


Cuestiones de Diseo sobre RPC: Llamadas a
procedimientos Remotos
La operacin doOperation puede ser implementada:
Reintentar mensaje de peticin: retransmitir hasta que se reciba respuesta o el
servidor asume que hay una falla
Filtros duplicado: controla la retransmisin y filtrado de respuesta duplicadas
Retransmisin de Resultados: controla si mantiene la historia del mensaje
realizados para permitir la retransmisin sin re-ejecutar operaciones

RPC - Llamadas a Procedimientos Remotos


Semntica de Llamadas (Call semantics)

Fault tolerance measures


Retransmit request
message

Duplicate
filtering

Call
semantics

Re-execute procedure
or retransmit reply

No

Not applicable

Not applicable

Maybe

Yes

No

Re-execute procedure

At-least-once

Yes

Yes

Retransmit reply

At-most-once

Tal- vez: aplicaciones donde fallas son aceptables (fallas por omisin o caidas)
al-menos-una: el invocador recibe al menos un resultado (respuesta o excepcin).
Fallas por caidas o arbitrarias(el servidor responde a varias retransmisiones)
servidores idempotentes
como-mximo-una: se asegura que una solicitud sea respondida

RPC - Llamadas a Procedimientos Remotos


Transparencia

Llamada a procedimientos remotos es vulnerable a


fallas, ya que involucra redes y otras computadoras
La latencia en RPC es mayor que en llamadas locales
La escogencia de cuan transparente es el sistema
descansa sobre el diseador:
Implementar rutinas para excepciones en caso de la comunicacin no
sea posible
El consenso es que no debe haber transparencia en cuanto ubicacin
de procedimientos

RPC - Llamadas a Procedimientos Remotos


Rol del cliente y del servidor en procesos stub
Stub procedure en el cliente: servicio que empaqueta el identificador del procedimiento y los
argumentos en un mensaje de solicitud, que se enva al servidor

client process

server process
Request

client
program

client stub
procedure
Communication
module

Reply

server stub
procedure
Communication
dispatcher
module

service
procedure

Stub procedure en el servidor junto al despachador:


* el despachador selecciona el procedimiento stub acorde al servicio
* el stub desempaqueta los argumentos en un mensaje de solicitud y llama al servicio.
Luego empaqueta respuesta
- se comporta como un proxy

Caso de Estudio: Interfaz de archivos en Sun XDR


const MAX = 1000;
typedef int FileIdentifier;
typedef int FilePointer;
typedef int Length;
struct Data {
int length;
char buffer[MAX];
};
struct writeargs {
FileIdentifier f;
FilePointer position;
Data data;
};

struct readargs {
FileIdentifier f;
FilePointer position;
Length length;
};

no.procedimiento

program FILEREADWRITE {
version VERSION {
void WRITE(writeargs)=1;
1
Data READ(readargs)=2;
2
}=2;
version
} = 9999;
no.programa

IDL: la interfaz, proporciona no. de programa y versin.


La definicin de un procedimiento especifica su identificacin y el nmero del procedimiento.
Se permite solo un parmetro de entrada. Y los parmetos de salida retornan a travs de una simple salida
- El procedimientoconsiste de un tipo de resultado, nombre procedimiento y parmetro de entrada

Caso de Estudio: SUN RPC

SUN RPC: comunicacin cliente-servidor para la red


SUN NFS
Sistemas operativos de Sun y UNIX
Implementadores tienen la opcin de llamadas a
procedimientos remotos sobre UDP o TCP
Otra opcin es la multi-difusin con RPC
Lenguaje de interfaz XDR

Caso de Estudio: SUN RPC


Enlazador (Binding)
SUN RPC usa un servicio de enlace llamado enlazador de puertos
Cada enlazador de puerto tiene el no.programa, no.versin y no.puerto
de cada servicio local
Un servidor registra el no.programa, no.versin y no.puerto en el
enlazador de puerto
Cliente consulta al enlazador de puerto

Autenticacin
Solicitudes del cliente contienen las credenciales del usuario cliente
Campo cabecera se identifica que protocolo se usa
Protocolos: Ninguno, Unix, clave compartida, Kerberos
Unix: usa un gid y uid

Mtodos para Invocacin Remota (RMI)


RMI y RPC se parecen en:
Soportan programacin por medio de interfaces
Construidas sobre protocolos Request-Reply (peticinrespuesta) y con semnticas al-menos-uno y comomximo-uno
Niveles de transparencia similares

RMI y RPC se diferencian en:


Usar la expresividad de la OO
Puede usar la identificacin del objeto para procedimientos
de tipo pase de parmetros

RMI Objetos Distribuidos


En OO la distribucin se concreta cuando un programa
est separado en varios objetos
Referencia de Objetos: usa la identificacin del objeto
para procedimientos de tipo pase de parmetros
Interfaces: definicin de argumentos y sus tipos, valores
de retorno y excepciones; sin especificar
implementaciones
Accin: se inicia con objeto invocando mtodo en otro
objeto
Excepcin: forma de lidiar con condiciones de errores
Colector de basura: medio para liberar espacio

RMI- Mtodos para Invocacin Remota y Locales


Modelo de Objetos Distribuido. - Referencia a Objetos Remotos, ROR
-Objeto remoto que recibe una invocacin a mtodo remoto se especifica por medio de una ROR
-Las ROR pueden pasarse como argumentos y resultados de invocacin a mtodos remotos
local

remote
invocation
A

C
local E
invocation
invocation
local
invocation
D

remote
invocation

Referencia a Objeto Remoto: objetos pueden invocar mtodos de un objeto remoto si


tiene acceso a su referencia de objeto remoto Interfaz Remota: especifica cuales mtodos pueden invocarse remotamente

RMI - Un Objeto Remoto y su Interfaz Remota

remoteobject

remote
interface

Data
m1
m2
m3

implementation
of methods

m4
m5
m6

Interfaz Remota:
- Accin: se inica al invocar un mtodo (*).
- Recolector de basura Distribuido: cooperacin entre el colector local y un
mdulo aadido que colecciona la basura distribuida
- Excepciones: manejo de errores en la distribucin del objeto (timeouts) y
ejecucin de mtodos invocados

RMI - Instanciacion de objetos remotos

RMI El rol del proxy y esqueleto en invocacion de mtodos remotos

RMI - El rol del proxy y esqueleto en invocacion de metodos remotos


Mdulo de Comunicacin
Proporcionan semntica de invocacin, como ejemplo, al-menos-uno
Transmite mensaje de solicitud/respuesta entre cliente y servidor
Solicitud es (tipo de mensaje, IdSolicitud, ref objeto remoto, IdOperacion, Argumentos)
En el servidor selecciona el despachador para la clase de objeto que se invoca.
El despachador ubica la referencia local del objeto por medio del Mdulo de Referencia
Remota
Mdulo de Referencia Remota
Responsable de trasladar referencias de objets de locales a remotas y creacin de
referencias remotas
Contiene una tabla de objetos remotos y una tabla para cada proxy local
Acta de la manera sig.:
- 1era vez cuando se pasa un objeto remoto, el mdulo de referencia remota crea una
referencia al objeto remoto y se aade a la tabla de objetos remotos
- Cuando llega referencia a un objeto remoto, el mdulo de referencia obtiene referencia
al objeto local, la cual es un proxy o un objeto remoto. Si el objeto remoto no est en la tabla
se crea el proxy y se aade el mdulo de referencia remota

RMI - El rol del proxy y esqueleto en invocacion de metodos remotos


Criado (servant)
instancia de una clase que proporciona el cuerpo de un objeto remoto.
Maneja el requerimiento remoto pasado por el esqueleto correspondiente
Se crea cuando se instancia el objeto remoto
Proxy
proporciona que los mtodos de invocacin remota sean transparente al usuario
comportandose como un objeto local
Esconde los detalles del empaquetamientos/desempaquetamiento, referencias a objetos
remotas,
Despachador
un servidor tiene un despachador y un esqueleto
recibe la peticin desde el mdulo de comunicacin
usa el IdOperacion para seleccionar el mtodo adecuado en el esqueleto
Esqueleto
Implementa el mtodo en la interface remota.
Desempaqueta los argumentos e invoca el mtodo correspondiente en el criado
Espera que la invocacin se complete y empaqueta los resultados

RMI - Invocacion de Metodos Remotos -Invocacin dinmica

Invocacin Dinmica
proporciona al cliente acceso a una representacin genrica de una invocacin remota (con
el mtodo doOperation).
El cliente proporciona una referencia al objeto remoto, el nombre del mtodo y los
argumentos al operador doOperation, espera y recibe resultado
Una alternativa para interfaces que no pueden predecirse en el diseo. Ejm: JAVA RMI
Esqueletos Dinmicos
como consecuencia, el servidor tien interfaces no conocidas en tiempo de compilacin

RMI - Invocacion de Metodos Remotos -Programas en Cliente/Servidor

Mtodos Factory
las interfaces a objetos remotos no tienen constructores. Los CRIADOS se crean cuando se
inicializa o en mtodos diseado para tal fin.
Los Mtodos Factory se llaman a aquellos que crean CRIADOS
Enlazador:
es un servicio separado que mantiene una tabla que mantiene la correspondencia entre el
nombre textual y las referencias a objetos remotos
Hilos del Servidor

RMI - Invocacion de Metodos Remotos Activacin de Objetos

Activacin de Objetos remotos.


Objeto Activo: aquel que est disponible por invocacin dentro de un proceso de ejecucin
Objeto pasivo: aquel que no esta activo pero puede activarse
Consiste de :
la implementacin de sus mtodos
su estado en forma empaquetada
Activacin; crea un objeto activo a partir de uno pasivo, creando nuevas instancias de clase
e inicializando variables
Activador:
registra el objeto pasivo disponible para activacin, que se involucra guardar nombres
de servidores, archivos, URL del objeto pasivo
arranca proceso de servicio con nombre y activa objeto remoto,
mantiene ubicacin de los sevidores de los objetos remotos activados

RMI - Invocacion de Metodos Remotos


Guardar Objetos Persistentes
Objetos Persistentes: objeto cuya vida esta garantizada entre procesos de activacin.
Almacenamiento de Objetos Persistentes: guardan la forma empaquetada de los
objetos persistentes
Estrategia para activacin/desactivacin de los objetos persistentes
Ubicacin de Objetos
La direccin de internet y el nmero de puertoproporcionan una direccin nica y puede
ser utilizada como referencia al objeto remoto
un servicio de localizacin ayuda al cliente a ubicar el objeto remoto con esa referencia
a objetos remotos. Si el objeto se ha movido, se enva un mensaje de difusin.
Colector de basura distribuida
recupera la memoria cuando no exista una referencia a un objeto local o remoto

RMI - Invocacion de Metodos Remotos (3)


Colector de basura distribuida:
Algoritmo distribuido de compactacin automtica de memoria.
- Cada proceso servidor mantiene un conjunto de nombres de los procesos que mantienen
referencias a objetos remotos por cada uno de sus objetos remotos. Este conjunto se puede
mantener en una columna adicional de la tabla de objetos remotos.
- Cuando un cliente C recibe primero una referencia remota a un objeto remoto en particular,
B, hace una invocacin AddRef (B) al servidor de ese objeto remoto y luego crea un proxy; el
servidor agrega un apuntador C a B.
- Cuando recolector de basura de un cliente C nota que un proxy de un objeto remoto B no
est accesible, hace una invocacin removeRef (B) al servidor correspondiente y luego borra
el proxy; el servidor elimina apuntador C de B.
- Cuando apuntador B est vaco, el recolector de basura local del servidor recuperar el
el espacio ocupado por B a menos que existan apuntadores locales.

RMI - Invocacion de Metodos Remotos (4)


Concesiones en Jini
Jini es una arquitectura para construir sistemas distribuidos, llamado tambin
Apache River https://river.apache.org/
Usa un sistema de concesiones para evitar protocolos complicados quese derivan
del mantenimiento de enlaces a objetos remotos
Los recursos se ofrecen por un periodo de tiempo llamado concesin
Al trmino de la concesin, Si el recurso se necesita el usuario hace una renovacin
de la concesin

Asignacin:
Caso de Estudio Java RMIA continuacin tienen los algoritmos que se usan para
la implementacin de Java-RMI. Explicar como
opera Java-RMI
Explique que es la Reflexin
Conteste los ejercicios:
5.1, 5.2, 5.3, 5.5, 5.6, 5.7, 5.8, 5.9. 5.10, 5.11, 5.12,
5.22, 5.23, 5.24

Java RMI - Interfaces Shapey ShapeList

import java.rmi.*;
import java.util.Vector;
public interface Shape extends Remote {
int getVersion() throws RemoteException;
GraphicalObject getAllState() throws RemoteException;
1
}
public interface ShapeList extends Remote {
Shape newShape(GraphicalObject g) throws RemoteException; 2
Vector allShapes() throws RemoteException;
int getVersion() throws RemoteException;
}

Instructors Guide for Coulouris, Dollimore, Kindberg and Blair, Distributed Systems: Concepts and Design Edn. 5
Pearson Education 2012

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.18, 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 5.20 line 1. A remote object reference is returned.
String [] list()
This method returns an array of Strings containing the names bound in the registry.

Instructors Guide for Coulouris, Dollimore, Kindberg and Blair, Distributed Systems: Concepts and Design Edn. 5
Pearson Education 2012

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());}
}
}

Instructors Guide for Coulouris, Dollimore, Kindberg and Blair, Distributed Systems: Concepts and Design Edn. 5
Pearson Education 2012

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
private int version;
public ShapeListServant()throws RemoteException{...}
public Shape newShape(GraphicalObject g) throws RemoteException {
1
version++;
Shape s = new ShapeServant( g, version);
2
theList.addElement(s);
return s;
}
public Vector allShapes()throws RemoteException{...}
public int getVersion() throws RemoteException { ... }
}
Instructors Guide for Coulouris, Dollimore, Kindberg and Blair, Distributed Systems: Concepts and Design Edn. 5
Pearson Education 2012

Java client of ShapeList


import java.rmi.*;
import java.rmi.server.*;
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")
1
Vector sList = aShapeList.allShapes();
} catch(RemoteException e) {System.out.println(e.getMessage());
}catch(Exception e) {System.out.println("Client: " + e.getMessage());}
}
}
Instructors Guide for Coulouris, Dollimore, Kindberg and Blair, Distributed Systems: Concepts and Design Edn. 5
Pearson Education 2012

;
2

Classes supporting Java RMI

RemoteObject
RemoteServer
Activatable

UnicastRemoteObject
<servant class>

Instructors Guide for Coulouris, Dollimore, Kindberg and Blair, Distributed Systems: Concepts and Design Edn. 5
Pearson Education 2012

Vous aimerez peut-être aussi