Distribuidos 7
Distribuidos 7
Distribuidos 7
1 de septiembre de 2023
Índice
1. Paso de mensajes frente a objetos 7. API de Java RMI 8
distribuidos 2 7.1. La interfaz remota . . . . . . . . . 8
7.2. Software de la parte servidora . . . 9
2. Una arquitectura típica de objetos
distribuidos 2 7.2.1. La implementación de la
interfaz remota . . . . . . . 9
3. Sistemas de objetos distribuidos 3 7.2.2. Generación del resguardo y
del esqueleto . . . . . . . . 10
4. Llamadas a procedimientos remotos 4 7.2.3. El servidor de objeto . . . . 11
5. RMI (Remote Method Invocation) 5 7.3. Software de la parte cliente . . . . 13
1
1. Paso de mensajes frente a objetos distribuidos
El paso de mensajes básico requiere que los procesos participantes estén fuertemente acopla-
dos. A través de esta interacción, los procesos deben comunicarse directamente entre ellos. Si
la comunicación se pierde entre los procesos (debido a fallos de conexión) la colaboración falla.
El paradigma de paso de mensajes está orientado a datos. Cada mensaje contiene datos con
un formato mutuamente acordado, y se interpreta como una petición o respuesta de acuerdo
al protocolo.
Mientras que el hecho de que el paradigma sea orientado a datos es apropiado para los servicios
de red y aplicaciones de res sencillas, no es adecuado para aplicaciones complejas que impliquen
un gran número de peticiones y respuestas entremezcladas.
las operaciones de la entidad, a través de las cuales se puede acceder o modificar el estado de
la entidad: en Java, estas operaciones se denominan métodos.
Los objetos locales son objetos cuyos métodos sólo se pueden invocar por un proceso local, es
decir, un proceso que se ejecuta en el mismo computador del objeto. Un objeto distribuido es aquel
cuyos métodos pueden invocarse por un proceso remoto, es decir, un proceso que se ejecuta en un
computador conectado a través de una red a u computador en el cual se encuentra el objeto.
Para solicitar un servicio de un recurso de red, un proceso invoca uno de sus métodos u operacio-
nes, pasándole los datos como parámetros al método. EL método se ejecuta en la máquina remota, y
la respuesta es enviada al proceso solicitante como un valor de salida. Comparado con el paradigma
de paso de mensajes, el paradigma de objetos distribuidos es orientado a acciones.
PONER IMAGEN
Un proceso que utiliza objetos distribuidos se dice que es un proceso cliente de ese objeto, y
los métodos del objeto se denominan métodos remotos del proceso cliente.
Java RMI (Remote Method Invocation).
2
Al objeto distribuido proporcionado o exportado por un proceso se le denomina servidor de
objeto. Otra utilidad, denominada registro de objetos, o simplemente registro, debe existir en
la arquitectura para registrar los objetos distribuidos.
Para acceder a un objeto distribuido, el cliente de objeto, busca en el registro para encontrar
una referencia al objeto. EL cliente de objeto utiliza esta referencia para realizar llamadas a los
métodos del objeto remoto, o métodos remotos.
El cliente de objeto realiza una llamada directamente al método remoto. Realmente, un compo-
nente software se encarga de gestionar esta llamada. Este componente se denomina proxy de cliente
y se encarga de interactuar con el software en la máquina cliente con el fin de proporcionar soporte
en tiempo de ejecución para el sistema de objetos distribuidos.
Una arquitectura similar es necesaria en la parte del servidor, donde el soporte en tiempo de
ejecución para el sistema de objetos distribuidos gestiona la recepción de los mensajes y el desem-
paquetamiento de los datos, enviando la llamada a un componente software denominado proxy de
servidor. EL proxy de servidor invoca la llamada el método local en el objeto distribuido, pasándole
los datos desempaquetados como argumentos.
3
4. Llamadas a procedimientos remotos
RMI tiene su origen en un paradigma denominado Llamada a procedimientos remotos o
RPC (Remote Procedure Call).
Para enmascarar los detalles de la comunicación entre procesos, cada llamada a procedimiento re-
moto se transforma mediante una herramienta denominada rpcgen en una llamada a procedimiento
local dirigida a un módulo software comúnmente denominado reguardo (stub) o, más formalmente,
proxy. Los mensajes que representan la llamada al procedimiento y sus argumentos se pasan a la
máquina remota a través del proxy.
4
En el otro extremo, un proxy recibe el mensaje y los transforma en una llamada a procedimiento
local al procedimiento remoto.
Hay que destacar que hay que usar un proxy a cada lado de la comunicación para proporcionar
el soporte en tiempo de ejecución necesario para la comunicación entre procesos, llevándose a cabo el
correspondiente empaquetado y desempaquetado de datos, así como las llamadas a sockets necesarias.
1. El API Open Network Computing Remote Procedure Call es una evolución del API de
RPC que desarrolló originalmente Sun Microsystems, Inc.
Ambas interfaces proporcionan una herramienta, rpcgen, para transformar las llamadas a pro-
cedimientos remotos en llamadas a procedimientos locales al resguardo.
Sintácticamente,un objeto remoto se declara como una interfaz remota, una extensión de la
interfaz Java. El servidor de objeto implementa la interfaz remota.
5
6. La arquitectura de Java RMI
6.1. Parte cliente de la arquitectura
1. La capa resguardo o stub. La invocación de un método remoto por parte de un proceso cliente
es dirigida a un objeto proxy, conocido como resguardo. Esta capa se encuentra debajo de la
capa de aplicación y sirve para interceptar las invocaciones de los métodos remotos hechas por
los programas clientes; una ve interceptada la invocación es enviada a la capa inmediatamente
inferior, la capa de referencia remota.
2. La capa de referencia remota interpreta y gestiona las referencias a los objetos de servicio
remoto hechas por los clientes, e invoca las operaciones entre procesos de la capa siguiente, la
capa de transporte, a fin de transmitir las llamadas a los métodos a la máquina remota.
3. La capa de transporte está basada en TPC y por tanto, es orientada a conexión. Esta capa
y el resto de la arquitectura se encargan de la conexión entre procesos, transmitiendo los datos
que representan la llamada al método a la máquina remota.
6
6.2. Parte servidora de la arquitectura
1. La capa esqueleto o skeleton se encuentra justo debajo de la capa de aplicación y se utiliza
para interactuar con la capa resguardo en la parte cliente.
2. La capa de referencia remota. Esta capa gestiona y transforma la referencia remota origi-
nada por el cliente en una referencia local, que es capaz de comprender la capa esqueleto.
3. La capa de transporte. Al igual que en la parte cliente, se trata de una capa de transporte
orientada a conexión, es decir, TPC en la arquitectura de red TCP/IP.
El registro RMI es un servicio cuyo servidor, cuando está activo, se ejecuta en la máquina del
servidor del objeto.
Físicamente, las invocaciones del método remoto se transforman en llamadas a los resguardos y
esqueletos en tiempo de ejecución, dando lugar a la transmisión de datos a través de la red.
7
7. API de Java RMI
7.1. La interfaz remota
En el API de RMI, el punto inicial para crear un objeto distribuido es una interfaz remota
Java. Una interfaz Java es una clase que se utiliza como plantilla para otras clases: contiene las
declaraciones de los métodos que deben implementar las clases que utilizan dicha interfaz.
Una interfaz remota Java es una interfaz que hereda de la clase java remote. A parte de la
extensión que se hace de la clase remote todas las declaraciones de los métodos deben especificar la
excepción RemoteException.
8
La interfaz extiende o hereda de la clase Java Remote convirtiéndose de este modo en una interfaz
remota.
Un objeto Serializable tal como un objeto String o un objeto de otra clase puede ser un argumento
o puede ser devuelto por un método remoto. Al método remoto se le pasa una copia del elemento
(específicamente, una copia del objeto), sea éste un tipo primitivo o un objeto.
9
La cabecera de la clase (línea 8) debe especificar:
10
7.2.3. El servidor de objeto
La clase del servidor de objeto instancia y exporta un objeto de la implementación de la interfaz
remota.
11
En los siguientes párrafos se analizan las diferentes partes de esta plantilla.
Exportación del objeto. Las líneas 20-23 de la plantilla exportan el objeto. Para exportar
el objeto, se debe registrar su referencia en un servicio de directorios. Como ya se ha mencionado
anteriormente, en este capítulo se utilizará el servicio rmiregistry del SDK de Java.
Todos los servidores de objetos que se ejecutan en la misma máquina pueden compartir un mismo
registro. Alternativamente, un proceso servidor individual puede crear y utilizar su propio registro
si lo desea, en cuyo caso múltiples servidores rmiregistry pueden ejecutarse en diferentes números de
puertos en la misma máquina.
En la plantilla del servidor de objeto, el código para exportar un objeto (líneas 22-23) se realiza
del siguiente modo:
La clase Naming proporciona métodos para almacenar y obtener referencias del registro. En
particular, el método rebind permite almacenar en el registro una referencia a un objeto con un
URL de la forma:
rmi://<nombre máquina>:<número puerto>/<nombre referencia>
12
El método rebind sobreescribe cualquier referencia en el registro asociada al nombre de la refe-
rencia. Si no se desea sobreescribir, existe un método bind.
El nombre de la máquina debe corresponder con el nombre del servidor, o simplemente se puede
utilizar «localhost».
Cuando se ejecuta un servidor de objeto, la exportación de los objetos distribuidos provoca que el
proceso servidor comience a escuchar por el puerto y espere a que los clientes se conecten y soliciten
el servicio del objeto. Un servidor de objeto RMI es un servidor concurrente: cada solicitud de un
cliente de objeto se procesa a través de un hilo independiente del servidor.
13
Las sentencias de importación (líneas 1-4).
Búsqueda del objeto remoto. El código entre las líneas 24 y 27 permite buscar el objeto remoto
en el registro. El método lookup de la clase Naming se utiliza para obtener la referencia al objeto, si
existe, que previamente se ha almacenado en el registro el servicio de objeto. Obsérvese que se debe
hacer un cast de la referencia obtenida a la clase de la interfaz remota (no a su implementación).
14
8. Comparación entre RMI y el API de sockets
El API de sockets está más cercano al sistema operativo, por lo que tiene menos sobrecarga
de ejecución. RMI requiere soporte software adicional, incluyendo los proxies y el servicio de
directorio, que inevitablemente implican una sobrecarga en tiempo de ejecución.
Por otro lado, el API de RMI proporciona la abstracción necesaria para facilitar el desarrollo
del software.
Debido a que el API de sockets opera a más bajo nivel, se trata de una API típicamente
independiente de la plataforma y lenguaje. Puede no ocurrir lo mismo con RMI. Java RMI,
por ejemplo, requiere soportes de tiempo de ejecución específicos de Java. Como resultado, una
aplicación implementada con Java RMI debe escribirse en Java y sólo se puede ejecutar en
plataformas Java.
9. Resumen
Este capítulo ha introducido el paradigma de objetos distribuidos. A continuación se resumen
algunos de los puntos claves:
El paradigma de objetos distribuidos posee un nivel de abstracción más alto que el paradigma
de paso de mensajes.
Mediante el uso de este paradigma, un proceso invoca métodos de un objeto remoto, pasando
los datos como argumentos y recibiendo un valor de retorno con cada llamada, de forma similar
a las llamadas a los métodos locales.
Entre protocolos de los sistemas de objetos distribuidos más conocidos se encuentran Java
RMI, el modelo de objetos de componentes distribuidos DCOM, la arquitectura CORBA y el
protocolo SOAP.
Java RMI es un sustema representativo de los sistemas de objetos distribuidos. Algunos de los
temas relacionados con RMI que se han tratado en este capítulo son:
• La arquitectura del API Java RMI incluye tres capas en ambos extremos, el cliente y el
servidor. En la parte cliente, la capa resguardo acepta una invocación a un método remoto
y la transforma en mensajes, que envía a la parte servidora. En la parte servidora, la capa
esqueleto recibe los mensajes y los transforma en llamadas locales al método remoto. Para
registrar un objeto, se debe utiliza un servicio de directorios, como JNDI o el registro
RMI.
• El software de una aplicación RMI incluye una interfaz remota, software en la parte
servidora, y software en la parte cliente. Este capítulo presentó la sintaxis y los algoritmos
recomendados para desarrollar este software.
15