Se ha denunciado esta presentación.
Se está descargando tu SlideShare. ×
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
RPC (Remote Procedure Call)




            César Cury Vergara

          Roger Rodríguez Reyes




        Ing. John Ménd...
ÍNDICE

1. Middleware
             Definición
             Clasificación de los Middleware:
                 –   Orienta...
Palabras claves: Middleware, RPC, Stubs.

                                       Middleware

Definiciones:

[1] “Software ...
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Cargando en…3
×

Eche un vistazo a continuación

1 de 26 Anuncio

Más Contenido Relacionado

Presentaciones para usted (20)

Anuncio

Rpc te

  1. 1. RPC (Remote Procedure Call) César Cury Vergara Roger Rodríguez Reyes Ing. John Méndez Alandete Corporacion Universitaria del Caribe “CECAR” Facultad de Ingeniería Programa Ingeniería de Sistemas Asignatura Sistemas Distribuidos Sincelejo – Sucre Septiembre de 2010
  2. 2. ÍNDICE 1. Middleware  Definición  Clasificación de los Middleware: – Orientado a transacciones – Orientado a mensajes – Basado en RPC – Orientado a objetos – Basado en grupos 2. Remote Procedure Call(RPC)  Definiciones  Características  Arquitectura  Modelo  Ventajas y Desventajas con respecto a otros Middleware  ¿Cómo se logra la transparencia de acceso XDR (eXternal Data Representation)?  ¿Cómo se logra la transparencia de localización (binding)?  RPC Síncrono  RPC Asíncrono  Portmapper
  3. 3. Palabras claves: Middleware, RPC, Stubs. Middleware Definiciones: [1] “Software de conectividad que consiste en un conjunto de servicios que permiten interactuar a múltiples procesos que se ejecutan en distintas máquinas a través de la red”. [2] Conjunto de herramientas que proporcionan una manera uniforme de acceder a los recursos del sistema en todas las plataformas. [3] Capa de software que ejecuta sobre el sistema operativo local ofreciendo unos servicios distribuidos estandarizados. Podemos clasificar los middleware en cinco tipos representativos: orientado a transacciones, orientado a mensajes, basado en RPC, orientado a objetos distribuidos y orientado a grupos. En los siguientes apartados veremos cuáles son las características representativas de cada uno de ellos.
  4. 4. Middleware orientado a transacciones Este tipo de middleware facilita el desarrollo de sistemas que requieren transacciones distribuidas. La transacción asegura que un conjunto de operaciones se realicen en todos los nodos del sistema o en ninguno. Generalmente se utilizan en aplicaciones que requieren consistencia de estado entre componentes distribuidos. Middleware orientado a mensajes Este tipo de middleware facilita la comunicación mediante intercambio de mensajes. Los mensajes pueden ser utilizados para solicitar la ejecución de servicios remotos, para notificación distribuida de eventos, o para implementar sistemas basados en publicación- suscripción. Middleware basado en RPC Este tipo de middleware proporciona gestión eficiente de llamadas remotas a procedimiento (Remote Procedure Call --RPC). La principal ventaja de la RPC es que permite definir la interfaz de comunicación con los componentes mediante un lenguaje de definición de interfaz (Interface Definition Language --IDL). A partir de esta definición existen herramientas automáticas de generación de código que generan el código necesario para realizar el empaquetado/desempaquetado de los mensajes y gestionar la comunicación a través de la red. Además, la RPC tiene implementaciones ( bindings) para múltiples sistemas operativos y lenguajes de programación, aspecto que le convierten en una solución interesante para la programación de sistemas distribuidos multi-plataforma. Desde la perspectiva de los desarrolladores, la RPC además facilita la reutilización de código, ya que se utiliza de forma semejante a una llamada a procedimiento local. Middleware orientado a objetos El middleware orientado a objetos es una extensión del middleware orientado a RPC que agrega muchas características propias de los lenguajes de programación orientados a objetos. Estas extensiones incluyen soporte para herencia, referencias a objetos y soporte de excepciones. El middleware orientado a objetos comparte muchas de las ventajas atribuidas al middleware basado en RPC. De nuevo, el empaquetado y desempaquetado son generados automáticamente por los suplentes del cliente y del servidor, liberando al programador de esta tarea propensa al error. El middleware orientado a objetos soporta peticiones síncronas como mecanismo de comunicación por defecto. No obstante muchos sistemas
  5. 5. también incluyen soporte para comunicación asíncrona, transacciones distribuidas y mensajería, por lo que, en muchos aspectos, pueden utilizarse para sustituir cualquiera de los middleware descritos anteriormente. Esta combinación de características lo convierte en un middleware potente y flexible. Al igual que ocurre con los middleware orientados a RPC, el principal inconveniente de este tipo de middleware es la escalabilidad. Otro inconveniente es que este tipo de middleware no siempre puede utilizarse en entornos y lenguajes de programación no orientados a objetos, lo que da lugar a aplicaciones más complejas. Ejemplos representativos de este tipo de middleware son Java RMI, JavaBeans, DCOM, y CORBA. Java RMI y Enterprise JavaBeans de Sun Microsystems. Java RMI proporciona invocación remota de métodos en Java. Permite construir aplicaciones distribuidas donde la máquina virtual de Java (Java Virtual Machine --JVM) puede realizar invocación remota de objetos disponibles en otras JVM localizadas en otros nodos de la red. Java RMI también proporciona soporte dinámico para la serialización de objetos completos (para pasarlos como parámetros). Esta flexibilidad es posible gracias a la arquitectura de la máquina virtual de Java, simplificada enormemente por el uso un único lenguaje de programación. Distributed Component Object Model (DCOM) de Microsoft. DCOM permite a los componentes software comunicarse sobre una red usando instanciación de componentes e invocación de métodos remotos. El principal inconveniente de DCOM es que sólo está disponible en plataformas Windows. Common Object Request Broker Architecture (CORBA). CORBA es una especificación de la arquitectura middleware que proporciona soporte al paradigma de programación cliente-servidor orientada a objeto para sistemas distribuidos heterogéneos. CORBA oculta el acceso a objetos remotos mediante la invocación local sobre un representante (proxy) del objeto remoto. CORBA es parte de Object Management Architecture y ha sido definido por el Object Management Group (OMG). Middleware basado en grupos El simple intercambio de mensajes entre un emisor y un receptor, no es siempre un buen modelo de comunicación para un sistema distribuido. En muchas situaciones es más útil disponer de primitivas que permitan enviar datos desde un emisor a un grupo de procesos. Este tipo de comunicación es habitual en sistemas con requisitos de tolerancia a fallos, disponibilidad de servicio o reparto de carga. En estos casos, suele ser más sencillo diseñar la aplicación utilizando radiado de mensajes (multicast) en vez del envío punto a punto (unicast).
  6. 6. Remote Procedure Call (RPC) Definiciones:  Es el Middleware diseñado como servicio síncrono para permitir la gestión remota de redes. Esconde las operaciones de envío y recepción bajo el aspecto de una llamada convencional a una rutina o procedimiento. Los RPC tienen la misma semántica que las llamadas a procedimientos ordinarios; es decir, se realiza la llamada y se pasa el control al procedimiento servidor; cuando éste devuelve el resultado, el cliente recupera el control.  Es un protocolo que permite a un programa de ordenador ejecutar código en otra máquina remota sin tener que preocuparse por las comunicaciones entre ambas.  El RPC es una interfaz de programación de aplicación (API) disponible para el desarrollo de aplicaciones distribuidas. Permite que los programas llamen a subrutinas que se ejecutan en un sistema remoto.  Es una extensión del paradigma orientado a procedimientos (estructurado) que consiste en hacer transparente para el programador la ubicación de las funciones que invoca.  Es una técnica para el desarrollo de aplicaciones distribuidas, basadas en el paradigma Cliente/Servidor. Características:  Depende de la red y del estado del servidor, en consecuencia el manejo de errores debe considerar esta característica;  Una RPC opera en forma más lenta que una llamada a un procedimiento local;  Requiere de autenticación;  Puede ser implementado sobre UDP o TCP;  El espacio de memoria del cliente y servidor son independientes;  La transferencia de datos en una RPC puede darse entre máquinas de diferentes arquitecturas y sistemas operativos  XDR proporciona el estándar de codificación de datos (por ejemplo la longitud mínima de cualquier campo ha de ser de 32 bits)
  7. 7. Arquitectura RPC Figura 2. Arquitectura RPC. Elementos de la arquitectura RPC: Programa llamante, Programa llamado, Kernels (núcleos). Los stubs:  Son librerías que emplean los programadores.  Se generan de forma automática. Stub (Client): Es la representación del objeto remoto en la máquina local. Oculta todos los detalles de la red. El “stub” oculta los detalles de la referencia al objeto remoto, el empaquetado de los argumentos en un mensaje, el desempaquetado de los resultados y el envío y recepción de los mensajes desde el cliente. Stub (Server): Cuando llega un mensaje al servidor, el sistema operativo lo pasa al Stub Server del proceso destino. El Stub Server es un trozo de código que transforma las peticiones que le llegan de la red en llamadas a procedimientos locales. Antes de hacer la invocación local, el esqueleto desempaqueta los argumentos del mensaje que ha recibido y luego invoca el método correspondiente. El servidor realiza su trabajo y después devuelve el resultado de la forma habitual. Cuando el esqueleto recibe el control una vez que la ejecución del procedimiento finaliza, empaqueta el resultado en un mensaje de respuesta que envía al cliente.
  8. 8. Funciones de los Stubs (Client, Server)  El stub cliente debe: - Empaquetar los argumentos en un mensaje. - Enviar el mensaje de invocación al servidor. - Esperar el mensaje de respuesta. - Desempaquetar los resultados (argumentos de salida) del mensaje de respuesta - Devolver los resultados al código que invocó al stub.  El stub servidor debe: - Esperar mensaje de invocación - Desempaquetar los argumentos de la invocación. - Realizar la invocación al procedimiento local y esperar a que termine. - Empaquetar los argumentos de salida en el mensaje de respuesta. - Enviar la respuesta al cliente.
  9. 9. Modelo RPC Figura 3. Esquema RPC. Los pasos que ejecuta un Cliente para invocar un procedimiento remoto en un Servidor son los siguientes: 1. El Cliente llama un procedimiento local llamado el Client Stub (proxy). 2. El Client Stub empaqueta (marshalling) los parámetros, construye un mensaje y lo envía al Kernel local. 3. El Kernel local lo envía al Kernel donde se encuentra el Server Stub 4. El Kernel remoto envía el mensaje al Server Stub. 5. El Server Stub desempaqueta (unmarshalling) los parámetros, identifica el procedimiento y lo ejecuta. 6. El Server Stub recibe el resultado del servidor local 7. El Server Stub empaqueta (marshalling) la respuesta, construye un mensaje y lo envía al Kernel. 8. El Kernel remoto lo envía de nuevo al Kernel local. 9. El Kernel local envía el mensaje al Client Stub. 10. Client Stub desempaqueta (unmarshalling) el resultado y lo retorna de la misma forma que un procedimiento local.
  10. 10. Protocolos RPC: Soporta uno o dos protocolos. Específicamente, las implementaciones ONC y DCE soportan TCP y/o UDP como protocolos de transporte. Figura 4. Protocolos RPC La primera decisión es elegir entre un protocolo orientado a conexión o uno sin conexión: Conexión:  Ventajas: comunicación más fácil, el núcleo del cliente no debe preocuparse de si los mensajes se pierden o de si no hay reconocimiento.  Desventajas: En una LAN tiene pérdida de desempeño debido a que todo este software adicional estorba, además la ventaja de no perder los paquetes no tiene sentido ya que las LAN son confiables en esto. Sin Conexión: En general en sistemas dentro de un único edificio se utilizan protocolos sin conexión. Mientras que en redes grandes se utiliza uno orientado a conexión. Figura 5. Capas del Modelo OSI donde Trabaja RPC
  11. 11. Ventajas y desventajas de RPC con respecto a otros Middleware Ventajas RPC  RPC ofrece un mecanismo de nivel más alto que los sockets  El mecanismo de enviar mensajes de solicitud y esperar la respuesta queda oculto debajo de un esquema fácil de entender: llamar a un procedimiento, el cual devuelve resultados  RPC ofrece un mecanismo de representación de datos independiente de la máquina conocido como XDR (External Data Representation)  RPC facilita la definición del protocolo de comunicación (al nivel de aplicación)  Ventaja Principal: Es el middleware más maduro de todos. Desventajas RPC  Cuando se requiere un alto grado de interconexión, conviene evitar el uso de RPC, debido al alto consumo de procesamiento que conlleva, lo que baja notoriamente el rendimiento. RPC vs RMI  RPC  Obliga a utilizar el mismo lenguaje en ambos lado (cliente servidor).  Dependiente de la plataforma.  Poco escalable.  Diseño funcional de servicios, no orientados a objetos.  RMI  RPC orientado a objetos y multiplataforma.  Evolución hacia IIOP (CORBA): multiplataforma y multilenguaje. Figura 6. Ventajas de RMI sobre RPC
  12. 12. RPC vs DCOM DCOM cuenta con la característica de activación remota: Iniciar una aplicación mediante una llamada a un componente, a diferencia de RPC. RPC vs CORBA La mayoría de los RPC siempre funcionará solamente en las mismas plataformas y con el mismo conjunto de interfaces de lenguaje. El estilo RPC C en Solaris no necesariamente funcionará con el estilo C RPC en Windows. Por otra parte, también podría estar vinculado a un idioma específico y también un protocolo de red específico. No podemos llamar a este estilo de interfaz de C a partir de Java (Nos dará compilador de los errores en el primer paso en sí mismo). CORBA hecho resuelve estos problemas de la plataforma 3, de funcionamiento y las dependencias de la red para un mecanismo RPC. Tabla 1. Ventajas y Desventajas de los Middleware Middleware Ventajas Desventajas RPC Por ser el primer tipo de Exige alto nivel de Middleware es el menos procesamiento. complicado de usar y comprender. Tiene bajo rendimiento. RMI Gracias a la máquina Sólo para objetos Java. virtual Java soporta multiplataforma. DCOM Soporta multilenguaje. Especialmente diseñado para trabajar sobre sistemas operativos de Microsoft®. CORBA Útil para desarrollar Al ser tan amplio, es más sistemas P2P grandes, complejo que los otros soporta multilenguaje Middleware. de programación. Soporta plataformas y sistemas operativos heterogéneos.
  13. 13. ¿Cómo se logra la transparencia de acceso? External Data Representation (XDR) Es un Standards utilizado para codificar los datos (parámetros de entrada y resultados) en los mensajes RPC. Esta codificación permite que los valores que pasa una maquina sean entendidos por la otra aunque utilicen una representación distinta para los datos. XDR define numerosos tipos de datos, así como la manera en que han de transmitirse en un mensaje RPC. El dato más pequeño ocupa 4 bytes. Los mensajes de llamada y respuesta se formatean al estándar XDR. La información almacenada dentro de los programas en ejecución se representa mediante estructuras de datos (por ejemplo, por conjuntos de objetos interrelacionados) mientras que la información transportada en los mensajes consiste en secuencias de bytes. Independientemente de la forma de comunicación utilizada, las estructuras de datos deben ser aplanadas o serializadas (convertidas a una secuencia de bytes) antes de su transmisión y reconstruidas o deserializadas en el destino. Los tipos de datos primitivos transmitidos en los mensajes pueden tener valores de muchos tipos distintos, y no todos los computadores almacenan los valores primitivos, tales como los enteros, en el mismo orden. También es diferente en diferentes arquitecturas la representación de los números en coma flotante. Otro problema es el conjunto de códigos utilizado para representar los caracteres: por ejemplo, UNIX utiliza la codificación ASCII con un byte por carácter, mientras que el estándar Unicode permite representar textos en la mayoría de los lenguajes y utiliza dos bytes por carácter. Existen dos variantes en la ordenación de enteros: la llamada big-endian, en la que el byte más significativo va el primero, y la llamada little-endian, en la que va el último. Para hacer posible que dos computadores puedan intercambiar datos se puede utilizar uno de los dos métodos siguientes:  Los valores se convierten a un formato externo acordado antes de la transmisión y se revierten al formato local en la recepción; si los dos computadores son del mismo tipo y lo saben, se puede omitir la transformación al formato externo.  Los valores se transmiten según el formato del emisor, junto con una indicación del formato utilizado, y el receptor los convierte si es necesario. Hay que hacer notar, sin embargo, que los bytes no son alterados durante la transmisión. Cualquier tipo de dato que pueda ser pasado como un argumento o devuelto como resultado debe ser capaz de ser aplanado y cada uno de los tipos de
  14. 14. datos primitivos representados en una representación de datos acordada. Al estándar acordado para la representación de estructuras de datos y valores primitivos se denomina representación externa de datos. El empaquetado (marshalling) consiste en tomar una colección de ítems de datos y ensamblarlos de un modo adecuado para la transmisión de un mensaje. El desempaquetado (unmarshalling) es el proceso de desensamblado en el destino para producir una colección equivalente de datos. Por lo tanto, empaquetar consiste en traducir las estructuras de datos y los valores primitivos en una representación externa de datos. Similarmente, desempaquetar consiste en generar los valores primitivos desde la representación de datos externa y reconstruir las estructuras de datos. Esquema de generación de Stub (Cliente) y Stub (Server) a partir de la definición XDR del interfaz remoto. Tamaño del Bloque La representación de todos los ítems es en múltiplo de cuatro bytes (si es necesario se rellena con “ceros” para cumplir con esta condición) Figura 7. Tamaño del bloque
  15. 15. ¿Cómo se logra la transparencia de localización? Uno de los problemas existentes se basa en el direccionamiento al server, es decir la forma en que el cliente localiza al servidor. Una forma es incluir la dirección en el código del cliente, pero esto no sería muy flexible a cambios. O sea que de existir cambios en la dirección del servidor se debería recompilar el código del cliente. Para solucionar esto se plantea el binding. Servicio de binding Responsable de la transparencia de localización. Además funciona como un servicio auxiliar que complementa a Client stub y Server stub. – Gestiona la asociación entre el nombre del procedimiento Remoto (y su versión) con su localización en la maquina servidor (dirección, puertos, Server stub, etc.). – Realiza la búsqueda del Server stub de la implementación concreta del procedimiento remoto llamado por un cliente. – Selecciona Server stub + servidor que atender a la llamada remota. – Ejemplos: portmapper en Sun-RPC, protocolo UDDI en servicios web, rmiregistry en Java-RMI. Cuando el servidor inicia su ejecución: Una llamada tipo initialize que se encuentra fuera del ciclo principal exporta la interfaz del servidor:  El servidor envía un mensaje a un programa conector para darle a conocer su existencia.  Esto es el registro del servidor (registering the server).  El servidor proporciona al conector su nombre, número de versión y un único identificador.  El identificador generalmente tiene una longitud de 32 bits y un asa (handle) que se utiliza para localizarlo.
  16. 16.  El asa (handle) depende del sistema y puede ser:  Una dirección ethernet, ip, x.500.  Un identificador ralo de procesos, etc.  El asa también puede proporcionar información relativa a la autentificación. Un servidor puede cancelar su registro con el conector si ya no está preparado para prestar algún servicio. El cliente localiza al servidor de la siguiente manera: Cuando el cliente llama a alguno de los procedimientos remotos por primera vez: El resguardo del cliente:  Ve que aún no está conectado a un servidor.  Envía un mensaje al conector solicitando la importación de cierta versión de cierta interfaz.  El conector verifica si uno o más servidores ya han exportado una interfaz con ese nombre y versión.  Si ninguno de los servidores en ejecución en ese momento soporta esa interfaz, la llamada fracasa.  Si existe un servidor adecuado, el conector proporciona un asa e identificador único al resguardo del cliente, que utiliza el asa como la dirección a la cual enviar el mensaje solicitado. La ventaja es que es un esquema muy flexible pero el conector puede ser un cuello de botella con altas cargas de trabajo.
  17. 17. RPC Síncrono – Las llamadas tradicionales a procedimiento remoto son síncronas, lo que requiere que el proceso llamador espere hasta que el proceso llamado devuelva un valor. – Se comporta de manera muy parecida a una llamada a subrutina. Figura 8. RPC síncrona RPC Asíncrono Optimización de RPC que permite que el cliente no tenga que esperar a que termine el procedimiento, pero sí debe esperar un mensaje de respuesta. – No bloquea al llamador. – Permite que un cliente invoque repetidamente a un servidor, generando una serie de peticiones de una vez. Figura 9. RPC asíncrono
  18. 18. Diferencias entre RP síncrono y RPC asíncrono.  Las RPC asíncronas no bloquean al llamador.  RPC asíncronas ofrecer una mayor flexibilidad en el sentido de paralelismo.  En RPC asíncronas permiten que la ejecución de los clientes continúe localmente y en paralelo con la invocación al servidor.  Las RPC síncronas requiere que el proceso llamador espere hasta que el proceso llamado devuelva un valor. Portmapper Portmapper: proceso responsable de la localización de procedimientos remotos. – Responsable de las tareas de registro y binding. – Los servidores registran con el portmapper los procedimientos Remotos que exportan. – El portmapper queda a la escucha (puerto 111) y re direcciona las peticiones de accesos a procedimientos hacia sus respectivos puertos locales de escucha. Figura 10. Esquema Portmapper.
  19. 19. 1. Cuando un servidor establece una dirección de escucha de requerimientos, registra los puertos al portmapper, también registra los programas RPC y números de versiones, estos números pueden ser arbitrarios. 2. Antes de que un cliente pueda hacer una llamada remota, se consulta el portmapper del servidor que identifica el número de puerto que por el cual recibe los mensajes RPC. 3. El cliente y el servidor establecen un canal a través del cual se comunican para ejecutar llamadas a procedimientos remotos. Cada vez que se arranca uno de los servicio RPC en un servidor, se registra en el servicio portmapper de dicho host asociándole un determinado valor de puerto a dicho servicio. Un cliente RPC contacta con el servicio Portmapper para obtener el valor del puerto para un determinado RPC. Después envía el RPC a dicho puerto. Figura 11.Ejemplo Portmapper
  20. 20. Anexos Implementaciones más populares: ONC-RCP (Open Network Computing, ONC-RCP), desarrollada por Sun Microsystem y distribuida con casi todos los sistemas UNIX. DCE-RPC (DCE, Distributed Computing Enviroment) definido por la Fundación de Software Abierto (OSF, Open Software Foundation) e incluida en los sistemas operativos Windows. Semántica de Fallos A continuación se explicaran las soluciones a cada fallo:
  21. 21. (1) El Cliente No Puede Localizar al Servidor El servidor podría estar inactivo. El servidor podría estar utilizando una nueva versión de la interfaz y nuevos resguardos, que no serían compatibles con la interfaz y los resguardos del cliente. En el servidor, cada uno de los procedimientos regresa un valor:  Generalmente el código -1 indica un fallo.  También se suele utilizar una variable global (UNIX) errno a la que se asigna un valor que indica el tipo de error.  Un tipo de error sería “no se pudo localizar al servidor”. Otra posibilidad para el tratamiento de los errores es mediante una excepción provocada por el error:  Se codifican procedimientos especiales que son llamados ante errores específicos.  El problema es que se puede destruir la transparencia deseada, ya que se dificulta mantener la similitud entre procedimientos locales y remotos. (2) Se pierde el mensaje de petición del cliente al servidor El núcleo (kernel) debe inicializar un cronómetro al enviar la solicitud; si el tiempo se termina antes de que regrese una respuesta o reconocimiento, el núcleo vuelve a enviar el mensaje. Si el mensaje realmente se perdió, el servidor no podrá indicar la diferencia entre la retransmisión y el original y todo funcionará bien. Si el número de mensajes perdidos supera cierto límite, el núcleo puede asumir que el servidor está inactivo y se regresa a la situación “no se pudo localizar al servidor”. (3) Se pierde el mensaje de respuesta del servidor al cliente La pérdida de respuestas genera mayores problemas que la pérdida de solicitudes. Se utiliza un cronómetro:  Si no llega una respuesta en un período razonable, se debe volver a enviar la solicitud.
  22. 22.  El problema es que el núcleo del cliente no está seguro de la razón por la que no hubo respuesta. Ciertas operaciones se pueden repetir con seguridad tantas veces como sea necesario sin que ocurran daños; una solicitud con esta propiedad es idempotente. Otras operaciones no son idempotentes, por ej. la transferencia de dinero:  Se emite una solicitud a un servidor bancario para transferir cierta suma de dinero.  La solicitud llega y se efectúa pero se pierde la respuesta.  El cliente considera que la solicitud se perdió y la emite nuevamente.  El servidor recibe la nueva solicitud y la ejecuta al no saber que es un reenvío de la anterior. Una forma de resolver el problema consiste en lo siguiente:  El núcleo del cliente asigna a cada solicitud un número secuencial.  El núcleo del servidor mantiene un registro del número secuencial de recepción más reciente de cada uno de los núcleos de clientes que lo utilicen.  El núcleo del servidor podrá indicar la diferencia entre una solicitud original y una retransmisión y puede rechazar la realización de cualquier solicitud por segunda vez. Una protección adicional es tener un bit en el encabezado del mensaje para distinguir las solicitudes de las retransmisiones. (4) El servidor falla después de recibir una petición Un fallo del servidor también se relaciona con la idempotencia pero no se puede resolver con números secuenciales El problema es que el núcleo del cliente no puede decidir si se ha presentado la segunda o la tercera situación. Las posibles soluciones son las siguientes:  Semántica al menos una: o Esperar hasta que el servidor vuelva a arrancar (o se reconecte a un nuevo servidor) e intente realizar de nuevo la operación. o Mantener el intento hasta recibir una respuesta para dársela al cliente. o Garantiza que la RPC se ha realizado al menos una vez, pero es posible que se realice más veces.
  23. 23.  Semántica a lo más una: o No se reintenta y se informa del fallo. o Garantiza que la RPC se realiza a lo más una vez, pero es posible que no se realice ni una sola vez.  Semántica de no garantizar nada: o Cuando un servidor falla, el cliente no obtiene ayuda o alguna promesa. o La RPC se puede realizar en cualquier lugar, un número de veces que va desde “0” hasta “n”. o Resulta fácil de implantar.  Semántica de exactamente una: o Es la solución deseable pero generalmente no existe forma de garantizar esto. o El procedimiento de recuperación depende totalmente del momento en que ocurre el fallo. o El cliente no tiene forma de descubrir ese instante. La posibilidad de fallos del servidor distingue de manera clara los sistemas con un único procesador de los sistemas distribuidos:  Con un único procesador el fallo de un servidor implica un fallo del cliente y la recuperación no es ni posible ni necesaria.  Con sistemas distribuidos es posible y necesario realizar cierta acción. (5) El cliente falla después de enviar una petición La cuestión es qué ocurre si un cliente envía una solicitud a un servidor y falla antes de que el servidor responda. Se genera una solicitud de trabajo o cómputo que al fallar el cliente ya nadie espera; se dice que se tiene un cómputo huérfano. Los principales problemas generados por cómputos huérfanos son los siguientes:  Desperdicio de ciclos de cpu.  Posible bloqueo de archivos.  Apropiación de recursos valiosos.
  24. 24.  Posible confusión cuando: o El cliente rearranca y efectúa de nuevo la RPC. o La respuesta del huérfano regresa inmediatamente luego. Las soluciones a los cómputos huerfanos son las siguientes:  Exterminación: o Se crea un registro que indica lo que va a hacer el resguardo del cliente antes de que emita la RPC. o El registro se mantiene en disco. o Luego del rearranque se verifica el contenido del registro y se elimina el huérfano explícitamente. o La desventaja es la sobrecarga en e / s generada por la grabación previa a cada RPC. o Fallaría si los huérfanos generan RPC, creando huérfanos de huérfanos:  Sería imposible localizarlos.  Ante ciertos fallos en la red sería imposible eliminarlos aunque se los localice.  Reencarnación: o Resuelve los problemas anteriores sin necesidad de escribir registros en disco. o Consiste en dividir el tiempo en épocas numeradas de manera secuencial. o Cuando un cliente rearranca envía un mensaje a todas las máquinas declarando el inicio de una nueva época. o Al recibirse estos mensajes se eliminan todos los cómputos remotos. o Si se divide la red mediante particiones por fallas, podrían sobrevivir ciertos huérfanos:  Cuando se reconecten y vuelvan a reportarse sus respuestas contendrán un número de época obsoleto y se los podrá detectar y eliminar.
  25. 25.  Reencarnación sutil: o Cuando llega un mensaje de cierta época:  Cada máquina verifica si tiene cómputos remotos:  En caso afirmativo intenta localizar a su poseedor.  Si no se localiza al poseedor se elimina el cómputo.  Expiración: o A cada RPC se le asigna una cantidad estándar de tiempo “t” para que realice su trabajo. o Si el tiempo es insuficiente debe pedir explícitamente otro quantum, pero esto es un inconveniente. o Si luego del fallo el servidor espera “t” antes de rearrancar, todos los huérfanos habrán desaparecido. o El problema es elegir un “t” razonable, ya que pueden existir RPC con requisitos diversos.
  26. 26. Glosario  Asa (Handle): se conoce como handle a un tipo particular de punteros "inteligentes". Los handles son utilizados cuando un programa hace referencia a bloques de memoria u objetos controlados por otros sistemas, tales como una base de datos o un sistema operativo.  IIOP: (Internet Inter-Orb Protocol) es la implementación de GIOP para TCP/IP. Es una realización concreta de las definiciones abstractas de GIOP.  Marshalling: empaquetado de argumentos  NFS (Network System File): es un protocolo de nivel de aplicación, según el Modelo OSI. Es utilizado para sistemas de archivos distribuido en un entorno de red de computadoras de área local. Posibilita que distintos sistemas conectados a una misma red accedan a ficheros remotos como si se tratara de locales. Originalmente fue desarrollado en 1984 por Sun Microsystems, con el objetivo de que sea independiente de la máquina, el sistema operativo y el protocolo de transporte, esto fue posible gracias a que está implementado sobre los protocolos XDR (presentación) y ONC RPC (sesión).  Sockets: Los sockets no son más que puntos o mecanismos de comunicación entre procesos que permiten que un proceso hable (emita o reciba información) con otro proceso incluso estando estos procesos en distintas máquinas. Esta característica de interconectividad entre máquinas hace que el concepto de socket nos sirva de gran utilidad.  UDDI: son las siglas del catálogo de negocios de Internet denominado Universal Description, Discovery and Integration.  UDP: el protocolo de datagramas de usuario (UDP) es un protocolo que intercambia datos sin acuse de recibo ni garantía de entrega. UDP se apoya en las aplicaciones para manejar la retrasmisión y el procesamiento de errores.  Unmarshalling: desempaquetado de argumentos

×