Tema6 llamadas a procedimientos...

132
Tema 6 Llamadas a procedimientos remotos F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García Sistemas Distribuidos Grado en Ingeniería Informática Universidad Carlos III de Madrid

Transcript of Tema6 llamadas a procedimientos...

Page 1: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

Tema 6

Llamadas a procedimientos remotos

F. García-Carballeira, Mª. Soledad Escolar,

Luis Miguel Sánchez, Fco. Javier García

Sistemas Distribuidos

Grado en Ingeniería Informática

Universidad Carlos III de Madrid

Page 2: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

Contenidos

� Remote Procedure Call (RPC)

� Conceptos básicos

� Aspectos relacionados con las RPCs

� RPC de Sun Microsystems

� Biblioteca de funciones de RPC

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

� Biblioteca de funciones de RPC

� Compilar un programa

� Ejemplo de RPC

� Invocación de métodos remotos

2

Page 3: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

RPC

� RPC (Remote Procedure Call): llamadas a procedimientos remotos

� Por Birrel y Nelson (1985) en “Implementing Procedure Calls”

� Híbrido:� Llamadas a procedimientos en local

� Paso de mensajes

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

� Paso de mensajes

� Las RPC constituyen el núcleo de muchos SSDD

� Llegaron a su culminación con DCE (Distributed Computing Environment)

� Han evolucionado hacia orientación a objetos� Invocación de métodos remotos (CORBA, RMI)

3

Page 4: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

RPC

� Las RPCs ofrecen una interfaz sencilla para construir aplicaciones distribuidas sobre TCP/IP

RMI and RPC

Aplicaciones/servicios

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

Sockets

Aplanamiento (marshalling), representación externa

de datos

Protocolo de transporte

UDP y TCP

4

Page 5: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

RPCs en la pila de protocolos

� RPC:� En el nivel de sesión en OSI

� En el nivel de aplicación en TCP/IP

� Independientes del

RPC

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

� Independientes del protocolo de transporte� TCP

� UDP

� Fiabilidad no garantizada� Depende del protocolo de

transporte

5

Page 6: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

RPC de Sun Microsystems

� La versión 2 de RPC, descrita en la RFC 1057, fue estandarizada por Sun Microsystems

� Se ocupa:� Especificación e interpretación de mensajes

� NO se ocupa:� Cómo se realiza el intercambio de mensajes entre los procesos

� Restricciones de la capa de transporte utilizado

Binding entre un cliente a un servicio

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

� Binding entre un cliente a un servicio

� La sintaxis y el formato de los mensajes se define mediante IDL (Interface Definition Language):� Lenguaje de especificación de RPC

� Lenguaje de especificación de datos XDR

6

Page 7: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

Comunicación cliente-servidor

� Protocolo petición-respuesta

Mensaje de peticiónSolicitar operación Recibir petición

Seleccionar servicio

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

ServidorCliente

(esperar)

(continúa)

Mensaje de respuestaEjecutar servicio

Seleccionar servicio

Enviar respuesta

7

Page 8: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

Estructura de los mensajes

petición-respuesta

Id. De petición

Id. De operación

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

8

argumentos

Resultado

Page 9: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

Funcionamiento de las RPC

� El proceso que realiza la llamada empaqueta los argumentos en un mensaje, se los envía a otro proceso y espera el resultado

� El proceso que ejecuta el procedimiento extrae los argumentos del mensaje, realiza la llamada de forma local, obtiene el resultado y se lo envía de vuelta al proceso que realizó la llamada

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

9

� Objetivo: acercar la semántica de las llamadas a procedimiento convencional a un entorno distribuido (transparencia)

main(){...r = sumar (4, 5);...

}

sumar(int a, int b)int r;r = a + b;return r;

}

…send(a, b);receive(r);…

receive(4,5)…send (r)

Page 10: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

Llamada local

main(){...r = sumar (4, 5);...

}

sumar(int a, int b)int r;r = a + b;

Pila del proceso

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

10

r = a + b;return r;

}

Registro de activación

r

b

a

Dir retorno

Page 11: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

Llamada a procedimiento remoto

main(){...r = sumar (4, 5);...

}a

Dir retorno

bc

Cliente

servidor

Stub sumar(int a, int b)send(a, b);receive(r);

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

11

main(){receive (4, 5)...r = sumar (4, 5);send (r)

}

sumar(int a, int b)int r;r = a + b;return r;

}

servidorreceive(r);return(r);

}peticion

respuesta

Stub

Page 12: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

Conceptos básicos

� Una RPC tiene dos participantes:

� Un cliente activo, que envía una RPC al servidor

� Un servidor pasivo, que calcula un resultado y lo devuelve al cliente

� Un servicio de red es una colección de uno o más programas remotos

� Un programa remoto implementa uno o más procedimientos remotos

� Un servidor puede soportar más de una versión de un programa remoto

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

� Un servidor puede soportar más de una versión de un programa remoto� Permite al servidor ser compatible con las actualizaciones de protocolos

� Un procedimiento remoto, sus parámetros y sus resultados se especifican en un fichero de especificación del protocolo escrito en el lenguaje de especificación de RPC y XDR

12

Page 13: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

Suplentes (stubs)

� Se generan automáticamente por el software de RPC� Stub del cliente

� Stub del sevidor

� Un stub es una pieza de código usada en el cliente y el servidor

� Responsable de convertir los parámetros de la aplicación cliente/servidor durante una llamada a procedimiento remoto

Cliente

ServidorStub

Stub

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

13

durante una llamada a procedimiento remoto� Espacio de direcciones independiente del cliente y servidor

� Representaciones de datos diferentes (big-endian, little-endian)

� Los suplentes son independientes de la implementación que se haga del cliente y del servidor. � Sólo dependen de la interfaz

Page 14: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

Suplentes (stubs)

� Funciones en el cliente:� Suplantar al procedimiento a ejecutar

� Localizar al servidor

� Empaquetar los parámetros y construir los mensajes

� Enviar el mensaje al servidor

Esperar la recepción del mensaje y devolver los resultados

Cliente

ServidorStub

Stub

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

� Esperar la recepción del mensaje y devolver los resultados

� Funciones en el servidor:� Realizan tareas similares

14

Page 15: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

RPC: protocolo básico

cliente servidorSe registra en un servicio de nombres

Recibir la petición

localizar al servidor

prepararparámetros, enviar petición

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

Desempaquetar la respuesta

Recibir la petición

Ejecutar elprocedimiento

Preparar la respuestay enviar

enviar petición

15

Page 16: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

RPC: protocolo básico

Máquina servidoraMáquina cliente

Protocolo

Proceso cliente (llamador)

Proceso servidor (llamado)

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

Protocolo petición-respuesta

Stub Stub

16

Page 17: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

Proceso cliente (llamador)� Conectar al servidor

� Invocar una llamada a procedimiento remoto

Stub o resguardo del cliente:

Máquina cliente

Proceso cliente (llamador)

RPC: protocolo básico

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

� Localizar al servidor

� Empaquetar los parámetros y construir los mensajes

� Enviar los mensajes al servidor

