102
Fernando Pérez Costoya ¾ José Mª Peña Sánchez Mª de los Santos Pérez Hernández Sistemas Distribuidos Comunicación en Sistemas Distribuidos

SD comunicacion 2020 - laurel.datsi.fi.upm.es · Fernando Pérez Costoya ¾José Mª Peña Sánchez Mª de los Santos Pérez Hernández Sistemas Distribuidos 6 Escenarios de Zero-Copy

  • Upload
    others

  • View
    6

  • Download
    0

Embed Size (px)

Citation preview

Page 1: SD comunicacion 2020 - laurel.datsi.fi.upm.es · Fernando Pérez Costoya ¾José Mª Peña Sánchez Mª de los Santos Pérez Hernández Sistemas Distribuidos 6 Escenarios de Zero-Copy

Fernando Pérez Costoya ¾ José Mª Peña SánchezMª de los Santos Pérez Hernández

Sistemas Distribuidos

Comunicación en Sistemas

Distribuidos

Page 2: SD comunicacion 2020 - laurel.datsi.fi.upm.es · Fernando Pérez Costoya ¾José Mª Peña Sánchez Mª de los Santos Pérez Hernández Sistemas Distribuidos 6 Escenarios de Zero-Copy

Fernando Pérez Costoya ¾ José Mª Peña SánchezMª de los Santos Pérez Hernández

Sistemas Distribuidos2

Índice

• Paso de mensajes– Comunicación punto a punto

• Sockets (ya estudiados en sistemas operativos)• http://laurel.datsi.fi.upm.es/~ssoo/sockets/

– Comunicación de grupo– Sistemas de colas de mensajes

• Llamadas a procedimientos remotos (RPC)– RPC Sun/ONC (no estudiadas pero se plantea trabajo optativo)

• http://laurel.datsi.fi.upm.es/~ssoo/SOD.dir/practicas/guiarpc.html

• Invocación de métodos remotos (RMI)– Java RMI

• http://laurel.datsi.fi.upm.es/~ssoo/SD.dir/practicas/guiarmi.html

Page 3: SD comunicacion 2020 - laurel.datsi.fi.upm.es · Fernando Pérez Costoya ¾José Mª Peña Sánchez Mª de los Santos Pérez Hernández Sistemas Distribuidos 6 Escenarios de Zero-Copy

Fernando Pérez Costoya ¾ José Mª Peña SánchezMª de los Santos Pérez Hernández

Sistemas Distribuidos

Paso de mensajes

Page 4: SD comunicacion 2020 - laurel.datsi.fi.upm.es · Fernando Pérez Costoya ¾José Mª Peña Sánchez Mª de los Santos Pérez Hernández Sistemas Distribuidos 6 Escenarios de Zero-Copy

Fernando Pérez Costoya ¾ José Mª Peña SánchezMª de los Santos Pérez Hernández

Sistemas Distribuidos4

Esquemas de direccionamiento

nº proceso: 1 ® 1 MPI

cola: N ® M

puerto: N ® 1 sockets

colas de mensajes

Page 5: SD comunicacion 2020 - laurel.datsi.fi.upm.es · Fernando Pérez Costoya ¾José Mª Peña Sánchez Mª de los Santos Pérez Hernández Sistemas Distribuidos 6 Escenarios de Zero-Copy

Fernando Pérez Costoya ¾ José Mª Peña SánchezMª de los Santos Pérez Hernández

Sistemas Distribuidos5

Zero-Copy

• Reducir al mínimo (≈ a cero) copias entre zonas de memoria• http://www.linuxjournal.com/article/6345• http://blog.superpat.com/2010/06/01/zero-copy-in-linux-with-sendfile-and-splice/

• App, S.O. y hardware de comunicación colaboran para intentar:• Enviar info. desde buffer app emisora al de la receptora sin copias

• Aplicación debería evitar copias entre sus variables:• strcpy(m.ncola, ncola);

• Evitar copias entre buffers de usuario y del S.O.• Y entre buffers del propio S.O.

• Reduciendo nº llamadas al sistema usadas para la transmisión• Sobrecarga de cambios de modo usuario a sistema y viceversa

• Evitando fragmentación de mensajes por la red• Envíos separados pueden acabar en mensajes independientes• send(s, cola, strlen(cola),0); send(s, mensaje, tam,0);

Page 6: SD comunicacion 2020 - laurel.datsi.fi.upm.es · Fernando Pérez Costoya ¾José Mª Peña Sánchez Mª de los Santos Pérez Hernández Sistemas Distribuidos 6 Escenarios de Zero-Copy

Fernando Pérez Costoya ¾ José Mª Peña SánchezMª de los Santos Pérez Hernández

Sistemas Distribuidos6

Escenarios de Zero-Copy

• Escenario 1: envío de N datos dispersos de emisor a receptor• N envíos: sobrecarga de llamadas + fragmentación de mensajes• Reserva de buffer y 1 envío: sobrecarga de copias• Funciones scatter/gather: minimizar copias y llamadas

• Escenario 2: envío de un fichero• Uso de operaciones convencionales de lectura y envío

– Dos copias de memoria: de buffer de sistema a de usuario y viceversa• Uso de proyección de ficheros y envío

– Una copia de memoria a buffer de sistema en envío• Uso de operaciones de transferencia directa entre descriptores

– No requiere copias entres buffers; reduce nº llamadas al sistema• Escenario combinado: servidor web envía un fichero

• Envío de cabecera + envío del contenido del fichero• Reto: obtener máximo rendimiento (fake_web_server)• http://laurel.datsi.fi.upm.es/~ssoo/SD.dir/zerocopy.tgz

Page 7: SD comunicacion 2020 - laurel.datsi.fi.upm.es · Fernando Pérez Costoya ¾José Mª Peña Sánchez Mª de los Santos Pérez Hernández Sistemas Distribuidos 6 Escenarios de Zero-Copy

Fernando Pérez Costoya ¾ José Mª Peña SánchezMª de los Santos Pérez Hernández

Sistemas Distribuidos7

Técnicas Linux para Zero-Copy

• Proyección de archivoso mmap (uso de madvise para especificar a SO el patrón de acceso)

• Funciones scatter/gathero readv, writev, sendmsg, recvmsg

• Funciones para transferencia directa entre descriptoreso sendfile: especializada para envío de fichero por socketo splice (vmsplice, tee): genérica, basada en tuberías

• Vincula descriptores de fichero o sockets con tuberías• Datos no pasan por buffers de usuario

• Funciones para reducir fragmentación de mensajeso Flag MSG_MORE de send y SPLICE_F_MORE de spliceo TCP_CORK con setsockopt

Page 8: SD comunicacion 2020 - laurel.datsi.fi.upm.es · Fernando Pérez Costoya ¾José Mª Peña Sánchez Mª de los Santos Pérez Hernández Sistemas Distribuidos 6 Escenarios de Zero-Copy

Fernando Pérez Costoya ¾ José Mª Peña SánchezMª de los Santos Pérez Hernández

Sistemas Distribuidos8

Datos dispersos: Envío múltiple

dir1

dir2

dir3

tipo1

tipo2

tipo3tam3

tam2

tam1

Envía(dest, dir2, tam2, ...)

Envía(dest, dir1, tam1, ...)

Envía(dest, dir3, tam3, ...)

Page 9: SD comunicacion 2020 - laurel.datsi.fi.upm.es · Fernando Pérez Costoya ¾José Mª Peña Sánchez Mª de los Santos Pérez Hernández Sistemas Distribuidos 6 Escenarios de Zero-Copy

Fernando Pérez Costoya ¾ José Mª Peña SánchezMª de los Santos Pérez Hernández

Sistemas Distribuidos9

Datos dispersos: Envío con copia

dir1

dir2

dir3

tipo1

tipo2

tipo3tam3

tam2

tam1

Envía(dest, dir, tam, ...)COPIA

dirtam

Page 10: SD comunicacion 2020 - laurel.datsi.fi.upm.es · Fernando Pérez Costoya ¾José Mª Peña Sánchez Mª de los Santos Pérez Hernández Sistemas Distribuidos 6 Escenarios de Zero-Copy

Fernando Pérez Costoya ¾ José Mª Peña SánchezMª de los Santos Pérez Hernández

Sistemas Distribuidos10

Datos dispersos: Envío gather

dir1

dir2

dir3

tipo1

tipo2

tipo3tam3

tam2

tam1

Envía(dest,dir1,tam1,dir2,tam2,dir3,tam3,...)

Page 11: SD comunicacion 2020 - laurel.datsi.fi.upm.es · Fernando Pérez Costoya ¾José Mª Peña Sánchez Mª de los Santos Pérez Hernández Sistemas Distribuidos 6 Escenarios de Zero-Copy

Fernando Pérez Costoya ¾ José Mª Peña SánchezMª de los Santos Pérez Hernández

Sistemas Distribuidos11

Datos dispersos: Recepción scatter

dir1

dir2

dir3

tipo1

tipo2

tipo3tam3

tam2

tam1

Recibe(org,dir1,tam1,dir2,tam2,dir3,tam3,...)

Page 12: SD comunicacion 2020 - laurel.datsi.fi.upm.es · Fernando Pérez Costoya ¾José Mª Peña Sánchez Mª de los Santos Pérez Hernández Sistemas Distribuidos 6 Escenarios de Zero-Copy

Fernando Pérez Costoya ¾ José Mª Peña SánchezMª de los Santos Pérez Hernández

Sistemas Distribuidos12

Envío convencional de fichero

send(s,…)read(f…)

Proceso

SO

buffer desistema

buffer desistema

buffer deusuario

Copia por DMA Copia hecha por el procesador

Page 13: SD comunicacion 2020 - laurel.datsi.fi.upm.es · Fernando Pérez Costoya ¾José Mª Peña Sánchez Mª de los Santos Pérez Hernández Sistemas Distribuidos 6 Escenarios de Zero-Copy

