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