� Bloquearse hasta esperar la respuesta

� Obtener la respuesta

Stub

17

Page 18: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

RPC: protocolo básico

Máquina servidora

Proceso servidor (llamado)

� Registrar las RPCs

� Implementar los procedimientos

Stub o resguardo del servidor:� Recibir la petición del cliente

Proceso servidor (llamado)

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

Stub

� Recibir la petición del cliente

� Desempaquetar los parámetros

� Invocar el procedimiento de manera local

� Obtener la respuesta y enviarla al cliente

18

Page 19: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

Modelos de RPCs

� RPCs síncronas

� RPCs asíncronas

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

19

Page 20: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

RPC asíncronas

� El cliente no espera la respuesta

� No admite parámetros de salida

� Ejemplo en CORBA:� Se corresponden con métodos especificados como oneway

cliente servidor

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

20

cliente servidorlocalizar al servidorprepararparámetros, enviar petición

Se registra en un servicio de nombres

Recibir la petición

Ejecutar elprocedimiento

Page 21: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

Aspectos relacionados con las RPC

� Lenguaje de definición de interfaces (IDL)

� Generador de stubs

� Tipos de parámetros

� Transferencia de parámetros

� Protocolo de comunicación

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

� Protocolo de comunicación

� Enlace entre el cliente y el servidor (binding)

� Semántica de las RPC en presencia de fallos

� Autenticación

21

Page 22: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

� Un Lenguaje de Definición de Interfaz (IDL) permite especificar el formato de los procedimientos remotos y otras opciones de comunicación

� La interfaz es compartida por

� Cliente

� Servidor

Cliente

ServidorStub

Lenguaje de Definición de Interfaces

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

22

<opciones de comunicación:versión interfaz, tcp/udp, …

><interfaz remota:suma (in int a, in int b, out int c) ;

>generador

STUB

Stub

Page 23: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

� Una interfaz especifica:� Nombre de servicio que utilizan los clientes y servidores

� Nombres de procedimientos

� Parámetros de los procedimientos� Entrada

� Salida

� Tipos de datos de los argumentos

Lenguaje de Definición de Interfaces

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

23

� Tipos de datos de los argumentos

� Los compiladores pueden diseñarse para que los clientes y servidores se escriban en lenguajes diferentes

� Tipos de IDL� Integrado con un lenguaje de programación (Cedar, Argus)

� Lenguaje de definición de interfaces específico para describir las interfaces entre los clientes y los servidores (RPC de Sun y RPC de DCE)

Page 24: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

Tipos de parámetros

� Parámetro de entrada (in)� El parámetro se envía del cliente al servidor

� Parámetro de salida (out)� El parámetro se envía del servidor al cliente

� Parámetro de entrada/salida (inout)

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

24

Parámetro de entrada/salida (inout)

Page 25: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

Transferencia de parámetros

� Una de las funciones de los suplentes es empaquetar los parámetros en un mensaje: aplanamiento (marshalling)

� Problemas en la representación de los datos:� Servidor y cliente pueden ejecutar en máquinas con arquitecturas

distintas (ordenamiento de bytes)� Problemas con los punteros

� Una dirección sólo tiene sentido en un espacio de direcciones

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

25

� Una dirección sólo tiene sentido en un espacio de direcciones

� Ejemplos de esquemas de representación de datos:� XDR (eXternal Data Representation) es un estándar que define la

representación de tipos de datos (RFC 1832)� Representación común de datos de CORBA (CDR)� Serialización de objetos de Java� XML (eXtensible Markup Language ) es un metalenguaje basado en

etiquetas definida por W3C

Page 26: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

Ejemplo de representación de datos

� Mensaje: ‘Smith’, ‘London’, 1934

0–3

4–7

8–11

12–15

5

"Smit""h___"

6

index in sequenceof bytes 4 bytes

notes

length of string

‘Smith’

length of string

XDR CDR

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

26

16–19

20-23

24–27

"Lond"

"on__"

1934

‘London’

unsigned long

<person>

<name>Smith</name>

<place>London</place>

<year>1934</year>

</person>

XML

Page 27: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

Protocolo

� Entre cliente y servidor debe establecerse un protocolo:� Formato de los mensajes

� Formato de representación

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

27

Page 28: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

Enlace (Binding)

� Enlace: asociación entre el cliente y el servidor� Implica localizar al servidor que ofrece un determinado

servicio� El servidor debe registrar su dirección en un servicio de

nombres (binder)

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

28

Page 29: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

Enlazador dinámico

� Enlazador dinámico (binder): es el servicio que mantiene una tabla de traducciones entre nombres de servicio y direcciones.

� Incluye funciones para:� Registrar un nombre de servicio

� Eliminar un nombre de servicio

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

29

Eliminar un nombre de servicio� Buscar la dirección correspondiente a un nombre de servicio

� Cómo localizar al enlazador dinámico:1. Ejecuta en una dirección fija de un computador fijo2. El sistema operativo se encarga de indicar su dirección

3. Difundiendo un mensaje (broadcast) cuando los procesos comienzan su ejecución.

Page 30: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

1

5

Esquema de registro y enlace

cliente servidor

1

34

6

7 2

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

1 Obtiene dirección

30

binder

3

2 Registra dirección

3 Busca servidor

4 Devuelve dirección

5 Petición

6 Respuesta

7 Borra dirección (fin del servicio)

Page 31: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

Tipos de enlace

� Enlace no persistente: el binding entre el cliente y el servidor se establece en cada RPC� Más tolerante a fallos� Permite migración de servicios

� Enlace persistente: el binding se mantiene después de la

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

� Enlace persistente: el binding se mantiene después de la primera RPC� Útil en aplicaciones con muchas RPC repetidas� Problemas si lo servidores cambian de lugar

� Modelos híbridos

31

Page 32: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

Fallos que pueden aparecer con las RPC

� El cliente no es capaz de localizar al servidor

� Pérdidas de mensajes� Se pierde el mensaje de petición del cliente al servidor

� Se pierde el mensaje de respuesta del servidor al cliente

� El servidor falla después de recibir una petición

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

32

El servidor falla después de recibir una petición

� El cliente falla después de enviar una petición

Page 33: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

Cliente no puede localizar al servidor

� Posibles causas:� El servidor puede estar caído

� El cliente puede estar usando una versión antigua del servidor� La versión ayuda a detectar accesos a copias obsoletas

Cómo indicar el error al cliente

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

� Cómo indicar el error al cliente� Devolviendo un código de error (-1)

� No es transparente � Ejemplo: sumar(a,b)

� Elevando una excepción� Necesita un lenguaje que tenga excepciones

33

Page 34: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

Pérdida de mensajes del cliente

� Es la más fácil de tratar

� Se activa una alarma (timeout) después de enviar el mensaje

� Si pasado el timeout no se recibe una respuesta se retransmite el mensaje

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

34

Page 35: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

Pérdidas en los mensajes de respuesta� Más difícil de tratar� Se pueden emplear alarmas y retransmisiones, pero:

� ¿Se perdió la petición?� ¿Se perdió la respuesta?� ¿El servidor va lento?