Fernando Pérez Costoya ¾ José Mª Peña SánchezMª de los Santos Pérez Hernández

Sistemas Distribuidos13

Envío con proyección de fichero

send(s,…)mmap(…f…)

Proceso

SO

buffer deusu|sis

buffer desistema

SO

Copia por DMA Copia hecha por el procesador

Page 14: SD comunicacion 2020 - laurel.datsi.fi.upm.es · Fernando Pérez Costoya ¾José Mª Peña Sánchez Mª de los Santos Pérez Hernández Sistemas Distribuidos 6 Escenarios de Zero-Copy

Fernando Pérez Costoya ¾ José Mª Peña SánchezMª de los Santos Pérez Hernández

Sistemas Distribuidos14

Envío zero-copy de fichero

sendfile(f,s…)

Proceso

buffer desistema

SO

Copia por DMA Copia hecha por el procesador

Page 15: SD comunicacion 2020 - laurel.datsi.fi.upm.es · Fernando Pérez Costoya ¾José Mª Peña Sánchez Mª de los Santos Pérez Hernández Sistemas Distribuidos 6 Escenarios de Zero-Copy

Fernando Pérez Costoya ¾ José Mª Peña SánchezMª de los Santos Pérez Hernández

Fake Web Server: read y send

Sistemas Distribuidos15

Page 16: SD comunicacion 2020 - laurel.datsi.fi.upm.es · Fernando Pérez Costoya ¾José Mª Peña Sánchez Mª de los Santos Pérez Hernández Sistemas Distribuidos 6 Escenarios de Zero-Copy

Fernando Pérez Costoya ¾ José Mª Peña SánchezMª de los Santos Pérez Hernández

Fake Web Server: mmap y writev

Sistemas Distribuidos16

Page 17: SD comunicacion 2020 - laurel.datsi.fi.upm.es · Fernando Pérez Costoya ¾José Mª Peña Sánchez Mª de los Santos Pérez Hernández Sistemas Distribuidos 6 Escenarios de Zero-Copy

Fernando Pérez Costoya ¾ José Mª Peña SánchezMª de los Santos Pérez Hernández

Fake Web Server: sendfile

Sistemas Distribuidos17

Page 18: SD comunicacion 2020 - laurel.datsi.fi.upm.es · Fernando Pérez Costoya ¾José Mª Peña Sánchez Mª de los Santos Pérez Hernández Sistemas Distribuidos 6 Escenarios de Zero-Copy

Fernando Pérez Costoya ¾ José Mª Peña SánchezMª de los Santos Pérez Hernández

Fake Web Server: splice

Sistemas Distribuidos18

Page 19: SD comunicacion 2020 - laurel.datsi.fi.upm.es · Fernando Pérez Costoya ¾José Mª Peña Sánchez Mª de los Santos Pérez Hernández Sistemas Distribuidos 6 Escenarios de Zero-Copy

Fernando Pérez Costoya ¾ José Mª Peña SánchezMª de los Santos Pérez Hernández

Fake Web Server: resultados

Sistemas Distribuidos19

Page 20: SD comunicacion 2020 - laurel.datsi.fi.upm.es · Fernando Pérez Costoya ¾José Mª Peña Sánchez Mª de los Santos Pérez Hernández Sistemas Distribuidos 6 Escenarios de Zero-Copy

Fernando Pérez Costoya ¾ José Mª Peña SánchezMª de los Santos Pérez Hernández

Sistemas Distribuidos20

Integridad de los mensajes• En recepción debe especificarse buffer de tamaño ≥ mensaje

– Si menor: pérdida de resto del mensaje (MPI y sockets datagrama)– Se mantiene integridad de los mensajes– Nunca se entregan restos de mensajes ni dos mensajes juntos

• Excepto en comunicación como flujo de bytes (sockets stream)– No se mantiene la integridad de los mensajes– Recepción de N bytes puede obtener cualquier nº de bytes ≤ N

• Aunque se hayan enviado mensajes también de N bytes• http://laurel.datsi.fi.upm.es/~ssoo/sockets/7_recepcion_completa/

– ¿Cómo asegurar que reciben N bytes?• Bucle que repite la llamada de recepción y va acumulando hasta N• Uso del flag MSG_WAITALL en recv• Uso de funciones de la biblioteca de un lenguaje (p.e. fread en C)

– Para gestionar mensajes de tamaño variable se puede:• Enviar longitud antes del mensaje vs Usar un separador• Usar 1 conexión/mensaje y hacer shutdown de socket de envío

Page 21: SD comunicacion 2020 - laurel.datsi.fi.upm.es · Fernando Pérez Costoya ¾José Mª Peña Sánchez Mª de los Santos Pérez Hernández Sistemas Distribuidos 6 Escenarios de Zero-Copy

Fernando Pérez Costoya ¾ José Mª Peña SánchezMª de los Santos Pérez Hernández

Sistemas Distribuidos21

Serialización/marshaling de datos

• Emisor y receptor misma interpretación de información– Misma cuestión, y soluciones, para lector y escritor de un fichero

• Procesadores, lenguajes, compiladores difieren en:– Orden de bytes en tipos numéricos (endian)– Tamaño de datos numéricos (en C: ¿tamaño de int, long,…?)– Strings (con longitud vs. carácter terminador (¿qué carácter?))– Formatos de texto (ISO-8859-1, UTF-8,…)– Organización estructuras datos (compactación, alineamientos,…),…

• Se necesitan “serializar” los datos para enviar/almacenar– Asegurando misma interpretación en sistema heterogéneo– Eficientemente (en serialización, en uso de red/disco,…)– Facilitando la programación de la serialización– Admitiendo cambios incrementales en protocolo

– P.e. protocolo con nuevo campo opcional pero cliente antiguo sigue OK

Page 22: SD comunicacion 2020 - laurel.datsi.fi.upm.es · Fernando Pérez Costoya ¾José Mª Peña Sánchez Mª de los Santos Pérez Hernández Sistemas Distribuidos 6 Escenarios de Zero-Copy

Fernando Pérez Costoya ¾ José Mª Peña SánchezMª de los Santos Pérez Hernández

Sistemas Distribuidos22

Formato de serialización de datos

• Define cómo se transmiten/almacenan datos (wire protocol)• Secuencia de bits que representan cada dato

• Alternativas:• Formato propio vs. Estándar (mejor)• Texto vs. binario: menos compacto pero interpretable por usuarios • Información de tipos implícita o explícita:

– Implícita: emisor y receptor conocen tipos de parámetros• no viaja info. de tipos con datos

– Explícita: disponible información explícita de tipos• Viaja mezclada con datos o como referencia a un esquema

• Explícita más flexible (permite reflexión) pero menos compacto• Información de nombres de campos implícita vs. explícita:

– Explícita: viaja nombre de campo con datos• Puede facilitar cambios incrementales de un protocolo

• Información explícita de campos y tipos• Función de deserialización genérica

Page 23: SD comunicacion 2020 - laurel.datsi.fi.upm.es · Fernando Pérez Costoya ¾José Mª Peña Sánchez Mª de los Santos Pérez Hernández Sistemas Distribuidos 6 Escenarios de Zero-Copy

Fernando Pérez Costoya ¾ José Mª Peña SánchezMª de los Santos Pérez Hernández

Sistemas Distribuidos23

Ejemplos de formatos de serialización

• XDR (RFC 1832): binario, info. implícita campos y tipos• Soluciones basadas XML: texto, inf. explícita campos y tipos

– Info de tipos mediante referencia a XML Schema• JSON: texto, info. explícita campos y tipos• Protocol Buffers (Google): binario, no explícita campos y tipos

– Pero sí viaja ID único y longitud de cada campo con datos– Facilita cambios incrementales en protocolo

• Java Serialization: binario, info. explícita campos y tipos– Info de campos y tipos mezclada con datos; no requiere IDL

• Muchos otros: ASN.1, Apache Thrift, Apache Avro, BSON,…• Wikipedia: Comparison data serialization formats• Ejemplos: http://laurel.datsi.fi.upm.es/~ssoo/SD.dir/serializacion

Page 24: SD comunicacion 2020 - laurel.datsi.fi.upm.es · Fernando Pérez Costoya ¾José Mª Peña Sánchez Mª de los Santos Pérez Hernández Sistemas Distribuidos 6 Escenarios de Zero-Copy

Fernando Pérez Costoya ¾ José Mª Peña SánchezMª de los Santos Pérez Hernández

Sistemas Distribuidos24

XDRstruct dato { int id; string nombre<>; }; // especificación (fichero .x)

struct dato d; XDR x; char buf[TAM];d.id=1; d.nombre="yo";xdrmem_create(&x, buf, TAM, XDR_ENCODE);xdr_dato (&x, &d); // serializawrite(1, buf, xdr_getpos(&x));

XDR x; int tam; char buf[TAM];struct dato d = {0, NULL};tam=read(0, buf, TAM);xdrmem_create(&x, buf, tam, XDR_DECODE);xdr_dato (&x, &d); // deserializaprintf("id %d nombre %s\n", d.id, d.nombre);

Contenido = 12 bytes: 00 00 00 01 00 00 00 02 ‘y’ ‘o’ 00 00

Page 25: SD comunicacion 2020 - laurel.datsi.fi.upm.es · Fernando Pérez Costoya ¾José Mª Peña Sánchez Mª de los Santos Pérez Hernández Sistemas Distribuidos 6 Escenarios de Zero-Copy

Fernando Pérez Costoya ¾ José Mª Peña SánchezMª de los Santos Pérez Hernández

Sistemas Distribuidos25

JSON (wikipedia)

Page 26: SD comunicacion 2020 - laurel.datsi.fi.upm.es · Fernando Pérez Costoya ¾José Mª Peña Sánchez Mª de los Santos Pérez Hernández Sistemas Distribuidos 6 Escenarios de Zero-Copy

Fernando Pérez Costoya ¾ José Mª Peña SánchezMª de los Santos Pérez Hernández

