SlideShare uma empresa Scribd logo
1 de 26
Baixar para ler offline
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
Í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
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.
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
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).
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)
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.
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.
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.
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
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
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.
¿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
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
¿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.
   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.
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
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.
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
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:
(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.
   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.
   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.
   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.
   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.
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

Mais conteúdo relacionado

Mais procurados

Tabla modelo osi
Tabla modelo osiTabla modelo osi
Tabla modelo osifeli506
 
Deteccion Y Recuperacion De Un Interbloqueo
Deteccion Y Recuperacion De Un InterbloqueoDeteccion Y Recuperacion De Un Interbloqueo
Deteccion Y Recuperacion De Un InterbloqueoTecnologico de pinotepa
 
Seguridad en los Sistemas Distribuidos
Seguridad en los Sistemas DistribuidosSeguridad en los Sistemas Distribuidos
Seguridad en los Sistemas DistribuidosTensor
 
Unidad 1: Introducción a la seguridad informática
Unidad 1: Introducción a la seguridad informáticaUnidad 1: Introducción a la seguridad informática
Unidad 1: Introducción a la seguridad informáticacarmenrico14
 
Middleware en los sistemas distribuidos
Middleware en los sistemas distribuidosMiddleware en los sistemas distribuidos
Middleware en los sistemas distribuidosJC Alca Arequi
 
Presentación: Sistema de Archivos Distribuido (DFS)
Presentación: Sistema de Archivos Distribuido (DFS)Presentación: Sistema de Archivos Distribuido (DFS)
Presentación: Sistema de Archivos Distribuido (DFS)Alejandro Rodríguez
 
Mapa mental de base de datos
Mapa mental de base de datosMapa mental de base de datos
Mapa mental de base de datosJorge Mengelle
 
4. listas de control de acceso
4. listas de control de acceso4. listas de control de acceso
4. listas de control de accesoEduardo Lange
 

Mais procurados (20)

Tabla modelo osi
Tabla modelo osiTabla modelo osi
Tabla modelo osi
 
Deteccion Y Recuperacion De Un Interbloqueo
Deteccion Y Recuperacion De Un InterbloqueoDeteccion Y Recuperacion De Un Interbloqueo
Deteccion Y Recuperacion De Un Interbloqueo
 
ELOGIM: Administración de servicios e indicadores de bibliotecas como apoyo a...
ELOGIM: Administración de servicios e indicadores de bibliotecas como apoyo a...ELOGIM: Administración de servicios e indicadores de bibliotecas como apoyo a...
ELOGIM: Administración de servicios e indicadores de bibliotecas como apoyo a...
 
Configuración básica de la vlan
Configuración básica de la vlanConfiguración básica de la vlan
Configuración básica de la vlan
 
Corba
CorbaCorba
Corba
 
Arquitectura multicapa
Arquitectura multicapaArquitectura multicapa
Arquitectura multicapa
 
Interconexión redes
Interconexión redesInterconexión redes
Interconexión redes
 
Seguridad en los Sistemas Distribuidos
Seguridad en los Sistemas DistribuidosSeguridad en los Sistemas Distribuidos
Seguridad en los Sistemas Distribuidos
 
Unidad 1: Introducción a la seguridad informática
Unidad 1: Introducción a la seguridad informáticaUnidad 1: Introducción a la seguridad informática
Unidad 1: Introducción a la seguridad informática
 
Middleware en los sistemas distribuidos
Middleware en los sistemas distribuidosMiddleware en los sistemas distribuidos
Middleware en los sistemas distribuidos
 
Presentación: Sistema de Archivos Distribuido (DFS)
Presentación: Sistema de Archivos Distribuido (DFS)Presentación: Sistema de Archivos Distribuido (DFS)
Presentación: Sistema de Archivos Distribuido (DFS)
 
Ensamblador y lenguaje c
Ensamblador y lenguaje cEnsamblador y lenguaje c
Ensamblador y lenguaje c
 
SERVIDORES DE INTERNET
SERVIDORES DE INTERNETSERVIDORES DE INTERNET
SERVIDORES DE INTERNET
 
Sistemas distribuidos
Sistemas distribuidosSistemas distribuidos
Sistemas distribuidos
 
1. introducción a c#
1.  introducción a c#1.  introducción a c#
1. introducción a c#
 
Mapa mental de base de datos
Mapa mental de base de datosMapa mental de base de datos
Mapa mental de base de datos
 
control de concurrencia
control de concurrenciacontrol de concurrencia
control de concurrencia
 
ASP.NET WEB API
ASP.NET WEB APIASP.NET WEB API
ASP.NET WEB API
 
4. listas de control de acceso
4. listas de control de acceso4. listas de control de acceso
4. listas de control de acceso
 
Capa de aplicación
Capa de aplicaciónCapa de aplicación
Capa de aplicación
 

Semelhante a Rpc te

Daniel quinde danielbravonet remoting
Daniel quinde danielbravonet remotingDaniel quinde danielbravonet remoting
Daniel quinde danielbravonet remotingDaniel Quinde
 
Introduccion al middleware
Introduccion al middlewareIntroduccion al middleware
Introduccion al middlewareTensor
 
Remote Procedure Call (RPC)
Remote Procedure Call (RPC)Remote Procedure Call (RPC)
Remote Procedure Call (RPC)Taty Millan
 
Middleware
MiddlewareMiddleware
MiddlewareTensor
 
Middleware
MiddlewareMiddleware
MiddlewareTensor
 
Middleware
MiddlewareMiddleware
MiddlewareTensor
 
Introduccion a corba,wcf,net remoting
Introduccion a corba,wcf,net remotingIntroduccion a corba,wcf,net remoting
Introduccion a corba,wcf,net remotingJosé Jiménez
 
Sistemas arquitectónicos centralizados, descentralizados e híbridos.
Sistemas arquitectónicos centralizados, descentralizados e híbridos.Sistemas arquitectónicos centralizados, descentralizados e híbridos.
Sistemas arquitectónicos centralizados, descentralizados e híbridos.Universidad de Guadalajara
 
Servidores de-aplicacion-1211055568915043-9
Servidores de-aplicacion-1211055568915043-9Servidores de-aplicacion-1211055568915043-9
Servidores de-aplicacion-1211055568915043-9home
 
Arquitectura de sistemas distribuidos-grupo Maria
Arquitectura de sistemas distribuidos-grupo MariaArquitectura de sistemas distribuidos-grupo Maria
Arquitectura de sistemas distribuidos-grupo Mariagequito
 
Arquitectura de sistemas distribuidos-Grupo de Maria
Arquitectura de sistemas distribuidos-Grupo de MariaArquitectura de sistemas distribuidos-Grupo de Maria
Arquitectura de sistemas distribuidos-Grupo de Mariagequito
 
Trabajo grupal 1 taller-prog-distribuida
Trabajo grupal 1 taller-prog-distribuidaTrabajo grupal 1 taller-prog-distribuida
Trabajo grupal 1 taller-prog-distribuidaRJ Manayay Chavez
 

Semelhante a Rpc te (20)

Daniel quinde danielbravonet remoting
Daniel quinde danielbravonet remotingDaniel quinde danielbravonet remoting
Daniel quinde danielbravonet remoting
 
Introduccion al middleware
Introduccion al middlewareIntroduccion al middleware
Introduccion al middleware
 
07 middleware
07 middleware07 middleware
07 middleware
 
07 middleware
07 middleware07 middleware
07 middleware
 
Remote Procedure Call (RPC)
Remote Procedure Call (RPC)Remote Procedure Call (RPC)
Remote Procedure Call (RPC)
 
Middleware
MiddlewareMiddleware
Middleware
 
Middleware
MiddlewareMiddleware
Middleware
 
Middleware
MiddlewareMiddleware
Middleware
 
Introduccion a corba,wcf,net remoting
Introduccion a corba,wcf,net remotingIntroduccion a corba,wcf,net remoting
Introduccion a corba,wcf,net remoting
 
Sistemas arquitectónicos centralizados, descentralizados e híbridos.
Sistemas arquitectónicos centralizados, descentralizados e híbridos.Sistemas arquitectónicos centralizados, descentralizados e híbridos.
Sistemas arquitectónicos centralizados, descentralizados e híbridos.
 
Servidores De Aplicacion
Servidores De AplicacionServidores De Aplicacion
Servidores De Aplicacion
 
Servidores de-aplicacion-1211055568915043-9
Servidores de-aplicacion-1211055568915043-9Servidores de-aplicacion-1211055568915043-9
Servidores de-aplicacion-1211055568915043-9
 
Arquitectura de sistemas distribuidos-grupo Maria
Arquitectura de sistemas distribuidos-grupo MariaArquitectura de sistemas distribuidos-grupo Maria
Arquitectura de sistemas distribuidos-grupo Maria
 
Arquitectura de sistemas distribuidos-Grupo de Maria
Arquitectura de sistemas distribuidos-Grupo de MariaArquitectura de sistemas distribuidos-Grupo de Maria
Arquitectura de sistemas distribuidos-Grupo de Maria
 
.Net Remoting
.Net Remoting.Net Remoting
.Net Remoting
 
R_QuintoNevarez
R_QuintoNevarezR_QuintoNevarez
R_QuintoNevarez
 
SEMANA 6.pptx
SEMANA 6.pptxSEMANA 6.pptx
SEMANA 6.pptx
 
Apunte unidad 3
Apunte unidad 3Apunte unidad 3
Apunte unidad 3
 
Trabajo grupal 1 taller-prog-distribuida
Trabajo grupal 1 taller-prog-distribuidaTrabajo grupal 1 taller-prog-distribuida
Trabajo grupal 1 taller-prog-distribuida
 
Modelos de sistema
Modelos de sistemaModelos de sistema
Modelos de sistema
 

Rpc te

  • 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. Í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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. ¿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. 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. ¿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. 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. 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. 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. 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. 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. (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. 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. 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. 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. 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. 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