� Algunas operaciones pueden repetirse y devolverán el mismo resultado (operaciones idempotentes)

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

(operaciones idempotentes)� Una transferencia bancaria no es idempotente� La suma de dos números es idempotente

� La solución con operaciones no idempotentes es descartar peticiones ya ejecutadas � Un número de secuencia en el cliente� Un campo en el mensaje que indique si es una petición original o una

retransmisión

35

Page 36: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

Fallos en los servidores

� El servidor no ha llegado a ejecutar la operación� Se podría retransmitir

� El servidor ha llegado a ejecutar la operación� El cliente no puede distinguir los dos� ¿Qué hacer?

� No garantizar nada

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

36

� No garantizar nada� Semántica al menos una vez

� Reintentar y garantizar que la RPC se realiza al menos una vez� No vale para operaciones no idempotentes

� Semántica a lo más una vez

� No reintentar, puede que no se realice ni una sola vez

� Semántica de exactamente una

� Sería lo deseable

Page 37: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

Fallos en los clientes

� La computación está activa pero ningún cliente espera los resultados (computación huérfana)� Gasto de ciclos de CPU

� Si el cliente rearranca y ejecuta de nuevo la RPC se pueden crear confusiones

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

37

Page 38: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

Estrategias ante fallos

� Cliente RPC:� Cuando no se recibe la respuesta

� Reenviar la petición

� Incluir identificador de petición (número de secuencia)

� Servidor RPC:

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

38

� Servidor RPC:� Para hacer frente a peticiones duplicadas

� Filtrar las peticiones (números de secuencia, etc.)

� Si se necesita reenviar una respuesta de una petición no idempotente:� Guardar un histórico de las peticiones anteriormente ejecutadas y su

respuesta para no ejecutar de nuevo la petición.

Page 39: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

Aspectos de implementación

� Protocolos RPC

� Orientados a conexión� Fiabilidad se resuelve a bajo nivel

� Peor rendimiento

� No orientados a conexión

� Uso de un protocolo estándar o uno específico

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

39

� Uso de un protocolo estándar o uno específico� Algunos utilizan TCP o UDP como protocolos básicos

Page 40: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

Programación con un paquete de RPC

� El programador debe proporcionar:� La definición de la interfaz (IDL)

� Nombres de los procedimientos

� Parámetros que el cliente pasa al servidor

� Resultados que devuelve el servidor al cliente

� El código del cliente

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

� El código del cliente

� El código del servidor

� El compilador de IDL genera :� El resguardo (stub) del cliente

� El resguardo (stub) del servidor

40

Page 41: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

Desarrollo de la aplicación con RPC

DESARROLLODE LA

INTERFAZ

COMPILADOR IDL

SUPLENTEEN SERVIDOR

SUPLENTEEN CLIENTE

CABECERA

FICHERODE DEFINICIÓNDE INTERFAZ

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

41

COMPILADOR C COMPILADOR C

COMPILADOR CCOMPILADOR C

CABECERA CABECERAFICHEROSFUENTE DEL

CLIENTE

FICHEROSOBJETO DEL

CLIENTE

FICHEROSOBJETO DEL

SERVIDOR

EJECUTABLEDEL

CLIENTE

EJECUTABLEDEL

SERVIDOR

FICHEROSFUENTE DELSERVIDOR

OBJETOSUPLENTEEN CLIENTE

OBJETOSUPLENTE

EN SERVIDOR

MONTADOR MONTADOR

BIBLIOT.RPC

BIBLIOT.RPC

DESARROLLODEL

CLIENTE

DESARROLLO

SERVIDOR

@Fuente: Jesús Carretero, Félix García, Pedro de Miguel y Fernando Pérez. Mc Graw Hill

Page 42: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

RPC de SUN Microsystems

� Diseñado para el sistema de ficheros NFS

� Descrito en RFC 1831

� También se denomina ONC-RPC (Open network computing)

� Se puede elegir UDP oTCP� Cliente y servidor deben estar de acuerdo en el protocolo de transporte a

utilizar

Utiliza la semántica al menos una vez

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

42

� Utiliza la semántica al menos una vez

� Utiliza un lenguaje de definición de interfaces denominado XDR

� Soporte:� Para C a través del compilador rpcgen en UNIX/Linux

� Para Java � http://acplt.plt.rwth-aachen.de/ks/english/remotetea.html

� Para plataformas Windows

Page 43: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

RPC de SUN y el modelo OSI

aplicación

XDR

RPC

7. Aplicación

6. Presentación

5. Sesión

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

43

TCP UDP

IP

Interfaz HW

RED

4. Transporte

3. Red

1-2 Enlace de datosY físico

Page 44: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

Lenguaje XDR� XDR (eXternal Data Representation) es un estándar que define la representación de

tipos de datos (RFC 1832)� Utilizado inicialmente para representaciones externas de datos� Se extendió a lenguajes de definición de interfaces� Una interfaz contiene:

� Un número de programa � Un número de versión del programa� Un conjunto de procedimientos remotos:

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

44

Un conjunto de procedimientos remotos:� Un nombre y un número de procedimiento� Los procedimientos sólo aceptan un parámetro de entrada (se encapsulan en una

estructura)� Los parámetros de salida se devuelven mediante un único resultado

� El lenguaje ofrece una notación para definir:� constantes� definición de tipos� estructuras, uniones� programas

Page 45: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

Formato de definición de interfaz program-def :

" program " identifier " { "

version-def

version-def *

" } " " =" constant " ; “ /* Number of program */

version-def :

" version " identifier " { "

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

procedure-def

procedure-def *

" } " " =" constant " ; " /* Number of version */

procedure-def :

type-specifier identifier " ( " type-specifier

(" , " type-specifier )* " ) "

" =" constant ";“ /* Number of procedure */

45

Page 46: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

Ejemplo:

especificación del programa ping/* Simple ping program */

program PING_PROG{

/* Latest and greatest version */

version PING_VERS_PINGBACK{

void

PINGPROC_NULL(void) = 0;

/*

* Ping the caller, return the round-trip time (in microseco nds).

Returns -1 if the operation timed out.

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

*/

int

PINGPROC_PINGBACK(void) = 1;

} = 2;

/* Original version */

version PING_VERS_ORIG {

void

PINGPROC_NULL(void) = 0;

} = 1;

} = 1;

const PING_VERS = 2; /* latest version */

46

Page 47: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

Identificación de llamadas a RPC

� Un mensaje de llamada de RPC se identifica unívocamente mediante tres campos enteros sin signo:

(NUM-PROG, NUM-VERSION, NUM-PROCEDURE)

NUM-PROG es el número de programa remoto,

NUM-VERSION es el número de versión de programa,

NUM-PROCEDURE es el número de procedimiento remoto

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

� Detalles de implementación:� NUM-PROG se definen en la RFC 1831

� http://www.ietf.org/rfc/rfc1831.txt

� La primera implementación (versión) de un protocolo deber ser la 1

� Los números de procedimientos se especifican por el programador

47

Page 48: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