Sistemas Distribuidos26

JSON (con Javascript)

<!DOCTYPE html><html><body><script>var pers = new Object();pers.nombre="yo";pers.tfno=666;var buf = JSON.stringify(pers); // Serializa a {"nombre":"yo","tfno":666}

alert(buf);

var p = JSON.parse(buf); // Deserialización genéricaalert(p.nombre + " " + p.tfno);</script></body></html>

Page 27: SD comunicacion 2020 - laurel.datsi.fi.upm.es · Fernando Pérez Costoya ¾José Mª Peña Sánchez Mª de los Santos Pérez Hernández Sistemas Distribuidos 6 Escenarios de Zero-Copy

Fernando Pérez Costoya ¾ José Mª Peña SánchezMª de los Santos Pérez Hernández

Sistemas Distribuidos27

Protocol Buffers (con C++)

Especificación (fichero .proto)

Serialización a un fichero (C++)

Deserialización desde un fichero (C++)

Page 28: SD comunicacion 2020 - laurel.datsi.fi.upm.es · Fernando Pérez Costoya ¾José Mª Peña Sánchez Mª de los Santos Pérez Hernández Sistemas Distribuidos 6 Escenarios de Zero-Copy

Fernando Pérez Costoya ¾ José Mª Peña SánchezMª de los Santos Pérez Hernández

Sistemas Distribuidos28

Java Serializationpublic class Dato implements Serializable {

int id; String nombre; public Dato(int i, String n) {id = i; nombre = n; }}

class Encode {static public void main (String args[]) {

Dato d = new Dato(1, "yo");try { ObjectOutputStream o = new ObjectOutputStream(System.out);

/* serialización */ o.writeObject(d); o.close(); }catch (java.io.IOException e) { System.err.println("Error serializando");}}}

class Decode {static public void main (String args[]) {

try { ObjectInputStream i = new ObjectInputStream(System.in);/* deserialización genérica */ Dato d = (Dato) i.readObject(); i.close();

System.out.println(d.id + " " + d.nombre); }catch (Exception e) { System.err.println("Error deserializando");} }}

Contenido = ¡69 B!; http://www.javaworld.com/article/2072752/the-java-serialization-algorithm-revealed.html

Page 29: SD comunicacion 2020 - laurel.datsi.fi.upm.es · Fernando Pérez Costoya ¾José Mª Peña Sánchez Mª de los Santos Pérez Hernández Sistemas Distribuidos 6 Escenarios de Zero-Copy

Fernando Pérez Costoya ¾ José Mª Peña SánchezMª de los Santos Pérez Hernández

Sistemas Distribuidos29

El precio de un entero (a=150)

https://developers.google.com/protocol-buffers/docs/encoding

struct dato {int a;}; 00 00 96 00 XDR

Definición Contenido Formato

var d=new Object(); d.a=150; {“a”:150} JSON

public class D implements Serializable {int a;} 30B Java

Page 30: SD comunicacion 2020 - laurel.datsi.fi.upm.es · Fernando Pérez Costoya ¾José Mª Peña Sánchez Mª de los Santos Pérez Hernández Sistemas Distribuidos 6 Escenarios de Zero-Copy

Fernando Pérez Costoya ¾ José Mª Peña SánchezMª de los Santos Pérez Hernández

Sistemas Distribuidos30

M

Ne

BPo

Nr

BPd

Grado de sincronía en envío y buffering

BNe

R

BNr

Relación entre sincronía (cuándo retorna la llamada de envío) y buffers requeridos

Page 31: SD comunicacion 2020 - laurel.datsi.fi.upm.es · Fernando Pérez Costoya ¾José Mª Peña Sánchez Mª de los Santos Pérez Hernández Sistemas Distribuidos 6 Escenarios de Zero-Copy

Fernando Pérez Costoya ¾ José Mª Peña SánchezMª de los Santos Pérez Hernández

Sistemas Distribuidos31

Grado de sincronía y buffering• Po envía M a Pd: copia entre buffers de procesos: BPo ® BPd

– Además puede haber buffers en nodo emisor BNe y/o receptor BNr• Minimizar copias entre buffers (ideal: zero copy)

• De menor a mayor grado de sincronía 1. Envío devuelve control inmediatamente

• No requiere BNe pero Po no puede reutilizar BPo hasta que sea seguro– Fin de operación o mensaje copiado en algún buffer (BNe o BNr)

• Requiere operación para comprobar si ya se puede reutilizar2. Envío devuelve control después de BPo ® BNe

• Po puede reutilizar BPo, pero posible bloqueo si BNe lleno3. Envío devuelve control cuando M llega a nodo receptor (BNr)

• No requiere BNe; ACK de Nr a Ne4. Envío devuelve control cuando M llega a Pd (BPd)

• No requiere BNe ni BNr; ACK de Nr a Ne5. Envío devuelve control cuando Pd tiene respuesta

• No requiere BNe ni BNr: BPo↔ BPd ; respuesta sirve de ACK

Page 32: SD comunicacion 2020 - laurel.datsi.fi.upm.es · Fernando Pérez Costoya ¾José Mª Peña Sánchez Mª de los Santos Pérez Hernández Sistemas Distribuidos 6 Escenarios de Zero-Copy

Fernando Pérez Costoya ¾ José Mª Peña SánchezMª de los Santos Pérez Hernández

Sistemas Distribuidos32

M

Ne

BPo

Nr

BPd

Retorno inmediato

Emisor no puede reutilizar buffer de envío inmediatamente

Page 33: SD comunicacion 2020 - laurel.datsi.fi.upm.es · Fernando Pérez Costoya ¾José Mª Peña Sánchez Mª de los Santos Pérez Hernández Sistemas Distribuidos 6 Escenarios de Zero-Copy

Fernando Pérez Costoya ¾ José Mª Peña SánchezMª de los Santos Pérez Hernández

Sistemas Distribuidos33

M

Ne

BPo

Nr

BPd

Retorno después de copia local

MBNe

Page 34: SD comunicacion 2020 - laurel.datsi.fi.upm.es · Fernando Pérez Costoya ¾José Mª Peña Sánchez Mª de los Santos Pérez Hernández Sistemas Distribuidos 6 Escenarios de Zero-Copy

Fernando Pérez Costoya ¾ José Mª Peña SánchezMª de los Santos Pérez Hernández

Sistemas Distribuidos34

M

Ne

BPo

Nr

BPd

Retorno después de llegada

MBNrM

ACK

Page 35: SD comunicacion 2020 - laurel.datsi.fi.upm.es · Fernando Pérez Costoya ¾José Mª Peña Sánchez Mª de los Santos Pérez Hernández Sistemas Distribuidos 6 Escenarios de Zero-Copy

Fernando Pérez Costoya ¾ José Mª Peña SánchezMª de los Santos Pérez Hernández

Sistemas Distribuidos35

M

Ne

BPo

Nr

BPd

Retorno después de recepción

M

ACK

M

Page 36: SD comunicacion 2020 - laurel.datsi.fi.upm.es · Fernando Pérez Costoya ¾José Mª Peña Sánchez Mª de los Santos Pérez Hernández Sistemas Distribuidos 6 Escenarios de Zero-Copy

Fernando Pérez Costoya ¾ José Mª Peña SánchezMª de los Santos Pérez Hernández

Sistemas Distribuidos36

M/R

Ne

BPo

Nr

BPd

Retorno después de respuesta

M

R/M

R

Page 37: SD comunicacion 2020 - laurel.datsi.fi.upm.es · Fernando Pérez Costoya ¾José Mª Peña Sánchez Mª de los Santos Pérez Hernández Sistemas Distribuidos 6 Escenarios de Zero-Copy

Fernando Pérez Costoya ¾ José Mª Peña SánchezMª de los Santos Pérez Hernández

Sistemas Distribuidos37

Modo de operación en recepción

• Recepción generalmente bloqueante• Opción no bloqueante: retorna si no hay datos• Opción asíncrona:

– Especifica buffer donde se almacenará el mensaje y– Retorna inmediatamente– S. comunicaciones realiza recepción mientras proceso ejecuta

• Espera temporizada: se bloquea un tiempo máximo• Espera múltiple: espera por varias fuentes de datos

Page 38: SD comunicacion 2020 - laurel.datsi.fi.upm.es · Fernando Pérez Costoya ¾José Mª Peña Sánchez Mª de los Santos Pérez Hernández Sistemas Distribuidos 6 Escenarios de Zero-Copy

Fernando Pérez Costoya ¾ José Mª Peña SánchezMª de los Santos Pérez Hernández

Sistemas Distribuidos38

Sockets: grado de sincronía y buffering

• Modo de operación de envío– Retorno después de copia local con bloqueo si buffer local lleno– Buffer reservado por SO

• Si aplicación no quiere bloquearse en envío:– Usar modo no bloqueante en descriptor socket: error si buffer lleno– Usar select/poll/epoll para comprobar que envío no bloquea– Usar E/S asíncrona (aio_write)

• Modo de operación de recepción bloqueante• Si aplicación no quiere bloquearse en recepción:

– Usar modo no bloqueante en descriptor socket: error si buffer vacío– Usar select/poll/epoll para comprobar que hay datos que recibir– Usar E/S asíncrona (aio_read)

• Espera múltiple temporizada mediante select/poll/epoll• Diferencias select/poll/epoll:

• https://devarea.com/linux-io-multiplexing-select-vs-poll-vs-epoll/

Page 39: SD comunicacion 2020 - laurel.datsi.fi.upm.es · Fernando Pérez Costoya ¾José Mª Peña Sánchez Mª de los Santos Pérez Hernández Sistemas Distribuidos 6 Escenarios de Zero-Copy

Fernando Pérez Costoya ¾ José Mª Peña SánchezMª de los Santos Pérez Hernández

Sistemas Distribuidos39

Adecuación a arquitecturas del SD

