Llamadas a Procedimientos Remotos (RPC) RPC Conceptos

Anuncio
RPC
Llamadas a Procedimientos
Remotos
(RPC)
Conceptos
? Generación de Programas Distribuidos
(Concepto de RPCGEN)
? Ejemplo
?
Basado en el libro Internetworking with TCP/IP. Vol III.
D. E Comer y D. Stevens
Algunas Ilustraciones se tomaron de Practical Unix
Programming. K. Robbins y Robbins
1
Comer & Stevens
M. Curiel
2
Comer & Stevens
M. Curiel
Paradigmas
?
Conceptos
Diseño orientado a comunicaciones
?
?
?
?
?
Comer & Stevens
M. Curiel
4
cómo el cliente y el servidor reaccionan y responden
a los mensajes
Diseño orientado a la aplicación
?
3
Se comienza con el protocolo
Se diseña el formato de los mensajes y
Se diseña una aplicación para resolver el problema.
Se hacen pruebas en una sola máquina
Se divide el programa en varias piezas que se
ejecutarán en distintos computadores y se añade el
protocolo.
Comer & Stevens
Llamadas al Sistema
Modelo Conceptual
M. Curiel
Espacio usuario
Programa usuario
llamada
Subrutinas
Espacio Usuario
proc2
trap
Retorno del trap
func(void ){
proc3
}
}
proc5
Función de librería
sys_func(void ){
sys_func()
func()
proc1
Espacio del Kernel
Espacio Usuario
main
retorno
System call
proc6
Thread de ejecuci ón
Espacio del kernel
Thread bloqueado
Thread de ejecuci ón
Trap-return
5
Comer & Stevens
M. Curiel
6
Comer & Stevens
M. Curiel
1
Proceso en el Servidor
Proceso en el Cliente
Programa Distribuido
Computador1
Comp. local
Comp. remoto
Cliente
Funciones del
Servidor
Cliente
llamada
Remota
Funciones del Serv.
retorno
Llamada
y retorno lógico
main
Computador2
func()
proc2
proc4
retorno
func(void ){
Req.
Marshaled
}
proc1
llamada
Stub del Servidor
Stub del Cliente
Retorno
Marshaled
Req.
Marshaled
Retorno
Marshaled
proc3
Servicios de
red
proc5
Red
Servicios de
red
Thread de ejecuci ón
Thread bloqueado
kernel del cliente
Kernel del servidor
Llamada a proc.
remota
RPC (Remote Procedure Call)
?
9
RPC y Procedimientos Locales
Es una poderosa técnica para el
desarrollo de aplicaciones distribuidas,
basadas en el paradigma cliente/servidor.
Extiende la noción de llamadas a
procedimientos locales, de forma tal que
el procedimiento llamado no tiene que
estar en la misma máquina donde reside
el llamador.
Comer & Stevens
M. Curiel
?
?
?
10
En RPC se transfiere el control al procedimiento
llamado. El llamador se suspende.
La respuesta del servidor es análoga al
return(). El flujo de control vuelve al llamador y
el llamado deja de ejecutarse.
Existen llamadas anidadas: un procedimiento
remoto puede llamar a otro. El Servidor se
convierte en cliente de otro servicio.
Comer & Stevens
RPC y Procedimientos Locales
(cont.)
RPC y Procedimientos Locales
(cont.)
Un procedimiento convencional
permanece inactivo. El proceso servidor
existe en el sistema remoto y está
esperando solicitudes de sus clientes.
? Un procedimiento convencional acepta
pocos argumentos y retorna pocos
resultados. Un servidor acepta y retorna
cantidades arbitrarias de datos.
?
RPCs pueden ser varios ordenes de
magnitud más lentas que una llamada
local.
? Se pueden pasar apuntadores como
argumentos de procedimientos locales.
Un procedimiento remoto opera en un
espacio de direcciones distinto. No se
pueden pasar apuntadores .
?
11
Comer & Stevens
M. Curiel
M. Curiel
12
Comer & Stevens
M. Curiel
2
RPC y Procedimientos Locales
(cont.)
?
SUN RPC: Definición
El procedimiento remoto no comparte el
ambiente del llamador. No tiene acceso
directo a los descriptores de archivo o a
las funciones del SOP.
?
?
?
?
13
Comer & Stevens
M. Curiel
Define:
?
El formato de los mensajes que el cliente (llamador)
envía al invocar un procedimiento remoto.
?
El formato de los resultados
Permite al programador usar TCP o UDP
Usa XDR (external data representation)
Ofrece un compilador que facilita el desarrollo
del programa
14
Comer & Stevens
Programas remotos
Programas remotos
Un programa remoto es la unidad básica
de software que se ejecuta en un
computador remoto. Equivale al servidor.
? Se compone de un conjunto de
procedimientos y datos globales
?
Argumentos: se pasan en una estructura
(struct de C).
? Identificación:
?
proc1
proc2
A cada programa se le asigna un identificador
de 32 bits
? A cada procedimiento se le asigna un número
entero: 1,2,..N.
? También se incluye un número de versión.
?
proc3
Datos Globales Compartidos
15
Comer & Stevens
(prog,vers, proc)
M. Curiel
Programas remotos
?
?
16
?
Semántica de Comunicación: permite elegir
?
M. Curiel
18
Si una llamada a procedimiento remota
retorna, el llamador puede concluir que el
procedimiento se invocó al menos una vez.
Cero o más veces:
?
Comer & Stevens
M. Curiel
Al menos una vez
?
Como máximo se puede invocar un
procedimiento en un programa remoto
(exclusión mutua entre procedimientos)
entre
? TCP: confiable
? UDP: eficiente
17
Comer & Stevens
Programas remotos
Exclusión Mutua:
?
M. Curiel
Si una llamada a proc. remota no retorna,
éste pudo haber sido invocado cero o más
veces. Cada llamada a procedimiento debe
ser idempotente.
Comer & Stevens
M. Curiel
3
¨Mapping¨ entre un programa remoto
Programas remotos
?
y un puerto
?
Retransmisiones:
?
Existe una estrategia de retransmisión sencilla
basada en timeouts.
?
Los timeouts no se adaptan a las condiciones de la
red.
El software en la máquina del llamador puede,
después de varios intentos, declarar que el
procedimiento remoto no se pudo ejecutar. Esto no
garantiza que nunca se ejecutó.
?
?
?
?
?
19
Comer & Stevens
M. Curiel
20
Para hacer posible la comunicación, a cada
servicio se le asigna un número de puerto que
conocen todos los clientes.
Programas RPC (32 bits), puertos (16 bits).
Los programas remotos obtienen puertos
dinámicamente. Las asignaciones son
temporales.
El servidor, cuando inicia su ejecución,
pregunta al sistema por un puerto.
El sistema puede elegir cada vez un número de
puerto diferente.
Comer & Stevens
M. Curiel
¨Mapping¨ entre un programa remoto
¨Mapping¨ entre un programa remoto
y un puerto
y un puerto
?
?
?
?
Al no conocer el puerto, el cliente no puede
contactar al servidor directamente.
El cliente sólo conoce el host y el número de
programa. Debe ser capaz de obtener el puerto
asignado al servidor.
El ¨mapping¨ o asociación se debe hacer de
forma dinámica.
RPC incluye un servicio de asociación dinámica.
?
Cada máquina que ofrece un programa RPC
con un mecanismo que permite al cliente
obtener el número de puerto del servidor: port
mapper.
Server:
Programa
RPC
Puerto que
Usa el servidor remoto
21
Comer & Stevens
M. Curiel
22
Server registra
(programa, puerto)
Port
Mapper
Puerto bien conocido
Comer & Stevens
M. Curiel
¨Mapping¨ entre un programa remoto
Marshaling
y un puerto
?
?
Para transferir los argumentos entre
computadoras estos deben ser
representados con un formato externo.
Las listas, por ejemplo, deben colocarse
en una representación compacta
(marshaling).
? Los siguientes términos se usan para
denotar la tarea de codificar argumentos:
Cuando un servidor RPC comienza a
ejecutarse, solicita un puerto del sistema que
usa para sus comunicaciones
El servidor contacta al port mapper para añadir
la siguiente información a la BD:
?
(Nro. Programa, puerto)
Ahora los ¨llamadores¨ pueden saber el puerto
del servidor enviando un mensaje al port
mapper al puerto 111.
? Al saber el puerto el cliente puede contactar
23 directamente al servidor.
Comer & Stevens
?
marshal, linearize, serialize
M. Curiel
24
Comer & Stevens
M. Curiel
4
Mecanismos de programación
Generación de Programas
Distribuidos: RPCGEN
25
Comer & Stevens
M. Curiel
XDR (Interface Description
Language)
?
?
?
?
Sun RPC ofrece:
?
Rutinas para convertir datos simples y complejos al
formato XDR
?
Rutinas de librería para llamar un procedimiento
remoto, registrar un servicio con el port_mapper,
conducir una llamada al procedimiento adecuado
dentro del prog. remoto.
?
Una herramienta que produce programas fuentes en
C.
26
Comer & Stevens
M. Curiel
XDR
Similar a declaraciones en C, pero… son
lenguajes diferentes
Se ofrecen los tipos básicos: int, short,char long.
Números de doble precisión (float, double). El
tipo void.
Se da el soporte para tipos definidos por el
usuario: typedef, structs, unions, arrays, tipos
enumerados
Se definen tipos extra: bool, string
Enum Priority {
PRIO_LOW = 1;
PRIO_MED = 1;
PRIO_HIGH = 1;
};
Struct alarm {
Priority prio;
string text<>; /*
string de tamaño
variable */
}
?
Unions
Enum ReturnType {
RESULT_NAME = 1;
RESULT_CODE = 2;
};
Union Result switch(Return type){
case RESULT_NAME:
string name<>;
case RESULT_CODE:
int code;
default:
void;
};
rpcgen –h –N test.x > test.h
27
XDR
?
Listas
Comer & Stevens
?
Program PROG {
version PROG1 {
void PROG_PROC1( int a)
void PROG_PROC2(string
} = 1;
version PROG2 {
Program RPCDEMO {
void PROG_PROC1( int a,
version RPCDEMO_VERS_ORIG {
void PROG_PROC2(string
void RPCDEMO_PRINT(ListaPtr lp )
= 1;
} = 2;
} = 1;
} = 600000;
} = 600000;
Comer & Stevens
28
Comer & Stevens
M. Curiel
Rutinas de Librería
Especificación de los
programas
struct List {
List* next;
string data<>;
};
typedef List* ListPtr;
29
M. Curiel
Enviar un mensaje a un servidor:
= 1;
str<>) = 2;
int b) = 1;
str<>) = 2;
M. Curiel
clientrpc(host,prog, progver, procnum, inproc, im ,
outproc, out)
inproc: progrma que hace el marshaling de los
argumentos a enviar.
in: dirección de los argumentos
outproc: procedimiento local para hacer unmarshaling
de los resultados.
out:dirección en memoria donde se quedan los
resultados.
30
Comer & Stevens
M. Curiel
5
Rutinas de Librería
RPCGEN
Handle = cln_create (host,prog, ver, proto)
?
Crea un identificador que puede usarse para enviar
mensajes RPC.
Empaquetar los argumentos (marshaling)
Enviar un mensaje RPC
? Conducir (dipatch) una solicitud del cliente al
procedimiento adecuado.
? Enviar un reply
? Desempaquetar los argumentos
?
?
host, prog y ver: host, programa y versión.
proto: protocolo
31
Genera código para el cliente y el servidor
útil para:
Comer & Stevens
M. Curiel
32
Comer & Stevens
Programación Distribuida
Proc. B
Proc. A
Llamada remota
Los argumentos deben coincidir con los
parámetros formales.
? Hay que añadir código: los procedimientos
adicionales se llaman Stubs. En el cliente,
el stub reemplaza al procedimiento
llamado. En el servidor, reemplaza al
llamador.
?
33
M. Curiel
Comer & Stevens
M. Curiel
Stub del
Servidor
Stub del
Cliente
Proc. A1
Proc. A2
Stub C.
B2
Llamada remota
Proc.
B1
Proc.
B2
Stub S.
B1
Stub S.
B2
Stub C.
B1
Dispatcher
34
Comer & Stevens
M. Curiel
Proceso en el Servidor
Proceso en el Cliente
rdict.c
llamada
Remota
retorno
llamada
retorno
rdict
Req.
Marshaled
Retorno
Marshaled
Retorno
Marshaled
RPC
Servicios de
red
Cliente
rdict.h
rdict.x
kernel del cliente
Cliente
Iface
Comp.
C
rdict_clnt.c
Comm. servidor
Comm. Cliente
Servicios de
red
rdict_cif.c
Aplic.
Cliente
Infaz. servidor
Infaz. cliente
Stub del Cliente
Req.
Marshaled
Archivos
Funciones del Serv.
Cliente
Especificación
del programa
rpcgen
rdict_xdr.h
rdictd
Comp.
C
rdict_svc.h
Proc.
remotos
rdict_srp .c
Kernel del servidor
36
Comer & Stevens
Server
Iface
Servidor
Rdict_sif.c
M. Curiel
6
Pasos para el desarrollo de una aplicación
distribuida
Archivos de Salida
?
rdict.h = declaraciones de constantes y tipos
rdict_xdr.h = rutinas XDR para codificar los argumentos
rdict_clnt.c = Stub de comunicaciones del lado del cliente
rdict_svc.c = Stub de comunicaciones del lado del servidor
?
?
?
?
?
?
37
Comer & Stevens
M. Curiel
Desarrolle y pruebe una aplicación convencional
Elija un conjunto de procedimientos para colocarlos en
una máquina remota. Colóquelos en un archivo
separado.
Escriba la especificación para rpcgen y ejecute rpcgen
Escriba las interfaces para cliente y servidor
Genere el ejecutable del cliente: aplicación, stubs,
rutinas XDR
Genere el ejecutable del servidor: stubs,
procedimientos, rutinas XDR.
Ejecute el servidor en una máquina remota. Ejecute el
cliente.
38
Comer & Stevens
M. Curiel
main
Ejemplo
nextin
Comando
Argumento
I
i
palabra
insertw
lookupw
initw
deletew
Función
Programa remoto en Comp2
Inicializa la BD. Elimina todas
las palabras
Inserta una palabra en la BD
Cliente en Comp1
initw
main
d
palabra
Elimina una palabra de la BD
l
palabra
Busca una palabra en la BD
insertw
deletew
q
39
nextin
Estructura
de datos
del
diccionario
lookupw
Termina el programa
Comer & Stevens
M. Curiel
7
Descargar