El proceso portmapper� El enlace en las RPC de sun se realiza mediante un proceso denominado

portmapper

� En cada servidor ejecuta un proceso portmapper en un puerto bien conocido (111)

� El portmapper almacena por cada servicio local:� El número de programa

� El número de versión

� El número de puerto

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

48

� El número de puerto

� Enlace dinámico:� El número de puertos disponibles es limitado y el número de programas remotos

potenciales puede ser muy grande

� Sólo el portmapper ejecutará en un puerto determinado (111) y los números de puertos donde escuchan los servidores se averiguan preguntando al portmapper

� Soporta TCP y UDP (ver /etc/services)� sunrpc 111/tcp portmapper #RPC 4.0

portmapper

� sunrpc 111/udp portmapper

Page 49: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

El proceso portmapper

� Protocolo: � Cuando un servidor arranca registra en el portmapper la información

anterior� Cuando un cliente necesita invocar un procedimiento remoto envía al portmapper del host remoto (necesita conocer la dirección IP del servidor)� El número de programa y el número de versión

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

49

� El portmapper devuelve el puerto del servidor

Page 50: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

rpcinfo –p guernika.lab.inf.uc3m.es

./servidor &

El proceso portmapper

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

50

rpcinfo –p guernika.lab.inf.uc3m.esprograma vers proto puerto

100000 2 tcp 111 portmapper100000 2 udp 111 portmapper…

100024 1 udp 32772 status100024 1 tcp 59338 status

99 1 udp 4693699 1 tcp 40427

Page 51: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

Biblioteca de funciones de RPC

� La biblioteca de funciones de RPC � Sistemas Unix

� Servicios de RPC para construir aplicaciones � En el cliente

� Crear un manejador de cliente

Destruir un manejador de cliente

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

� Destruir un manejador de cliente

� En el servidor

51

Page 52: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

La biblioteca de funciones

� rpc.h es una biblioteca de funciones para desarrollar aplicaciones distribuidas que usan RPC:#include <rpc/rpc.h>

� Múltiples niveles de acceso:� Interfaz simplificado

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

� Interfaz simplificado

� Rutinas de nivel intermedio

� Rutinas de alto nivel

52

Page 53: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

Servicios de RPC

� Crear un manejador para el cliente

CLIENT *clnt_create (const char * host, const u_long prognum,

const u_long versnum, const char *nettype)

Argumentos:

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

53

� host nombre del host remoto donde se localiza el programa remoto

� prognum Número de programa del programa remoto� versnum Número de versión del programa remoto� nettype Protocolo de transporte:

NETPATH, VISIBLE, CIRCUIT_V, DATAGRAM_V, CIRCUIT_N, DATAGRAM_N, TCP, UDP

Page 54: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

Servicios de RPC

� Destruir el manejador del cliente

void clnt_destroy (CLIENT *clnt)

Argumentos:� clnt Manejador de RPC del cliente

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

54

Page 55: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

Servicios de RPC

� Indicar el error en un fallo de RPC:

void clnt_perror (CLIENT *clnt, char *s)void clnt_pcreateerror (CLIENT *clnt, char *s)

Argumentos:

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

55

� clnt Manejador de RPC del cliente� S Mensaje de error

Page 56: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

Ejemplo: crear/destruir un manejador#include <stdio.h>

#include <rpc/rpc.h>

#define RMTPROGNUM(u_long)0x3fffffffL /* Define remote program number and version */

#define RMTPROGVER(u_long)0x1

main()

{

CLIENT *client ; /* client handle */

/* Crear el manejador del cliente */

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

/* Crear el manejador del cliente */

client = clnt_create (“as400.somewhere.ibm.com”, RMTPROGNUM, RMTPROGVER, “TCP”);

if (client == NULL){

clnt_pcreateerror (client, “Could not create client\n”);

exit(1);

}

// Invocar procedimiento remoto

/* Destruir el manejador del cliente */

clnt_destroy (client);

exit(0);

}

56

Page 57: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

Invocar un procedimiento (cliente)

� Un procedimiento remoto se invoca:tipo_resultado procedimiento _v (tipo_arg1 arg1,

tipo_arg2 arg2,

tipo_argn argn,

CLIENT *clnt)

donde:

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

donde:� procedimiento_v Nombre del procedimiento a invocar� arg1,arg2,…,argn Argumentos del procedimiento� clnt Manejador de un cliente de RPC

NOTA: v se sustituye por el número de versión que se invoca

57

Page 58: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

Implementar un procedimiento

(servidor)

� Para cada procedimiento remoto, el servidor ofrece una implementación de procedimiento respetando su prototipo:tipo_resultado

procedimiento_v _svc (tipo_arg1 arg1,

tipo_arg2 arg2,

tipo_argn argn ,

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

tipo_argn argn ,

struct svc_req *rqstp)

donde:� procedimiento_v_svc Nombre del procedimiento a implementar� arg1,arg2,…,argn Argumentos del procedimiento� rqstp Estructura que contiene información de la

peticiónNOTA: v se sustituye por el número de versión que se implementa

58

Page 59: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

Compilador de interfaces (rpcgen)

� rpcgen es el compilador de interfaces que genera código C para:� Stub del cliente

� Stub del servidor y procedimiento principal del servidor

� Procedimientos para el empaquetado y desempaquetado XDR

Fichero de cabecera (.h) con los tipos y declaración de

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

59

� Fichero de cabecera (.h) con los tipos y declaración de prototipos de procedimientos

Page 60: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

Sintaxis de rpcgen

� Compilar usando rpcgenrpcgen infile

rpcgen [-abkCLNTM][-Dname[=value]] [-i size] [-I [-K seconds]] [-Y path] infile

rpcgen [-c | -h | -l | -m | -t | -Sc | -Ss | -Sm] [-o outfile] [infile]rpcgen [-s nettype]* [-o outfile] [infile]rpcgen [-n netid]* [-o outfile] [infile]

infile fichero en lenguaje de definición de interfaz de RPC

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

60

� infile fichero en lenguaje de definición de interfaz de RPC (XDR en RPC de SUN)

� Algunas opciones:� -N Permite a los procedimientos tener múltiples argumentos� -a Genera todos los ficheros incluyendo código de ejemplo para

cliente y servidor� -M Genera stubs multi-thread para paso de argumentos

Page 61: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

Ejemplo: aplicación con RPC

clientesumar(5,2)

5+2

servidor

Máquina A Máquina B

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

NÚCLEO Resultado = 7 NÚCLEO

RED

61

@Fuente: Jesús Carretero, Félix García, Pedro de Miguel y Fernando Pérez. Mc Graw Hill

Page 62: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

Esquema de la aplicación

rpcgensuma_xdr.c

suma_clnt.c

cliente.cArchivos para

el cliente

Archivos

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

62

suma.xrpcgen

suma_svc.c

servidor.c

suma.h

Archivoscomunes

Archivos parael servidor

Ficheros generados por el programador

Ficheros generados mediante rpcgen suma.x

Page 63: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

struct argumentos {

int a;

int b;

};