• Paso de mensajes adecuado para cualquier arquitectura– Pero cuidado con su asimetría: uno envía y otro recibe

• Cliente/servidor: su asimetría encaja con la del paso mensajes – Cliente: envía petición y recibe respuesta– Servidor: recibe petición y envía respuesta

• Editor/subscriptor: su asimetría no siempre encaja con p. mens.– Si pull con intermediario I: buen encaje

• Su|Ed envían ops. a I y reciben respuestas de I → I siempre pasivo– Si push con intermediario I: encaje problemático

• Su envía suscripción(evento X) y espera confirmación de I• Pero justo antes I envía notificación de evento Y a Su• Soluciones: uso de múltiples puertos y concurrencia en subscriptor

• P2P: arquitectura simétrica– ¿Quién envía y quién recibe?

Page 40: SD comunicacion 2020 - laurel.datsi.fi.upm.es · Fernando Pérez Costoya ¾José Mª Peña Sánchez Mª de los Santos Pérez Hernández Sistemas Distribuidos 6 Escenarios de Zero-Copy

Fernando Pérez Costoya ¾ José Mª Peña SánchezMª de los Santos Pérez Hernández

Sistemas Distribuidos40

Adecuación a arquitecturas del SD

C Senvíorecibo

reciboenvío OK

S

petic.

resp.C/S

Eenvíorecibo recibo

envíosusc.| cons.resp.

E/S pull OKreciboenvío I

notifresp.

S Eenvíorecibo recibo

envíosusc. ev. XE/S push ↓reciboenvío I

notif. ev. Ynotif. ev. Y

P1 P2envíorecibo recibo

envíopetic. recurso AP2P ↓

petic. recurso B

Page 41: SD comunicacion 2020 - laurel.datsi.fi.upm.es · Fernando Pérez Costoya ¾José Mª Peña Sánchez Mª de los Santos Pérez Hernández Sistemas Distribuidos 6 Escenarios de Zero-Copy

Fernando Pérez Costoya ¾ José Mª Peña SánchezMª de los Santos Pérez Hernández

Sistemas Distribuidos41

Multidifusión: comunicación de grupo

Destino de mensaje ® grupo de procesos– Envío/recepción especifican dirección de grupos de procesos– Desacoplamiento espacial

Trabajo seminal: ISIS (posteriores Horus, Ensemble, JGroups)Adecuación a arquitectura del SD:

– Cliente-servidor replicado• Facilita actualizaciones múltiples

– Modelo editor/subscriptor• Envío de notificaciones (p.e. 1 grupo/tema)

Aplicable a replicación de datos y de serviciosImplementación depende de si red tiene multicast (IP-multicast)

– Si no, se implementa enviando N mensajes

Page 42: SD comunicacion 2020 - laurel.datsi.fi.upm.es · Fernando Pérez Costoya ¾José Mª Peña Sánchez Mª de los Santos Pérez Hernández Sistemas Distribuidos 6 Escenarios de Zero-Copy

Fernando Pérez Costoya ¾ José Mª Peña SánchezMª de los Santos Pérez Hernández

Sistemas Distribuidos42

Aspectos de diseño de com. de grupo• Atomicidad: o reciben el mensaje o ninguno

• Con unidifusión fiable (TCP): en medio, se puede caer emisor• Con multicast IP: pérdida de mensajes

• Orden de recepción de los mensajes– FIFO: mensajes de misma fuente llegan en orden de envío

• No garantía sobre mensajes de distintos emisores– Causal: entrega respeta relación “causa-efecto”

• Si no hay relación, no garantiza ningún orden de entrega – Total: Todos los mensajes recibidos en mismo orden por todos

• El grupo suele tener carácter dinámico– Se pueden incorporar y retirar procesos del grupo– Vista: conjunto de procesos en el grupo en un instante dado– Procesos son notificados de los cambios de vista– Pertenencia debe coordinarse con comunicación→ sincronía virtual

Page 43: SD comunicacion 2020 - laurel.datsi.fi.upm.es · Fernando Pérez Costoya ¾José Mª Peña Sánchez Mª de los Santos Pérez Hernández Sistemas Distribuidos 6 Escenarios de Zero-Copy

Fernando Pérez Costoya ¾ José Mª Peña SánchezMª de los Santos Pérez Hernández

Sistemas Distribuidos43

Orden FIFOP1

P2

P4

P3

m1 m2

m3

m4

Page 44: SD comunicacion 2020 - laurel.datsi.fi.upm.es · Fernando Pérez Costoya ¾José Mª Peña Sánchez Mª de los Santos Pérez Hernández Sistemas Distribuidos 6 Escenarios de Zero-Copy

Fernando Pérez Costoya ¾ José Mª Peña SánchezMª de los Santos Pérez Hernández

Sistemas Distribuidos44

Orden causalP1

P2

P4

P3

m1 m2

m3

m4

Page 45: SD comunicacion 2020 - laurel.datsi.fi.upm.es · Fernando Pérez Costoya ¾José Mª Peña Sánchez Mª de los Santos Pérez Hernández Sistemas Distribuidos 6 Escenarios de Zero-Copy

Fernando Pérez Costoya ¾ José Mª Peña SánchezMª de los Santos Pérez Hernández

Sistemas Distribuidos45

Orden totalP1

P2

P4

P3

m2

m1

Page 46: SD comunicacion 2020 - laurel.datsi.fi.upm.es · Fernando Pérez Costoya ¾José Mª Peña Sánchez Mª de los Santos Pérez Hernández Sistemas Distribuidos 6 Escenarios de Zero-Copy

Fernando Pérez Costoya ¾ José Mª Peña SánchezMª de los Santos Pérez Hernández

Sistemas Distribuidos46

Sincronía virtualP1

P2

P4

P3

P4 baja P4 altaSÍ NO

Page 47: SD comunicacion 2020 - laurel.datsi.fi.upm.es · Fernando Pérez Costoya ¾José Mª Peña Sánchez Mª de los Santos Pérez Hernández Sistemas Distribuidos 6 Escenarios de Zero-Copy

Fernando Pérez Costoya ¾ José Mª Peña SánchezMª de los Santos Pérez Hernández

Sistemas Distribuidos47

MOM – Sistemas de colas de mensajes

• Message-oriented middleware:• RabbitMQ, ZeroMQ, Apache Kafka, ActiveMQ• AMQP protocolo estándar para MOM

• Envío/recepción mensajes a colas con comunic. “persistente”:– Comunicación “convencional”

• Destinatario debe estar presente cuando se recibe mensaje– Comunicación “persistente”

• No es necesario que proceso receptor esté presente• Sistema de comunicación (p.e. red de intermediarios) guarda mensaje

• Comunicación desacoplada en espacio y tiempo• API típico:

– SEND/PUT: envía mensaje a cola– RECEIVE/GET: recibe mensaje de cola (bloqueante)– POLL: recibe mensaje de cola (no bloqueante)– NOTIFY: proceso pide ser notificado cuando llegue mensaje a cola

Page 48: SD comunicacion 2020 - laurel.datsi.fi.upm.es · Fernando Pérez Costoya ¾José Mª Peña Sánchez Mª de los Santos Pérez Hernández Sistemas Distribuidos 6 Escenarios de Zero-Copy

Fernando Pérez Costoya ¾ José Mª Peña SánchezMª de los Santos Pérez Hernández

Sistemas Distribuidos48

Sistema de colas de mensajes

Distributed Systems: Concepts and Design. G. Coulouris et al.

Page 49: SD comunicacion 2020 - laurel.datsi.fi.upm.es · Fernando Pérez Costoya ¾José Mª Peña Sánchez Mª de los Santos Pérez Hernández Sistemas Distribuidos 6 Escenarios de Zero-Copy

Fernando Pérez Costoya ¾ José Mª Peña SánchezMª de los Santos Pérez Hernández

Sistemas Distribuidos49

MOM – Sistemas de colas de mensajes

• 2 modelos de comunicación habituales:– Basado en colas punto-a-punto– Basado en temas editor/subscriptor

• Adecuación a arquitecturas de SD– C/S: punto-a-punto → multi-servidor con reparto automático de carga– Ed/Su: modelo basado en temas; NOTIFY permite esquema push

• Características avanzadas habituales:– Filtrado de mensajes: receptor selecciona en cuáles está interesado

• por propiedades, por contenido,...• Puede usarse como filtro por contenido en arquit. Ed./Su.

– Mensajería con transacciones– Transformaciones de mensajes

• Apropiado para integración de aplicaciones de empresa (EAI)

Page 50: SD comunicacion 2020 - laurel.datsi.fi.upm.es · Fernando Pérez Costoya ¾José Mª Peña Sánchez Mª de los Santos Pérez Hernández Sistemas Distribuidos 6 Escenarios de Zero-Copy

Fernando Pérez Costoya ¾ José Mª Peña SánchezMª de los Santos Pérez Hernández

Sistemas Distribuidos50

Punto-a-punto vs. editor/subscriptor

Message-Oriented Middleware. Edward Curry

Page 51: SD comunicacion 2020 - laurel.datsi.fi.upm.es · Fernando Pérez Costoya ¾José Mª Peña Sánchez Mª de los Santos Pérez Hernández Sistemas Distribuidos 6 Escenarios de Zero-Copy

Fernando Pérez Costoya ¾ José Mª Peña SánchezMª de los Santos Pérez Hernández

Sistemas Distribuidos

RPC: Llamada a procedimiento remoto

Page 52: SD comunicacion 2020 - laurel.datsi.fi.upm.es · Fernando Pérez Costoya ¾José Mª Peña Sánchez Mª de los Santos Pérez Hernández Sistemas Distribuidos 6 Escenarios de Zero-Copy

Fernando Pérez Costoya ¾ José Mª Peña SánchezMª de los Santos Pérez Hernández

Sistemas Distribuidos52

Provisión de servicios en S. no Dist.