program SUMAR{

version SUMAVER{

Ejemplo: suma.x

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

version SUMAVER{

int SUMA(argumentos) = 1;

int RESTA(argumentos) = 2;

} = 1;

} = 99;

63

Page 64: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

Ejemplo: suma.h#ifndef _SUMA_H_RPCGEN

#define _SUMA_H_RPCGEN

#include <rpc/rpc.h>

struct argumentos {

int a;

int b;

};

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

64

#define SUMAVER ((u_long)99)

#define SUMA ((u_long)1)

#define RESTA ((u_long)2)

extern int * suma_1(argumentos *, CLIENT *);

extern int * suma_1_svc (argumentos *, struct svc_req *);

...

#endif /* !_SUMA_H_RPCGEN */

Page 65: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

Ejemplo: servidor.c#include "suma.h"

int * suma_1_svc (argumentos *argp, struct svc_req *rqstp)

{

// TODO: implementación del procedimiento suma_1_sv c

static int result;

result = argp->a + argp->b;

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

65

return(&result);

}

int * resta_1_svc (argumentos *argp, struct svc_req *rqstp)

{

// TODO: implementación del procedimiento resta_1_s vc

static int result;

result = argp->a - argp->b;

return(&result);

}

Page 66: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

Ejemplo: cliente.c#include "suma.h"

#include <rpc/rpc.h>

main( int argc, char* argv[] )

{

CLIENT *clnt ;

int *res;

argumentos suma_1_arg;

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

66

argumentos suma_1_arg;

char *host;

if(argc < 2) {

printf("usage: %s server_host\n", argv[0]);

exit(1);

}

host = argv[1];

Page 67: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

Ejemplo: cliente.c (II)/* Paso 1: localizar al servidor */clnt = clnt_create (host, SUMAR, SUMAVER, "udp");if (clnt == NULL) {

clnt_pcreateerror (host);exit(1);

}

suma_1_arg.a = 5;suma_1_arg.b = 2;

Binding:Se contacta con el portmapper de hostSe indica el host:API:versión:protocoloEl portmapper indica la localización (puerto)

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

67

/* Paso 2: Invocar el procedimiento remoto */res = suma_1(&suma_1_arg, clnt);if (res == NULL) {

clnt_perror (clnt, "call failed:");}printf("La suma es %d\n", *res);

/* Destruir el manejador */clnt_destroy ( clnt );

}

Page 68: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

suma_xdr.c#include "suma.h"

bool_t

xdr_argumentos (XDR *xdrs, argumentos *objp)

{

register int32_t *buf;

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

68

if (! xdr_int (xdrs, &objp->a))

return FALSE;

if (! xdr_int (xdrs, &objp->b))

return FALSE;

return TRUE;

}

Page 69: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

suma_clnt.c (stub del cliente)#include <memory.h> /* for memset */

#include "suma.h"

/* Default timeout can be changed using clnt_contro l() */

static struct timeval TIMEOUT = { 25, 0 };

int * suma_1(argumentos *argp, CLIENT *clnt)

{

static int clnt_res;

Stub

Cliente

Servidor

Stub

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

69

memset((char *)&clnt_res, 0, sizeof(clnt_res));

if ( clnt_call (clnt, suma,

(xdrproc_t) xdr_argumentos, (caddr_t) argp,

(xdrproc_t) xdr_int, (caddr_t) &clnt_res,TIMEOUT) ! = RPC_SUCCESS)

{

return (NULL);

}

return (&clnt_res);

}

int * resta_1 (argumentos *argp, CLIENT *clnt)...

Page 70: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

suma_svc.c

(stub del servidor)int main (int argc, char **argv)

{

register SVCXPRT *transp;

pmap_unset (SUMAR, SUMAVER);

transp = svcudp_create (RPC_ANYSOCK);

svc_register (transp, SUMAR, SUMAVER, sumar_1, IPPROTO_UDP;

transp = svctcp_create (RPC_ANYSOCK, 0, 0);

Cliente

ServidorStub

Stub

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

70

transp = svctcp_create (RPC_ANYSOCK, 0, 0);

svc_register (transp, SUMAR, SUMAVER, sumar_1, IPPROTO_TCP;

svc_run ();

fprintf (stderr, "%s", "svc_run returned");

exit (1);

/* NOTREACHED */

}

Page 71: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

suma_svc.c (II)

(stub del servidor)static void sumar_1(struct svc_req *rqstp, register SVCXPRT *transp)

{

union {

argumentos suma_1_arg;

argumentos resta_1_arg;

} argument;

char *result;

xdrproc_t _xdr_argument, _xdr_result;

char *(*local)(char *, struct svc_req *);

Cliente

ServidorStub

Stub

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

71

char *(*local)(char *, struct svc_req *);

switch (rqstp->rq_proc) {

case NULLPROC:

(void) svc_sendreply (transp, (xdrproc_t) xdr_void, (char *)NULL);

return;

case suma:

_xdr_argument = (xdrproc_t) xdr_argumentos;

_xdr_result = (xdrproc_t) xdr_int;

local = (char *(*)(char *, struct svc_req *)) suma_1_svc ;

break;

Page 72: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

suma_svc.c (III)

(stub del servidor)case resta:

_xdr_argument = (xdrproc_t) xdr_argumentos;

_xdr_result = (xdrproc_t) xdr_int;

local = (char *(*)(char *, struct svc_req *)) resta_1_svc ;

break;

default:

svcerr_noproc (transp); return;

}

memset ((char *)&argument, 0, sizeof (argument));

svc_getargs ( transp , _ xdr_argument , ( caddr_t ) &argument );

Cliente

ServidorStub

Stub

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

72

svc_getargs ( transp , _ xdr_argument , ( caddr_t ) &argument );

result = (*local)((char *)&argument, rqstp);

if (result != NULL &&

!svc_sendreply(transp, _xdr_result, result)){

svcerr_systemerr (transp);

}

if (!svc_freeargs (transp, _xdr_argument, (caddr_t) &argument)) {

fprintf (stderr, "%s", "unable to free arguments");

exit (1);

}

return;

}

Page 73: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

Compilación

� gcc –c suma_xdr.c

� gcc –c suma_svc.c

� gcc –c suma_clnt.c

� gcc –c cliente.c

� gcc –c servidor.c

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

73

� gcc –c servidor.c

� gcc suma_xdr.o suma_clnt.o cliente.o –o cliente

� gcc suma_xdr.o suma_svc.o servidor.o –o servidor

Page 74: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

Compilación

� rpcgen –a –N –M suma.x

� Opciones:� -a: genera todos los ficheros incluyendo ejemplos

� -N: permite varios argumentos

� -M: genera código multithread (código que puede ser utilizado en aplicaciones con varios threads)

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

en aplicaciones con varios threads)

74

Page 75: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

suma.x:

Ejemplo usando nuevas opciones

program SUMAR {

version SUMAVER {

int suma(int a, int b) = 1;

int resta(int a, int b) = 2;

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

75

int resta(int a, int b) = 2;

} = 1;

} = 99;

Nota:La opción de compilación –N permite que un procedimiento acepte más de un argumento de entrada

Page 76: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

Ficheros que se generan

� suma.h: incluye prototipos de funciones

� suma_client.c: ejemplo de cliente.

� suma_clnt.c: stub del cliente

� suma_server.c: plantilla con las funciones a implementar en el servidor

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

en el servidor

� suma_svc.c: stub del servidor

� suma_xdr.c: funciones XDR

76

Page 77: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

suma.h#include <rpc/rpc.h>

#include <pthread.h>

struct suma_1_argument {

int a;

int b;

};

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

77

};

typedef struct suma_1_argument suma_1_argument;

struct resta_1_argument {

int a;

int b;

};

typedef struct resta_1_argument resta_1_argument;

Page 78: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

suma.h (2)#define SUMAR 99

#define SUMAVER 1

extern enum clnt_stat suma_1(int , int , int *, CLIENT *);

extern bool_t suma_1_svc (int , int , int *, struct svc_req *);

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

78

svc_req *);