int main(...) {....r=op1(p, q, ...); .........

}t1 op1(ta a, tb b, ...) {

.....return r1;

}t2 op2(tx x, ty y, ...) {

.....return r2;

}...........

Aplicación

Biblioteca

Page 53: SD comunicacion 2020 - laurel.datsi.fi.upm.es · Fernando Pérez Costoya ¾José Mª Peña Sánchez Mª de los Santos Pérez Hernández Sistemas Distribuidos 6 Escenarios de Zero-Copy

Fernando Pérez Costoya ¾ José Mª Peña SánchezMª de los Santos Pérez Hernández

Sistemas Distribuidos53

Provisión de servicios (C/S) en S. Dist.

int main(...) {Mensaje msj,resp;..........dir_srv=busca(IDservicio);msj.op=OP1;msj.arg1=p;msj.arg2=q;...........envío(msj,dir_srv);recepción(&resp, NULL);r=resp.r;.........

}

int main(...) {Mensaje msj,resp;.........alta(IDservicio,dir_srv);while (TRUE) {recepción(&msj,&dir_clie);switch(msj.op) {case OP1:resp.r=op1(msj.arg1,...);

case OP2:resp.r=op2(msj.arg1,...);

.........envío(resp,dir_clie);

}}t1 op1(ta a, tb b, ...) { }...........

Cliente

Servidor

Page 54: SD comunicacion 2020 - laurel.datsi.fi.upm.es · Fernando Pérez Costoya ¾José Mª Peña Sánchez Mª de los Santos Pérez Hernández Sistemas Distribuidos 6 Escenarios de Zero-Copy

Fernando Pérez Costoya ¾ José Mª Peña SánchezMª de los Santos Pérez Hernández

Sistemas Distribuidos54

Fundamento de las RPC

• Código añadido a provisión de servicios en SD– Es independiente de la implementación del cliente y del servidor– Sólo depende de la interfaz de servicio– Puede generarse automáticamente a partir de la misma

• Objetivo de las RPC– Provisión de servicios igual que en sistema no distribuido– Sólo hay que programar bibliotecas de servicio y aplicaciones– Código restante generado automáticamente– Lograr semántica convencional de llamadas a procedimiento en SD

Page 55: SD comunicacion 2020 - laurel.datsi.fi.upm.es · Fernando Pérez Costoya ¾José Mª Peña Sánchez Mª de los Santos Pérez Hernández Sistemas Distribuidos 6 Escenarios de Zero-Copy

Fernando Pérez Costoya ¾ José Mª Peña SánchezMª de los Santos Pérez Hernández

Sistemas Distribuidos55

Provisión de servicios en SD con RPC

init() {dir_srv=busca(IDservicio);

}t1 op1(ta a, tb b, ...) {Mensaje msj,resp;msj.op=OP1;msj.arg1=a;msj.arg2=b;envío(msj,dir_srv);recepción(&resp, NULL);return resp.r;

}

int main(...) {Mensaje msj,resp;.........alta(IDservicio,dir_srv);while (TRUE) {recepción(&msj,&dir_clie);switch(msj.op) {case OP1:resp.r=op1(msj.arg1,...);

case OP2:resp.r=op2(msj.arg1,...);

.........envío(resp,dir_clie);

}}t1 op1(ta a, tb b, ...) { }...........

int main(...) {....r=op1(p, q, ...); .........

}

Aplicación

Biblioteca

Page 56: SD comunicacion 2020 - laurel.datsi.fi.upm.es · Fernando Pérez Costoya ¾José Mª Peña Sánchez Mª de los Santos Pérez Hernández Sistemas Distribuidos 6 Escenarios de Zero-Copy

Fernando Pérez Costoya ¾ José Mª Peña SánchezMª de los Santos Pérez Hernández

Sistemas Distribuidos56

Historia y evolución de las RPC

• Primeras ideas: White 1975; White se enrola en Xerox.• Desarrollo en Xerox: primer sistema de RPC Courier (1981)• Artículo clásico de Birrel y Nelson en 1984.• Sun: Open Network Computing (1985)

– RPC de Sun/ONC es la base para servicios (NFS o NIS)• Apollo (competidora de Sun) crea NCA: RPC de NCA

– HP compra Apollo; HP miembro de Open Group• Open Group: DCE (Distributed Computing Environment 1990)

– RPC de DCE basada en NCA– RPC de Microsoft (sustento de DCOM) basada en RPC de DCE

• RPC de Sun/ONC vs. RPC de DCE– RPC de Sun/ONC menos sofisticada pero más extendida– http://laurel.datsi.fi.upm.es/~ssoo/SOD.dir/practicas/guiarpc.html

Page 57: SD comunicacion 2020 - laurel.datsi.fi.upm.es · Fernando Pérez Costoya ¾José Mª Peña Sánchez Mª de los Santos Pérez Hernández Sistemas Distribuidos 6 Escenarios de Zero-Copy

Fernando Pérez Costoya ¾ José Mª Peña SánchezMª de los Santos Pérez Hernández

Sistemas Distribuidos57

Componentes de un sistema de RPC

• En tiempo de construcción del programa:– Generador automático de código: Compilador de IDL

• Definición de interfaz de servicio ® Resguardos• Heterogeneidad: disponibles para múltiples lenguajes

• En tiempo de ejecución del programa:– Resguardos (stubs)

• Módulos que se incluyen en cliente y en servidor• Ocultan comunicación dando abstracción de llamada a procedimiento

– Runtime de RPC• Capa que proporciona servicios que dan soporte a RPC

– Binding, conversión datos, autenticación, comportamiento ante fallos, ...• Uso normalmente por resguardos pero también por aplicación/biblioteca

– Binder: Localización de servicios; alternativas ya presentadas• Ámbito no global: ID servicio + dir. servidor (Sun/ONC RPC)• Ámbito global: ID servicio

– Uso sólo de binder global vs. binder global + binders locales (DCE RPC)

Page 58: SD comunicacion 2020 - laurel.datsi.fi.upm.es · Fernando Pérez Costoya ¾José Mª Peña Sánchez Mª de los Santos Pérez Hernández Sistemas Distribuidos 6 Escenarios de Zero-Copy

Fernando Pérez Costoya ¾ José Mª Peña SánchezMª de los Santos Pérez Hernández

Sistemas Distribuidos58

S. comunic.S. comunic.

Pila de comunicación en RPC

Stub de cliente

RPC Runtime

Stub de servidor

Cliente

RPC Runtime

Servidor

Page 59: SD comunicacion 2020 - laurel.datsi.fi.upm.es · Fernando Pérez Costoya ¾José Mª Peña Sánchez Mª de los Santos Pérez Hernández Sistemas Distribuidos 6 Escenarios de Zero-Copy

Fernando Pérez Costoya ¾ José Mª Peña SánchezMª de los Santos Pérez Hernández

Sistemas Distribuidos59

Lenguajes de definición de interfaces

• Los resguardos se generan a partir de la interfaz de servicio– ¿Cómo se define esta interfaz?

• Deben de poder definirse entidades tales como:– Un tipo interfaz de servicio con un número de versión asociado– Prototipos de funciones, constantes, tipos de datos, …

• Tipo de parámetros: de entrada, de salida o de entrada/salida– Directivas específicas (por ejemplo, si una función es idempotente)– Sólo definiciones; nunca implementación

• Alternativa: Uso de lenguaje específico vs. uno convencional – Permite definición neutral de interfaces– Supera limitaciones en expresividad de lenguajes convencionales– Pero hay que aprenderlo...

• Procesamiento: Compilador IDL (por ejemplo para C)– fichero IDL→ fichero .h + resguardo cliente + resguardo servidor

Page 60: SD comunicacion 2020 - laurel.datsi.fi.upm.es · Fernando Pérez Costoya ¾José Mª Peña Sánchez Mª de los Santos Pérez Hernández Sistemas Distribuidos 6 Escenarios de Zero-Copy

Fernando Pérez Costoya ¾ José Mª Peña SánchezMª de los Santos Pérez Hernández

Sistemas Distribuidos

RMI: Invocación de método remoto

•Java RMI

Page 61: SD comunicacion 2020 - laurel.datsi.fi.upm.es · Fernando Pérez Costoya ¾José Mª Peña Sánchez Mª de los Santos Pérez Hernández Sistemas Distribuidos 6 Escenarios de Zero-Copy

Fernando Pérez Costoya ¾ José Mª Peña SánchezMª de los Santos Pérez Hernández

Sistemas Distribuidos61

Modelo de objetos en sis. distribuidos

• Sistemas distribuidos.– Aplicaciones inherentemente distribuidas.– Se caracterizan por su complejidad.

• Sistemas orientados a objetos.– Más cercanos al lenguaje natural.– Facilitan el diseño y la programación.

Page 62: SD comunicacion 2020 - laurel.datsi.fi.upm.es · Fernando Pérez Costoya ¾José Mª Peña Sánchez Mª de los Santos Pérez Hernández Sistemas Distribuidos 6 Escenarios de Zero-Copy

Fernando Pérez Costoya ¾ José Mª Peña SánchezMª de los Santos Pérez Hernández

Sistemas Distribuidos62

Objetos-Distribuidos

Características:– Uso de un Middleware: Nivel de abstracción para la comunicación de

los objetos distribuidos. Oculta:• Localización de objetos.• Protocolos de comunicación.• Hardware de computadora.• Sistemas Operativos.

– Modelo de objetos distribuidos: Describe los aspectos del paradigma de objetos que es aceptado por la tecnología: Herencia, Interfaces, Excepciones, Polimorfismo, ...

– Recogida de basura (Garbage Collection): Determina los objetos que no están siendo usados para liberar recursos.

Page 63: SD comunicacion 2020 - laurel.datsi.fi.upm.es · Fernando Pérez Costoya ¾José Mª Peña Sánchez Mª de los Santos Pérez Hernández Sistemas Distribuidos 6 Escenarios de Zero-Copy

Fernando Pérez Costoya ¾ José Mª Peña SánchezMª de los Santos Pérez Hernández

Sistemas Distribuidos63

Ventajas respecto a paso de mensajes

• Paso de mensajes:– Procesos fuertemente acoplados– Paradigma orientado a datos: No adecuado para aplicaciones muy

complejas que impliquen un gran número de peticiones y respuestas entremezcladas.

• Paradigma de objetos distribuidos– Mayor abstracción– Paradigma orientado a acciones:

• Hace hincapié en la invocación de las operaciones• Los datos toman un papel secundario

Page 64: SD comunicacion 2020 - laurel.datsi.fi.upm.es · Fernando Pérez Costoya ¾José Mª Peña Sánchez Mª de los Santos Pérez Hernández Sistemas Distribuidos 6 Escenarios de Zero-Copy

Fernando Pérez Costoya ¾ José Mª Peña SánchezMª de los Santos Pérez Hernández

Sistemas Distribuidos64

Ventajas respecto a RPC

• Ventajas derivadas al uso de programación orientada a objetos:– Encapsulación– Reutilización– Modularidad– Dinamismo

Page 65: SD comunicacion 2020 - laurel.datsi.fi.upm.es · Fernando Pérez Costoya ¾José Mª Peña Sánchez Mª de los Santos Pérez Hernández Sistemas Distribuidos 6 Escenarios de Zero-Copy

Fernando Pérez Costoya ¾ José Mª Peña SánchezMª de los Santos Pérez Hernández

Sistemas Distribuidos65

Objetos distribuidos

• Minimizar las diferencias de programación entre las invocaciones de métodos remotos y las llamadas a métodos locales

• Ocultar las diferencias existentes:– Tratamiento del empaquetamiento de los datos (marshalling)– Sincronización de los eventos– Las diferencias deben quedar ocultas en la arquitectura

Page 66: SD comunicacion 2020 - laurel.datsi.fi.upm.es · Fernando Pérez Costoya ¾José Mª Peña Sánchez Mª de los Santos Pérez Hernández Sistemas Distribuidos 6 Escenarios de Zero-Copy

Fernando Pérez Costoya ¾ José Mª Peña SánchezMª de los Santos Pérez Hernández

Sistemas Distribuidos

Java RMI

Page 67: SD comunicacion 2020 - laurel.datsi.fi.upm.es · Fernando Pérez Costoya ¾José Mª Peña Sánchez Mª de los Santos Pérez Hernández Sistemas Distribuidos 6 Escenarios de Zero-Copy

Fernando Pérez Costoya ¾ José Mª Peña SánchezMª de los Santos Pérez Hernández

Sistemas Distribuidos67

Java RMI

Java: Write Once, Run AnywhereJava RMI extiende el modelo Java para la filosofía “Run

Everywhere”

Guía para la programación en Java RMI:http://laurel.datsi.fi.upm.es/~ssoo/SD.dir/practicas/guiarmi.html

Page 68: SD comunicacion 2020 - laurel.datsi.fi.upm.es · Fernando Pérez Costoya ¾José Mª Peña Sánchez Mª de los Santos Pérez Hernández Sistemas Distribuidos 6 Escenarios de Zero-Copy

Fernando Pérez Costoya ¾ José Mª Peña SánchezMª de los Santos Pérez Hernández

Sistemas Distribuidos68

Arquitectura de Java RMI

Service Directory

Page 69: SD comunicacion 2020 - laurel.datsi.fi.upm.es · Fernando Pérez Costoya ¾José Mª Peña Sánchez Mª de los Santos Pérez Hernández Sistemas Distribuidos 6 Escenarios de Zero-Copy

Fernando Pérez Costoya ¾ José Mª Peña SánchezMª de los Santos Pérez Hernández

Sistemas Distribuidos69

Arquitectura de Java RMI

Nivel de resguardo/esqueleto (proxy/skeleton) que se encarga del aplanamiento (serialización) de los parámetrosproxy: resguardo local. Cuando un cliente realiza una invocación

remota, en realidad hace una invocación de un método del resguardo local.

Esqueleto (skeleton): recibe las peticiones de los clientes, realiza la invocación del método y devuelve los resultados.

Nivel de gestión de referencias remotas: interpreta y gestiona las referencias a los objetos de servicio remoto

Nivel de transporte: se encarga de las comunicaciones y de establecer las conexiones necesarias. Basada en TCP (orientada a conexión)

Page 70: SD comunicacion 2020 - laurel.datsi.fi.upm.es · Fernando Pérez Costoya ¾José Mª Peña Sánchez Mª de los Santos Pérez Hernández Sistemas Distribuidos 6 Escenarios de Zero-Copy

Fernando Pérez Costoya ¾ José Mª Peña SánchezMª de los Santos Pérez Hernández

Sistemas Distribuidos70

Servicio de directorios

Se pueden utilizar diferentes servicios de directorios para registrar un objeto distribuidoEjemplo: JNDI (Java Naming and Directory Interface)

El registro RMI, rmiregistry, es un servicio de directorios sencillo proporcionado por SDK (Java Software Development Kit)

Page 71: SD comunicacion 2020 - laurel.datsi.fi.upm.es · Fernando Pérez Costoya ¾José Mª Peña Sánchez Mª de los Santos Pérez Hernández Sistemas Distribuidos 6 Escenarios de Zero-Copy

Fernando Pérez Costoya ¾ José Mª Peña SánchezMª de los Santos Pérez Hernández

Sistemas Distribuidos71

Java RMI

El soporte para RMI en Java está basado en las interfaces y clases definidas en los paquetes:

java.rmijava.rmi.server

Características de Java RMI:Se basa en una interfaz remota Java (hereda de la clase Java Remote).Es necesario tratar mayor número de excepciones que en el caso de

invocación de métodos locales Errores en la comunicación entre los procesos (fallos de acceso, fallos de

conexión)Problemas asociados a la invocación de métodos remotos (no encontrar

el objeto, el resguardo o el esqueleto)Los métodos deben especificar la excepción RemoteException.

Page 72: SD comunicacion 2020 - laurel.datsi.fi.upm.es · Fernando Pérez Costoya ¾José Mª Peña Sánchez Mª de los Santos Pérez Hernández Sistemas Distribuidos 6 Escenarios de Zero-Copy

Fernando Pérez Costoya ¾ José Mª Peña SánchezMª de los Santos Pérez Hernández

Sistemas Distribuidos72

Ejemplo de interfaz remota Java

public interface InterfazEj extends java.rmi.Remote

{public String metodoEj1()

throws java.rmi.RemoteException;public int metodoEj2(float param)

throws java.rmi.RemoteException;}

Page 73: SD comunicacion 2020 - laurel.datsi.fi.upm.es · Fernando Pérez Costoya ¾José Mª Peña Sánchez Mª de los Santos Pérez Hernández Sistemas Distribuidos 6 Escenarios de Zero-Copy

Fernando Pérez Costoya ¾ José Mª Peña SánchezMª de los Santos Pérez Hernández

Sistemas Distribuidos73

Java RMI

Localización de objetos remotos:Servidor de nombres: java.rmi.Naming

Ejemplo:Cuenta cnt = new CuentaImpl();String url = “rmi://java.Sun.COM/cuenta”;// enlazamos una url a un objeto remotojava.rmi.Naming.bind(url, cnt);

....// búsqueda de la cuentacnt=(Cuenta)java.rmi.Naming.lookup(url);

Page 74: SD comunicacion 2020 - laurel.datsi.fi.upm.es · Fernando Pérez Costoya ¾José Mª Peña Sánchez Mª de los Santos Pérez Hernández Sistemas Distribuidos 6 Escenarios de Zero-Copy

Fernando Pérez Costoya ¾ José Mª Peña SánchezMª de los Santos Pérez Hernández

Sistemas Distribuidos74

Desarrollo de Aplicaciones RMIDefinición de la interfaz remota

javac

(.java)

1

2

3

4

10

95

6

7

8

(.java)

usaCliente

EjectuarCliente

(.class)

CLIENTE SERVIDOR

(.class)

Esqueleto(.class)

Implementación de la interfaz remota

Esqueleto(.class)

Servidor (.class)

Arrancar RMIRegistry

Crear los objetos

Registrar los objetos

javac

rmic

No necesario apartir de Java 1.5

Page 75: SD comunicacion 2020 - laurel.datsi.fi.upm.es · Fernando Pérez Costoya ¾José Mª Peña Sánchez Mª de los Santos Pérez Hernández Sistemas Distribuidos 6 Escenarios de Zero-Copy

Fernando Pérez Costoya ¾ José Mª Peña SánchezMª de los Santos Pérez Hernández

Sistemas Distribuidos75

Ejemplo

Page 76: SD comunicacion 2020 - laurel.datsi.fi.upm.es · Fernando Pérez Costoya ¾José Mª Peña Sánchez Mª de los Santos Pérez Hernández Sistemas Distribuidos 6 Escenarios de Zero-Copy

Fernando Pérez Costoya ¾ José Mª Peña SánchezMª de los Santos Pérez Hernández

Sistemas Distribuidos76

Modelización de la interfaz remota (Sumador)

public interface Sumador extends java.rmi.Remote{

public int sumar(int a, int b)throws java.rmi.RemoteException;

}

Page 77: SD comunicacion 2020 - laurel.datsi.fi.upm.es · Fernando Pérez Costoya ¾José Mª Peña Sánchez Mª de los Santos Pérez Hernández Sistemas Distribuidos 6 Escenarios de Zero-Copy

Fernando Pérez Costoya ¾ José Mª Peña SánchezMª de los Santos Pérez Hernández

Sistemas Distribuidos77

Clase que implementa la interfaz (SumadorImpl)

import java.rmi.*;

import java.rmi.server.UnicastRemoteObject;

public class SumadorImpl extends UnicastRemoteObject implementsSumador {

public SumadorImpl(String name) throws RemoteException {

super();

try {

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

Naming.rebind(name, this);

} catch (Exception e){

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

e.printStackTrace();

}

}

public int sumar (int a, int b) throws RemoteException {

return a + b;

}

}

Page 78: SD comunicacion 2020 - laurel.datsi.fi.upm.es · Fernando Pérez Costoya ¾José Mª Peña Sánchez Mª de los Santos Pérez Hernández Sistemas Distribuidos 6 Escenarios de Zero-Copy

Fernando Pérez Costoya ¾ José Mª Peña SánchezMª de los Santos Pérez Hernández

Sistemas Distribuidos78

Código del servidor (SumadorServer)

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

public class SumadorServer {public static void main (String args[]) {

try {SumadorImpl misuma = new

SumadorImpl(“rmi://localhost:1099”+”/MiSumador");

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

e); }

}}

Page 79: SD comunicacion 2020 - laurel.datsi.fi.upm.es · Fernando Pérez Costoya ¾José Mª Peña Sánchez Mª de los Santos Pérez Hernández Sistemas Distribuidos 6 Escenarios de Zero-Copy

Fernando Pérez Costoya ¾ José Mª Peña SánchezMª de los Santos Pérez Hernández

Sistemas Distribuidos79

Registro del servicio

Antes de arrancar el cliente y el servidor, se debe arrancar el programa rmiregistry en el servidor para el servicio de nombres. El puerto que utiliza el rmiregistry por defecto es el 1099.rmiregistry [port_number]

El método rebind es utilizado normalmente en lugar del método bind, porque garantiza que si un objeto remoto se registró previamente con dicho nombre, el nuevo objeto reemplazará al antiguo.

El método rebind almacena en el registro una referencia al objeto con un URL de la forma:

rmi://<nombre máquina>:<número puerto>/<nombre referencia>

Page 80: SD comunicacion 2020 - laurel.datsi.fi.upm.es · Fernando Pérez Costoya ¾José Mª Peña Sánchez Mª de los Santos Pérez Hernández Sistemas Distribuidos 6 Escenarios de Zero-Copy

Fernando Pérez Costoya ¾ José Mª Peña SánchezMª de los Santos Pérez Hernández

Sistemas Distribuidos80

Código en el cliente (SumadorClient)

import java.rmi.registry.*;

import java.rmi.server.*;

import java.rmi.*;

public class SumadorClient {

public static void main(String args[]){

int res = 0;

try {

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 81: SD comunicacion 2020 - laurel.datsi.fi.upm.es · Fernando Pérez Costoya ¾José Mª Peña Sánchez Mª de los Santos Pérez Hernández Sistemas Distribuidos 6 Escenarios de Zero-Copy

Fernando Pérez Costoya ¾ José Mª Peña SánchezMª de los Santos Pérez Hernández

Sistemas Distribuidos81

Búsqueda

Cualquier programa que quiera instanciar un objeto remoto debe realizar una búsqueda de la siguiente forma:Sumador misuma = (Sumador)Naming.lookup("rmi://" + args[0] +

"/" +"MiSumador");El método lookup devuelve una referencia remota a un objeto

que implementa la interfaz remota.El método lookup interactúa con rmiregistry.

Page 82: SD comunicacion 2020 - laurel.datsi.fi.upm.es · Fernando Pérez Costoya ¾José Mª Peña Sánchez Mª de los Santos Pérez Hernández Sistemas Distribuidos 6 Escenarios de Zero-Copy

Fernando Pérez Costoya ¾ José Mª Peña SánchezMª de los Santos Pérez Hernández

Sistemas Distribuidos82

Pasos

Java RMI:Enlace a un nombre: bind(), rebind()Encontrar un objeto y obtener su referencia: lookup()refObj.nombre_met()

Page 83: SD comunicacion 2020 - laurel.datsi.fi.upm.es · Fernando Pérez Costoya ¾José Mª Peña Sánchez Mª de los Santos Pérez Hernández Sistemas Distribuidos 6 Escenarios de Zero-Copy

Fernando Pérez Costoya ¾ José Mª Peña SánchezMª de los Santos Pérez Hernández

Sistemas Distribuidos83

Cuadro general

Cliente Servidor

Stub Skeleton

Red

op1

op2

opN

Page 84: SD comunicacion 2020 - laurel.datsi.fi.upm.es · Fernando Pérez Costoya ¾José Mª Peña Sánchez Mª de los Santos Pérez Hernández Sistemas Distribuidos 6 Escenarios de Zero-Copy

Fernando Pérez Costoya ¾ José Mª Peña SánchezMª de los Santos Pérez Hernández

Sistemas Distribuidos84

¿Cómo se ejecuta?

Compilaciónjavac Sumador.javajavac SumadorImpl.javajavac SumadorClient.javajavac SumadorServer.java

Generación de los esqueletos (No necesario a partir de Java 1.5)rmic SumadorImpl

Ejecución del programa de registro de RMIrmiregistry <número puerto>Por defecto, el número de puerto es el 1099

Ejecución del servidorjava SumadorServer

Ejecución del clientejava SumadorCliente <host-del-servidor>

Page 85: SD comunicacion 2020 - laurel.datsi.fi.upm.es · Fernando Pérez Costoya ¾José Mª Peña Sánchez Mª de los Santos Pérez Hernández Sistemas Distribuidos 6 Escenarios de Zero-Copy

Fernando Pérez Costoya ¾ José Mª Peña SánchezMª de los Santos Pérez Hernández

Sistemas Distribuidos85

Seguridad en Java RMI (Servidor)import java.rmi.*;import java.rmi.server.*;public class SumadorServerSeg {

public static void main (String args[]) {if (System.getSecurityManager() == null) {

System.setSecurityManager(new SecurityManager());}try {

SumadorImpl misuma = new SumadorImpl("rmi://localhost:1099" +"/MiSumador");} catch(Exception e) {

System.err.println("System exception" + e);}

}}

Page 86: SD comunicacion 2020 - laurel.datsi.fi.upm.es · Fernando Pérez Costoya ¾José Mª Peña Sánchez Mª de los Santos Pérez Hernández Sistemas Distribuidos 6 Escenarios de Zero-Copy

Fernando Pérez Costoya ¾ José Mª Peña SánchezMª de los Santos Pérez Hernández

Sistemas Distribuidos86

Seguridad en Java RMI (Cliente)import java.rmi.registry.*;

import java.rmi.server.*;

import java.rmi.*;

public class SumadorClientSeg {

public static void main(String args[]){

int res = 0;

if (System.getSecurityManager() == null)

System.setSecurityManager(new SecurityManager());

try {

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

}

}

Page 87: SD comunicacion 2020 - laurel.datsi.fi.upm.es · Fernando Pérez Costoya ¾José Mª Peña Sánchez Mª de los Santos Pérez Hernández Sistemas Distribuidos 6 Escenarios de Zero-Copy

Fernando Pérez Costoya ¾ José Mª Peña SánchezMª de los Santos Pérez Hernández

Seguridad en Java RMI

En el código del servidor se puede instanciar un gestor de seguridad. Para ejemplos sencillos, podría eliminarse esta parte del código del servidor (y del cliente) pero es conveniente su uso para controlar mejor la seguridad y es un requisito en caso de que la aplicación requiera carga dinámica de clases.

Ficheros servidor.permisos y cliente.permisos:grant {

permission java.security.AllPermission; };

Ejecución:java -Djava.security.policy=servidor.permisos SumadorServerSeg

java -Djava.security.policy=cliente.permisos SumadorClientSeglocalhost

Sistemas Distribuidos87

Page 88: SD comunicacion 2020 - laurel.datsi.fi.upm.es · Fernando Pérez Costoya ¾José Mª Peña Sánchez Mª de los Santos Pérez Hernández Sistemas Distribuidos 6 Escenarios de Zero-Copy

Fernando Pérez Costoya ¾ José Mª Peña SánchezMª de los Santos Pérez Hernández

Sistemas Distribuidos88

Callback de cliente

Hay escenarios en los que los servidores deben notificar a los clientes la ocurrencia de algún evento. Ejemplo: chat.Problema: llamada a método remoto es unidireccional

Posibles soluciones:Sondeo (polling): Cada cliente realiza un sondeo al servidor, invocando

repetidas veces un método, hasta que éste devuelva un valor true.Problema: Técnica muy costosa (recursos del sistema)

Callback: Cada cliente interesado en la ocurrencia de un evento se registra a sí mismo con el servidor, de modo que el servidor inicia una invocación de un método remoto del cliente cuando ocurra dicho evento.

Las invocaciones de los métodos remotos se convierten en bidireccionales

Page 89: SD comunicacion 2020 - laurel.datsi.fi.upm.es · Fernando Pérez Costoya ¾José Mª Peña Sánchez Mª de los Santos Pérez Hernández Sistemas Distribuidos 6 Escenarios de Zero-Copy

Fernando Pérez Costoya ¾ José Mª Peña SánchezMª de los Santos Pérez Hernández

Sistemas Distribuidos89

Extensión de la parte cliente para callback de cliente

El cliente debe proporcionar una interfaz remota: Interfaz remota de clientepublic interface CallbackClient extends java.rmi.Remote {

public String notificame (String mensaje) throwsjava.rmi.RemoteException;

}

Es necesario implementar la interfaz remota de cliente, de forma análoga a la interfaz de servidor (CallbackClientImpl)

En la clase cliente se debe añadir código para que instancie un objeto de la implementación de la interfaz remota de cliente y que se registre para callback (método implementado por el servidor):CallbackServer cs = (CallbackServer) Naming.lookup(URLregistro);CallbackClient objCallback = new CallbackClientImpl();cs.registrarCallback(objCallback);

Page 90: SD comunicacion 2020 - laurel.datsi.fi.upm.es · Fernando Pérez Costoya ¾José Mª Peña Sánchez Mª de los Santos Pérez Hernández Sistemas Distribuidos 6 Escenarios de Zero-Copy

Fernando Pérez Costoya ¾ José Mª Peña SánchezMª de los Santos Pérez Hernández

Sistemas Distribuidos90

Extensión de la parte servidora para callback de cliente

Añadir el método remoto para que el cliente se registre para callback

public void registrarCallback (CallbackClientobjCallbackClient) throws java.rmi.RemoteException;

Se puede proporcionar un método eliminarRegistroCallbackpara poder cancelar el registro

Ambos métodos modifican una estructura común (por ejemplo, un objeto Vector) que contiene referencias a los callbacks de clientes. Se utilizan métodos synchronized para acceder a la estructura en exclusión mutua.

Page 91: SD comunicacion 2020 - laurel.datsi.fi.upm.es · Fernando Pérez Costoya ¾José Mª Peña Sánchez Mª de los Santos Pérez Hernández Sistemas Distribuidos 6 Escenarios de Zero-Copy

Fernando Pérez Costoya ¾ José Mª Peña SánchezMª de los Santos Pérez Hernández

Sistemas Distribuidos91

Ejemplo (Sumador con callback)

Notificación cuando res=10

Page 92: SD comunicacion 2020 - laurel.datsi.fi.upm.es · Fernando Pérez Costoya ¾José Mª Peña Sánchez Mª de los Santos Pérez Hernández Sistemas Distribuidos 6 Escenarios de Zero-Copy

Fernando Pérez Costoya ¾ José Mª Peña SánchezMª de los Santos Pérez Hernández

Sistemas Distribuidos92

Modelización de la interfaz remota (SumadorNot)

public interface SumadorNot extends java.rmi.Remote{

public int sumar(int a, int b)throws java.rmi.RemoteException;

public void registrarCallback (SumadorClientCallbackobjCallbackClient) throws java.rmi.RemoteException;

public void eliminarRegistroCallback(SumadorClientCallback objCallbackClient) throwsjava.rmi.RemoteException;

}

Page 93: SD comunicacion 2020 - laurel.datsi.fi.upm.es · Fernando Pérez Costoya ¾José Mª Peña Sánchez Mª de los Santos Pérez Hernández Sistemas Distribuidos 6 Escenarios de Zero-Copy

Fernando Pérez Costoya ¾ José Mª Peña SánchezMª de los Santos Pérez Hernández

Sistemas Distribuidos93

Modelización de la interfaz remota del cliente (SumadorClientCallback)

public interface SumadorClientCallback extendsjava.rmi.Remote {public String notificame (String mensaje) throwsjava.rmi.RemoteException;

}

Page 94: SD comunicacion 2020 - laurel.datsi.fi.upm.es · Fernando Pérez Costoya ¾José Mª Peña Sánchez Mª de los Santos Pérez Hernández Sistemas Distribuidos 6 Escenarios de Zero-Copy

Fernando Pérez Costoya ¾ José Mª Peña SánchezMª de los Santos Pérez Hernández

Sistemas Distribuidos94

Clase que implementa la primera interfaz (SumadorServerCallbackImpl)

import java.rmi.*;

import java.rmi.server.UnicastRemoteObject;

import java.util.Vector;

import java.util.Enumeration;

public class SumadorServerCallbackImpl extends UnicastRemoteObjectimplements SumadorNot

private Vector<SumadorClientCallback> v;

public SumadorServerCallbackImpl(String name) throwsRemoteException {

super();

try {

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

Naming.rebind(name, this);

} catch (Exception e){

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

e.printStackTrace();

}

v = new Vector<SumadorClientCallback>(5);

}

Page 95: SD comunicacion 2020 - laurel.datsi.fi.upm.es · Fernando Pérez Costoya ¾José Mª Peña Sánchez Mª de los Santos Pérez Hernández Sistemas Distribuidos 6 Escenarios de Zero-Copy

Fernando Pérez Costoya ¾ José Mª Peña SánchezMª de los Santos Pérez Hernández

Sistemas Distribuidos95

Clase que implementa la primera interfaz (SumadorServerCallbackImpl)

public synchronized int sumar (int a, int b) throws RemoteException {int res = a + b;SumadorClientCallback obj;Enumeration en;

if (res ==10){en =v.elements();while(en.hasMoreElements()){

obj = (SumadorClientCallback) en.nextElement();

System.out.println(obj.notificame("Resultado igual a 10"));

}}

return res;}

Page 96: SD comunicacion 2020 - laurel.datsi.fi.upm.es · Fernando Pérez Costoya ¾José Mª Peña Sánchez Mª de los Santos Pérez Hernández Sistemas Distribuidos 6 Escenarios de Zero-Copy

Fernando Pérez Costoya ¾ José Mª Peña SánchezMª de los Santos Pérez Hernández

Sistemas Distribuidos96

Clase que implementa la primera interfaz (SumadorServerCallbackImpl)

public synchronized void registrarCallback(SumadorClientCallback objCallbackClient) throwsjava.rmi.RemoteException{

v.addElement(objCallbackClient);}

public synchronized void eliminarRegistroCallback(SumadorClientCallback objCallbackClient) throwsjava.rmi.RemoteException{

v.remove(objCallbackClient);}

}

Page 97: SD comunicacion 2020 - laurel.datsi.fi.upm.es · Fernando Pérez Costoya ¾José Mª Peña Sánchez Mª de los Santos Pérez Hernández Sistemas Distribuidos 6 Escenarios de Zero-Copy

Fernando Pérez Costoya ¾ José Mª Peña SánchezMª de los Santos Pérez Hernández

Sistemas Distribuidos97

Código del servidor (SumadorServerNot)

import java.rmi.*;import java.rmi.server.*;public class SumadorServerNot {

public static void main (String args[]) {try {SumadorNot misuma = new

SumadorServerCallbackImpl("rmi://localhost:1099" +"/MiSumador");

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

+ e);}

}}

Page 98: SD comunicacion 2020 - laurel.datsi.fi.upm.es · Fernando Pérez Costoya ¾José Mª Peña Sánchez Mª de los Santos Pérez Hernández Sistemas Distribuidos 6 Escenarios de Zero-Copy

Fernando Pérez Costoya ¾ José Mª Peña SánchezMª de los Santos Pérez Hernández

Sistemas Distribuidos98

Clase que implementa la segunda interfaz (SumadorClientCallbackImpl)

import java.rmi.*;

import java.rmi.server.UnicastRemoteObject;public class SumadorClientCallbackImpl extends

UnicastRemoteObject implements SumadorClientCallback {public SumadorClientCallbackImpl() throws RemoteException{

super();}

public String notificame (String mensaje) throwsRemoteException {

String msj = "Notificacion: " + mensaje;

System.out.println(msj);return msj;

}}

Page 99: SD comunicacion 2020 - laurel.datsi.fi.upm.es · Fernando Pérez Costoya ¾José Mª Peña Sánchez Mª de los Santos Pérez Hernández Sistemas Distribuidos 6 Escenarios de Zero-Copy

Fernando Pérez Costoya ¾ José Mª Peña SánchezMª de los Santos Pérez Hernández

Sistemas Distribuidos99

Código en el cliente (SumadorClientNot)

import java.rmi.registry.*;

import java.rmi.server.*;import java.rmi.*;import java.util.Scanner;public class SumadorClientNot {

public static void main(String args[]){

int res = 0, a, b;Scanner in = new Scanner(System.in);try {

SumadorClientCallback objCallback = new SumadorClientCallbackImpl();

System.out.println("Buscando Objeto ");SumadorNot misuma =

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

misuma.registrarCallback(objCallback);

Page 100: SD comunicacion 2020 - laurel.datsi.fi.upm.es · Fernando Pérez Costoya ¾José Mª Peña Sánchez Mª de los Santos Pérez Hernández Sistemas Distribuidos 6 Escenarios de Zero-Copy

Fernando Pérez Costoya ¾ José Mª Peña SánchezMª de los Santos Pérez Hernández

Sistemas Distribuidos100

Código en el cliente (SumadorClientNot)

while (res != 10){

System.out.println("Introducir primer sumando");a = in.nextInt();System.out.println("Introducir segundo sumando");b = in.nextInt();res = misuma.sumar(a, b);

System.out.println("" + a + "+" + b+ "=" + res);}misuma.eliminarRegistroCallback(objCallback);

}

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

}

}

Page 101: SD comunicacion 2020 - laurel.datsi.fi.upm.es · Fernando Pérez Costoya ¾José Mª Peña Sánchez Mª de los Santos Pérez Hernández Sistemas Distribuidos 6 Escenarios de Zero-Copy

Fernando Pérez Costoya ¾ José Mª Peña SánchezMª de los Santos Pérez Hernández

Sistemas Distribuidos101

Descarga dinámica de resguardo

Mecanismo que permite que los clientes obtengan dinámicamente los resguardos necesariosElimina la necesidad de copia de la clase del resguardo en la máquina

clienteSe transmite bajo demanda desde un servidor web a la máquina cliente

(Similar a la descarga de los applets)El servidor exporta un objeto a través del registro RMI (registro

de una referencia remota al objeto mediante nombre simbólico) e indica el URL donde se almacena la clase resguardo.

La clase resguardo descargada no es persistenteSe libera cuando la sesión del cliente finaliza

Page 102: SD comunicacion 2020 - laurel.datsi.fi.upm.es · Fernando Pérez Costoya ¾José Mª Peña Sánchez Mª de los Santos Pérez Hernández Sistemas Distribuidos 6 Escenarios de Zero-Copy

Fernando Pérez Costoya ¾ José Mª Peña SánchezMª de los Santos Pérez Hernández

Sistemas Distribuidos102

Comparativa RMI vs Sockets

Los sockets están más cercanos al sistema operativo, lo que implica una menor sobrecarga de ejecución.

RMI proporciona mayor abstracción, lo que facilita el desarrollo de software. RMI es un buen candidato para el desarrollo de prototipos.

Los sockets suelen ser independientes de plataforma y lenguaje.