extern enum clnt_stat resta_1 (int , int , int *, CLIENT *);

extern bool_t resta_1_svc (int , int , int *, struct svc_req *);

Page 79: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

suma_client.c:

Ejemplo de cliente

#include "suma.h"

void sumar_1(char *host){

CLIENT *clnt ;enum clnt_stat retval_1;int result_1; int suma_1_a; int suma_1_b;enum clnt_stat retval_2;

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

79

enum clnt_stat retval_2;int result_2; int resta_1_a; int resta_1_b;

clnt = clnt_create (host, SUMAR, SUMAVER, “tcp");if (clnt == NULL) {

clnt_pcreateerror (host);exit (1);

}

Page 80: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

retval_1 = suma_1(suma_1_a, suma_1_b, &result_1, clnt);

if (retval_1 != RPC_SUCCESS) {

clnt_perror (clnt, "call failed");

}

retval_2 = resta_1 (resta_1_a, resta_1_b,&result_2, clnt);

if (retval_2 != RPC_SUCCESS) {

suma_client.c:

Ejemplo de cliente (2)

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

if (retval_2 != RPC_SUCCESS) {

clnt_perror (clnt, "call failed");

}

clnt_destroy (clnt);

}

80

Page 81: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

suma_server:

Plantilla de servidor#include "suma.h"

bool_t suma_1_svc (int a, int b, int *result,

struct svc_req *rqstp)

{

bool_t retval;

/*

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

81

/*

* insert server code here

*/

*result = a + b;

retval = TRUE;

return retval;

}

Page 82: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

suma_server:

Plantilla de servidor (2)bool_t resta_1_svc (int a, int b, int *result,

struct svc_req *rqstp)

{

bool_t retval;

/*

* insert server code here

*/

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

82

*/

*result = a + b;

retval = TRUE;

return retval;

}

Page 83: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

Autenticación

� Los mensajes de petición y respuesta disponen de campos para pasar información de autenticación

� El servidor es el encargado de controlar el acceso

� Hay distintos tipos de protocolos de autenticación:� Ninguno

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

83

� Al estilo UNIX, basado en uid y gid

� Autenticación Kerberos

� Mediante una clave compartida que se utiliza para firmar los mensajes RPC

Page 84: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

Sintaxis de definición de un protocolo

definition-list:definition;definition; definition-list

definition:

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

const-definitionenum-definitionstruct-definicionunion-definitiontypedef-definition

program-definition

84

Page 85: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

Definición de constantes simbólicas

� En XDRconst MAX_SIZE = 8192;

� Traducción a C:#define MAX_SIZE 8192

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

85

Page 86: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

Tipos enumerados

� En XDR:enum color{

ROJO = 0;VERDE = 1;AZUL = 2;

};

� Traducción a C:

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

86

� Traducción a C:enum color{

ROJO = 0;VERDE = 1;AZUL = 2

};typedef enum color color;bool_t xdr_color();

Page 87: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

Estructuras

� En XDR:struct punto{

int x;

int y;

};

� Traducción a C:

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

87

� Traducción a C:struct punto{

int x;

int y;

};

typdef struct punto punto;

bool_t xdr_punto();

Page 88: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

Uniones� En XDR:

union resultado switch (int error){

case 0:

int n;

default:

void;

};

� Traducción a C:

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

88

� Traducción a C:struct resultado {

int error;

union {

int n;

} resultado_u;

};

typdef struct resultado resultado;

bool_t xdr_resultado();

Page 89: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

Definición de tipos

� En XDR:typedef punto puntos[2];

� Traducción a C:� Pasan sin modificación

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

89

� Pasan sin modificacióntypedef punto puntos[2];

Page 90: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

Definición de programasprograma-def: "program" identifier "{"

version-defversion-def *

"}" "=" contant ";"

version - def :program SUMAR {

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

90

"version" identifier "{"procedude-defprocedure-def *

"}" "=" constant ";“

procedure-def:type-ident procedure-ident "("type-ident")" "="value

program SUMAR {

version SUMAVER {

int suma(int a, int b) = 1;

int resta(int a, int b) = 2;

} = 1;

} = 99;

Page 91: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

Tipos de datos básicos

� Los tipos de datos básicos de C

� Ejemplos:

Enteros con signo:

Declaración: int a;

Equivalente en C: int a;

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

91

Equivalente en C:

Enteros sin signo:

Declaración: unsigned a;

Equivalente en C: unsigned a;

Números en coma flotante:

Declaración: float a;

Equivalente en C: float c;

Page 92: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

Principales tipos de datos en XDRNúmeros en coma flotante:

Declaración: float a;Equivalente en C: float c;

Cadenas de bytes de longitud fija:Declaración: opaque a[20];Equivalente en C: char a[20];

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

92

Cadenas de bytes de longitud variable:Declaración: opaque a<37>;

opaque b<>;Equivalente en C: struct {

int a_len;char *a_val;

} a;

Page 93: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

Principales tipos de datos en XDR

Cadenas de caracteres:

Declaración: string a<37>;

string b<>;

Equivalente en C: char *a;

char *b;

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

93

char *b;

Vectores de tamaño fijo:

Declaración: int a[12];

Equivalente en C: int a[12];

Page 94: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

Principales tipos de datos en XDR

Vectores de tamaño variable:Declaración: int a<12>;

float b<>;

Equivalente en C: struct {int a_len ;

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

94

int a_len ;int *a_val;

} a;struct {

int b_len;float *b_val;

} b;

Page 95: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

Principales tipos de datos en XDREstructuras:

Declaración: struct t {int c1;string c2<20>;

};t a;

Equivalente en C: struct t {

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

95

Equivalente en C:int c1;string *c2;

};typedef struct t t;t a;

Constantes:

Declaración: const MAX = 12;Equivalente en C: #define MAX 12

Page 96: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

Mensajes de petición-respuesta

� Mensaje petición-respuesta

struct rpc_msg {

unsigned int xid;

union switch (msg_type mtype) {

Id. de transacción

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

96

union switch (msg_type mtype) {

case CALL:

call_body cbody;

case REPLY:

reply_body rbody;

} body;

};

enum msg_type {

CALL = 0,

REPLY = 1

};

Page 97: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

Formato de los mensajes

MsgType = CALL

XID

RPCVersion = 2

Programa

Versión

0 31

Datos

MsgType = REPLY

XID

Status = ACCEPTED

0 31

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

97

Datos

Versión

Procedimiento

Credenciales (variable)

Verfificador (variable)

Page 98: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

Evolución de las RPC

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

98

Page 99: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

Paradigmas de

procedimientos/métodos remotos

Espacio de objetos, aplicaciones colaborativas

Servicios de red, object request broker, agentes móviles

alto

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

99

procedimientos remotos, métodos remotos

Cliente-servidor, peer-to-peer

Paso de mensajes

bajo

Page 100: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

Llamadas a procedimientos remotos

� Objetivo: hacer que el software distribuido se programe igual que una aplicación no distribuida

� Mediante el modelo RPC la comunicación se realiza conceptualmente igual que la invocación de un procedimiento local

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

100

procedimiento local

proc1(arg1, arg2)

proc2(arg1)

proc3(arg1,arg2,arg3)

Proceso A proceso B

Page 101: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

Llamadas a procedimientos remotos

� Pasos:� A llama al procedimiento remoto de B

� La llamada dispara una acción de un procedimiento de B

� Al finalizar el procedimiento, B devuelve el valor a A

� Simplifica la comunicación entre procesos y la sincronización de eventos.

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

101

la sincronización de eventos.

� Ejemplos: � Open Network Computing Remote Procedure Call, desarrollada a partir del API

RPC de Sun Microsystems a comienzo de los años 80

� Distributed Computing Environment (DCE) RPC de Open Group

� Simple objeto Access Protocol (SOAP)

Page 102: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

Llamada a métodos remotos

� Primera aproximación al uso de un modelo orientado a objetos sobre aplicaciones distribuidas

� Objetos distribuidos dentro de una red� Los objetos proporcionan métodos, los cuales dan acceso a los servicios

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

102

los cuales dan acceso a los servicios

� Ejemplo:� Remote method invocation (RMI) de Java

Page 103: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

Remote method invocation (RMI)

� Modelo equivalente a las llamadas a procedimientos remotos

� Proceso invoca un método local de otro proceso� Se envían tanto los argumentos del método como el valor devuelto por el mismo

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

103

método1método2

Proceso 1Proceso 2

Objeto remoto

RMI

Page 104: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

Entornos donde se usa Java RMI

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

104

Page 105: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

Entornos donde se usa Java RMI

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

105

Page 106: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

Modelo de objetos en sistemas distribuidos

Máquina A Máquina B Máquina C

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

106

Page 107: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

� El soporte para RMI en Java está basado en las interfaces y clases definidas en los paquetes java.rmi y java.rmi.server.

� RMI ofrece:

� Mecanismos para crear servidores y objetos cuyos métodos se puedan invocar remotamente.

Java RMI (Remote Method Invocation)

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

invocar remotamente.

� Mecanismos que permiten a los clientes localizar los objetos remotos.

� Servicio de directorios:

� rmiregistry, servicio de directorios de Java

� Se ejecuta en la máquina servidor objeto

107

Page 108: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

Comparación RMI y sockets

� Ventajas:� Los programas RMI son más sencillos de diseñar

� Servidor RMI concurrente

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

108

� Servidor RMI concurrente

� Inconvenientes:� Sockets tienen menos sobrecarga� RMI sólo para plataformas Java

Page 109: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

Arquitectura de RMI

Cliente de

objetos

Servidorde objetos

Servicio de directorios

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

109

stub

Referencia remota

Transporte

skeleton

Referencia remota

Transporte

Ruta de datos lógica

Ruta de datos física

Page 110: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

Arquitectura de RMI

� Nivel de resguardo o stub� Se encarga del aplanamiento de los parámetros.

� Stub: resguardo local. Cuando un cliente realiza una invocación remota, en realidad hace una invocación de un método del resguardo local.

� Nivel de gestión de referencias remotas

stub

Referencia remota

Transporte

skeleton

Referencia remota

Transporte

Cliente deobjetos

Servidor

de objetos

Servicio de directorios

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

110

� Nivel de gestión de referencias remotas

� Interpreta y gestiona las referencias a objetos remotos.

� Invoca operaciones de la capa de transporte.

� Nivel de transporte� Se encarga de las comunicaciones y

de establecer las conexiones necesarias.

� Basada en protocolo TCP.

Page 111: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

Arquitectura de RMI

skeleton

marshalEnvío petición

unmarshalInvoca método

MétodoRemoto

tiempo

stub

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

111

Invoca métodoEjecución del códigoDevuelve valor

Recibe el valor retornomarshalEnvía la respuesta

unmarshallDevuelve el valor retorno

Page 112: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

Diseño de aplicaciones RMI

(.java)

1

2

3

4(.class)

Implementación de la interfaz remota

javac

Definición de la interfaz remota

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

112

javac

4

10

95

6

7

8

(.java)

usaCliente

EjectuarCliente

CLIENTE SERVIDOR

(.class)

Esqueleto(.class)

stub(.class)

Servidor(.class)

Arrancar RMIRegistry

Crear los objetos

Registrar los objetos

rmic

Page 113: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

Diseño de aplicaciones RMI

(.java)

1

2

3

4(.class)

javac

Definición de la interfaz remota

Implementación de la interfaz remota

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

113

javac

4

10

95

6

7

8

(.java)

usaCliente

EjectuarCliente

CLIENTE SERVIDOR

(.class)

Esqueleto(.class)

stub(.class)

Servidor(.class)

Arrancar RMIRegistry

Crear los objetos

Registrar los objetos

rmic

Page 114: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

Diseño de aplicaciones RMI

� Interfaz remota:� Clase que sirve de plantilla para otras clases.

import java.rmi.*;

public interface SomeInterface extends Remote {

// Cabecera del primer método remoto

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

114

public String someMethod1( )

throws java.rmi.RemoteException;

// Cabecera del segundo método remoto

public int someMethod2( float parameter) throws java.rmi.RemoteException;

}

Page 115: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

Diseño de aplicaciones RMI

� Implementación de la interfaz remota� Realizado por el servidor

import java.rmi.*;import java.rmi.server.*;

public class SomeImpl extends UnicastRemoteObject

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

115

public class SomeImpl extends UnicastRemoteObjectimplements SomeInterface

{ public SomeImpl() throws RemoteException { super( ); }

public String someMethod1( ) throws RemoteException{ /* Código fuente */ }

public int someMethod2(float a) throws RemoteExcepti on{ /* Código fuente */ }

}

Page 116: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

Diseño de aplicaciones RMI

UnicastRemoteObjectSomeInterface

Method1Method2...

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

116

SomeImpl

Method2Method1

...

Page 117: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

Diseño de aplicaciones RMI

(.java)

1

2

3

4(.class)

Implementación de la interfaz remota

javac

Definición de la interfaz remota

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

117

javac

4

10

95

6

7

8

(.java)

usa

EjectuarCliente

CLIENTE SERVIDOR

(.class)

Arrancar RMIRegistry

Crear los objetos

Registrar los objetos

rmic

ClienteEsqueleto

(.class)stub

(.class)

Servidor(.class)

Page 118: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

Diseño de aplicaciones RMI

� Diseño por parte del servidor:� Implementación de la interfaz remota

� Generar el resguardo y el esqueleto

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

118

# rmic SomeImpl# ls SomeImp*.class

…………SomeImpl_skel.classSomeImpl_skel.classSomeImpl_skel.classSomeImpl_skel.classSomeImpl_stub.classSomeImpl_stub.classSomeImpl_stub.classSomeImpl_stub.class

nombre de la clase de la implementación de la interface remota

Page 119: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

Invocación remota

Servidor de objetos

SomeInterface.class

Cliente de objetos

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

119

SomeInterface.class

SomeImpl.class

SomeServer.class

Skel.class

SomeClient.class

SomeInterface.class

Stub.class

Page 120: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

Diseño de aplicaciones RMI

(.java)

1

2

3

4(.class)

Implementación de la interfaz remota

javac

Definición de la interfaz remota

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

120

javac

4

10

95

6

7

8

(.java)

usa

EjectuarCliente

CLIENTE SERVIDOR

(.class)

Esqueleto(.class)

stub(.class)

Arrancar RMIRegistry

Crear los objetos

Registrar los objetos

rmic Servidor(.class)

Cliente

Page 121: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

Plantilla de clase de servidor de objeto

import java.rmi.*;import java.rmi.server.*;

import java.rmi.registry.Registry;

import java.rmi.registry.LocateRegistry;

public class SomeServer {

public static void main(String args[]) {

try{

SomeImpl exportedObj = new SomeImpl();

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

121

int portNum=1099;

startRegistry(portNum );

registryURL = "rmi://localhost:"+portNum+"/some";

Naming.rebind(registryURL, exportedObj);

System.out.println("Some Server ready.");

}

}catch (Exception ex) {

System.out.println(“Exception: “+ex);}

Page 122: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

Plantilla de clase de servidor de objeto

private static void startRegistry(int RMIPortNum)throws RemoteException

{try {

Registry registry= LocateRegistry.getRegistry(RMIPo rtNum);registry.list( );

}catch ( RemoteException ex)

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

122

catch ( RemoteException ex) {

System.out.println("RMI registry cannot be located at port" + RMIPortNum);Registry registry= LocateRegistry.createRegistry(RM IPortNum);System.out.println("RMI registry created at port " + RMIPortNum);

}}

Alternativa: activar el registro manualmente conrmiregistry <número de puerto>

Page 123: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

Plantilla de clase de cliente de objeto

import java.rmi.*;

public class SomeClient{

public static void main(String args[]) {

try {int portNum=1099;String registryURL ="rmi://serverhost:" + portNum + "/some";

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

123

String registryURL ="rmi://serverhost:" + portNum + "/some"; SomeInterface h = (SomeInterface)Naming.lookup(regis tryURL);

String message = h.someMethod1();System.out.println(message);

} catch (Exception e) {

System.out.println("Exception in SomeClient: " + e) ;}

} }

Page 124: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

Invocación remota

rmiregistryRMI

Máquina 1Máquina 2

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

124

Cliente

Servidor

rmiregistryRMI

RMI RMI

Page 125: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

Ejemplo (RMI)

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

125

resultado = 7

Page 126: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

Modelización de la interfaz remota

(Sumador)

public interface Sumador

extends java.rmi.Remote

{

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

126

{

public int sumar(int a, int b)

throws java.rmi.RemoteException;

}

Page 127: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

Clase que implementa la interfaz

(SumadorImpl)

import java.rmi.*;

import java.rmi.server.UnicastRemoteObject;

public class SumadorImpl

extends UnicastRemoteObject implements Sumador {

public SumadorImpl(String name) throws RemoteExcept ion {

super();

try {

System.out.println("Rebind objeto " + name);

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

127

System.out.println("Rebind objeto " + name);

Naming.rebind(name, this);

} catch (Exception e) {

System.out.println("Exception: " + e.getMessage());

e.printStackTrace();

}

}

public int sumar (int a, int b) throws RemoteExcept ion

{ return a + b; }

}

Page 128: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

Registro del servicio

� Cualquier programa que quiera instanciar un objeto de esta clase debe realizar el registro con el servicio de nombrado. Ejemplo:

Sumador misuma =

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

128

Sumador misuma = (Sumador) Naming.lookup("rmi://" + args[0] + "/” + "MiSumador");

� Antes de arrancar el cliente y el servidor, se debe arrancar el programa rmiregistryen el servidor para el servicio de nombres.

Page 129: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

Código del servidor

(SumadorServer)

import java.rmi.*;import java.rmi.server.UnicastRemoteobjeto;public class SumadorImpl

extends UnicastRemoteobjeto implements Sumador {public SumadorImpl(String name)

throws RemoteException {super();try {

System.out.println("Rebind objeto " + name);Naming.rebind(name, this);

}

import java.rmi.*;

import java.rmi.server.*;

public class SumadorServer {

public static void main (String args[]) {

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

129

public static void main (String args[]) {

try{

SumadorImpl misuma = new SumadorImpl("rmi://localhost/MiSumador");

} catch(Exception excr) {

System.out.println("Excepcion: "+excr);

}

}

}

Page 130: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

Código en el cliente

(SumadorCliente)

public interface Sumador

extends java.rmi.Remote

{

public int sumar(int a, int b)

throws java.rmi.RemoteException;

}

import java.rmi.*;

public class SumadorClient {

public static void main(String args[]) {

int res = 0;

try {

System.out.println ("Buscando Objeto ");

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

130

System.out.println ("Buscando Objeto ");

Sumador misuma = (Sumador)Naming.lookup("rmi://" + args[0] + "/" +"MiSumador");

res = misuma.sumar(5, 2);

System.out.println("5 + 2 = " + res);

} catch(Exception e) { System.err.println(" System exception");

}

System.exit(0);

}

}

Page 131: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

Invocación remota

Servidor de objetos

SumadorInterface.class

Cliente de objetos

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

131

SumadorInterface.class

SumadorImpl.class

SumadorServer.class

Skel.class

SumadorCliente.class

SumadorInterface.class

Stub.class

Page 132: Tema6 llamadas a procedimientos remotosocw.uc3m.es/ingenieria-informatica/sistemas-distribuidos...Ejemplo en CORBA: Se corresponden con métodos especificados como oneway cliente servidor

¿Cómo se ejecuta?

1. Compilación� javac Sumador.java� javac SumadorImpl.java� javac SumadorClient.java� javac Sumador Server.java

2. Generación de los esqueletos� rmic SumadorImpl

F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.

132

� rmic SumadorImpl3. Copiar SumadorImpl_Stub.class e

interfaz remota a clientes

4. Ejecución del programa de registro de RMI� rmiregistry

5. Ejecución del servidor� java SumadorServer

6. Ejecución del cliente� java SumadorCliente <host-del-servidor>