TEMA 4. Arquitectura de aplicaciones distribuidas

33
1 TEMA 4. TEMA 4. Arquitectura de Arquitectura de aplicaciones distribuid aplicaciones distribuid Tecnologías orientadas al Tecnologías orientadas al desarrollo de aplicaciones desarrollo de aplicaciones distribuidas. distribuidas. La invocación remota de métodos La invocación remota de métodos (RMI). (RMI).

description

TEMA 4. Arquitectura de aplicaciones distribuidas. Tecnologías orientadas al desarrollo de aplicaciones distribuidas. La invocación remota de métodos (RMI). Bibliografía. Qusay H. Mahmoud. Distributed Programming with Java. Capítulos 7 al 10. - PowerPoint PPT Presentation

Transcript of TEMA 4. Arquitectura de aplicaciones distribuidas

Page 1: TEMA 4.  Arquitectura de aplicaciones distribuidas

11

TEMA 4. TEMA 4. Arquitectura de Arquitectura de aplicaciones distribuidasaplicaciones distribuidas

Tecnologías orientadas al desarrollo Tecnologías orientadas al desarrollo de aplicaciones distribuidas. de aplicaciones distribuidas.

La invocación remota de métodos La invocación remota de métodos (RMI). (RMI).

Page 2: TEMA 4.  Arquitectura de aplicaciones distribuidas

22

BibliografíaBibliografía

Qusay H. Mahmoud. Distributed Programming Qusay H. Mahmoud. Distributed Programming with Java. Capítulos 7 al 10.with Java. Capítulos 7 al 10.

Sun. “Documentación de Java”. Sun. “Documentación de Java”. http://http://java.sun.comjava.sun.com . Traducciones al castellano en . Traducciones al castellano en http://www.programacion.comhttp://www.programacion.com

Liu M. “Computación distribuida”. Liu M. “Computación distribuida”. Pearson(A.W). Capítulos 7 y 8.Pearson(A.W). Capítulos 7 y 8.

Page 3: TEMA 4.  Arquitectura de aplicaciones distribuidas

33

Cliente/servidor de dos capas.Cliente/servidor de dos capas.

Cliente/servidor en tres capas. Cliente/servidor en tres capas. AAñade un servidor intermedio entre el ñade un servidor intermedio entre el cliente y el servidor que se encarga, cliente y el servidor que se encarga, entre otras cosas: entre otras cosas:

– de la traducción de servicios, de la traducción de servicios, – controlar los accesos al servidor y controlar los accesos al servidor y – enrutar las peticiones a distintos servidores enrutar las peticiones a distintos servidores

en función de algunas características.en función de algunas características.

1 . Tecnologías orientadas al desarrollo de aplicaciones distribuidas

Tipos de arquitecturas

Page 4: TEMA 4.  Arquitectura de aplicaciones distribuidas

44

los objetos dinámicamente los objetos dinámicamente asumen el papel de clientes o asumen el papel de clientes o servidores, según la necesidad. servidores, según la necesidad.

Un Un objeto distribuidoobjeto distribuido es un objeto es un objeto que puede ser accedido que puede ser accedido remotamente desde cualquier remotamente desde cualquier lugar en la red, del mismo modo lugar en la red, del mismo modo que se haría si estuviese en la que se haría si estuviese en la misma máquina. misma máquina.

1 . Tecnologías orientadas al desarrollo de aplicaciones distribuidas

Objetos distribuidos

Page 5: TEMA 4.  Arquitectura de aplicaciones distribuidas

55

Los objetos distribuidos estarán Los objetos distribuidos estarán "unidos" mediante algún mecanismo "unidos" mediante algún mecanismo que permita saber a los clientes:que permita saber a los clientes:– dónde se encuentran los servidores, dónde se encuentran los servidores, – cómo acceder a ellos y cómo acceder a ellos y – qué se les puede pedir. qué se les puede pedir.

Por ejemplo, una especie de Por ejemplo, una especie de gestionador de peticiones de objetos gestionador de peticiones de objetos podría servirnos para esta tarea o bien podría servirnos para esta tarea o bien algún tipo de registro general dinámico. algún tipo de registro general dinámico.

1 . Tecnologías orientadas al desarrollo de aplicaciones distribuidas

Objetos distribuidos

Page 6: TEMA 4.  Arquitectura de aplicaciones distribuidas

66

Este “pegamento” lógico es el que nos Este “pegamento” lógico es el que nos hace todo el sistema transparente.hace todo el sistema transparente.

Localiza los objetos en los sistemas Localiza los objetos en los sistemas remotos y transforma las peticiones remotos y transforma las peticiones para que se entiendan para que se entiendan independientemente a la máquina independientemente a la máquina sobre la que se están ejecutando o en sobre la que se están ejecutando o en el lenguaje en el que están escritos. el lenguaje en el que están escritos.

1 . Tecnologías orientadas al desarrollo de aplicaciones distribuidas

Objetos distribuidos

Page 7: TEMA 4.  Arquitectura de aplicaciones distribuidas

77

El concepto global de objetos El concepto global de objetos distribuidos puede verse como distribuidos puede verse como una red global de clientes y una red global de clientes y servidores heterogéneos.servidores heterogéneos.

1 . Tecnologías orientadas al desarrollo de aplicaciones distribuidas

Objetos distribuidos

Page 8: TEMA 4.  Arquitectura de aplicaciones distribuidas

88

Sirven para hacer más sencilla la Sirven para hacer más sencilla la reconstrucción de aplicaciones por reconstrucción de aplicaciones por partes sin tener que reinstalarla o partes sin tener que reinstalarla o recompilarla completamente.recompilarla completamente.

Favorecen la escalabilidad y Favorecen la escalabilidad y permiten el mejor uso de la potencia permiten el mejor uso de la potencia computacional de las máquinas computacional de las máquinas repartiendo la ejecución de los repartiendo la ejecución de los objetos constituyentes entre ellas.objetos constituyentes entre ellas.

1 . Tecnologías orientadas al desarrollo de aplicaciones distribuidas

Ventajas de usar objetos distribuidos

Page 9: TEMA 4.  Arquitectura de aplicaciones distribuidas

99

Pueden facilitar la movilidad de los objetos Pueden facilitar la movilidad de los objetos entre las máquinas, aumentado entre las máquinas, aumentado considerablemente la disponibilidad y la considerablemente la disponibilidad y la eficiencia global de la aplicación.eficiencia global de la aplicación.

Pueden servir para que las aplicaciones se Pueden servir para que las aplicaciones se construyan independientemente de la construyan independientemente de la plataforma sobre la que se crearon.plataforma sobre la que se crearon.

Favorecen la compartición de datos entre Favorecen la compartición de datos entre aplicaciones y usuarios de forma aplicaciones y usuarios de forma inmediata, además de la sincronización de inmediata, además de la sincronización de actividades a través de varias máquinas.actividades a través de varias máquinas.

1 . Tecnologías orientadas al desarrollo de aplicaciones distribuidas

Ventajas de usar objetos distribuidos

Page 10: TEMA 4.  Arquitectura de aplicaciones distribuidas

1010

El mecanismo más usado en el modelo procedural es la El mecanismo más usado en el modelo procedural es la llamada a procedimiento remoto (llamada a procedimiento remoto (Remote procedure Remote procedure callcall, , RPCRPC ) que es idéntico a una llamada a un ) que es idéntico a una llamada a un procedimiento sólo que origen y destino son procesos procedimiento sólo que origen y destino son procesos distintos.distintos.

El inconveniente que presenta esta forma de trabajo es El inconveniente que presenta esta forma de trabajo es que para utilizarlo se debe hacer referencia a conceptos que para utilizarlo se debe hacer referencia a conceptos de bajo nivel que están en función del sistema operativo de bajo nivel que están en función del sistema operativo en el que se está programando.en el que se está programando.

Los Los RPCRPCs son un estándar del s son un estándar del DCEDCE ( (Distributed Distributed Computed EnvironmentComputed Environment), que fue creado por empresas ), que fue creado por empresas como como HPHP, , IBMIBM, , SunSun y y DECDEC como un entorno para como un entorno para sistemas abiertos que nos ofrece un conjunto de sistemas abiertos que nos ofrece un conjunto de servicios como son direccionamiento (servicios como son direccionamiento (namingnaming), ), administración de tareas paralelas (administración de tareas paralelas (thread managementthread management) ) y seguridad.y seguridad.

1 . Tecnologías orientadas al desarrollo de aplicaciones distribuidas

Tecnologías

Page 11: TEMA 4.  Arquitectura de aplicaciones distribuidas

1111

Actualmente, algunas de las Actualmente, algunas de las tendencias principales que se están tendencias principales que se están utilizando dando soporte a la utilizando dando soporte a la distribución de objetos son distribución de objetos son RMIRMI de de SunsoftSunsoft, , CORBACORBA del del Object Object Management GroupManagement Group y y DCOMDCOM ((Distributed Component Object ModelDistributed Component Object Model)) de de MicrosoftMicrosoft..

1 . Tecnologías orientadas al desarrollo de aplicaciones distribuidas

Tecnologías

Page 12: TEMA 4.  Arquitectura de aplicaciones distribuidas

1212

De estos tres mecanismos no De estos tres mecanismos no hay ninguna respuesta única en hay ninguna respuesta única en cuanto a cual es el mejor.cuanto a cual es el mejor.

Las tendencias actuales Las tendencias actuales consisten en establecer consisten en establecer conexiones entre ellos. conexiones entre ellos.

1 . Tecnologías orientadas al desarrollo de aplicaciones distribuidas

Tecnologías

Page 13: TEMA 4.  Arquitectura de aplicaciones distribuidas

1313

El El Remote Method InvocationRemote Method Invocation aparece aparece como parte integrante del como parte integrante del JDKJDK ( (Java Java Development KitDevelopment Kit) de ) de JavaJava a partir de la a partir de la versión 1.1. versión 1.1.

RMIRMI permite la invocación de métodos de permite la invocación de métodos de objetos objetos JavaJava que residen en otras que residen en otras máquinas. máquinas.

Estas otras máquinas no tienen por que Estas otras máquinas no tienen por que tener ni la misma arquitectura ni el mismo tener ni la misma arquitectura ni el mismo sistema operativo, sólo requieren tener su sistema operativo, sólo requieren tener su JVMJVM ( (Java Virtual MachineJava Virtual Machine) correspondiente. ) correspondiente.

2 . La invocación remota de métodos (RMI)

Introducción

Page 14: TEMA 4.  Arquitectura de aplicaciones distribuidas

1414

RMIRMI usa un protocolo nativo propio usa un protocolo nativo propio JRMPJRMP((Java Remote Method ProtocolJava Remote Method Protocol) ) que se sitúa sobre el protocolo de red que se sitúa sobre el protocolo de red ((TCP/IPTCP/IP, por ejemplo) que hace que sólo , por ejemplo) que hace que sólo se pueda hablar con otros objetos se pueda hablar con otros objetos JavaJava. .

La principal diferencia de este La principal diferencia de este mecanismo con respecto a los mecanismo con respecto a los RPCRPC es es que el que el RMIRMI forma parte integrante del forma parte integrante del lenguaje y no hay que hacer ninguna lenguaje y no hay que hacer ninguna referencia explícita a ningún nivel referencia explícita a ningún nivel subyacente del sistema sobre el que se subyacente del sistema sobre el que se va a ejecutar la aplicación. va a ejecutar la aplicación.

2 . La invocación remota de métodos (RMI)

Introducción

Page 15: TEMA 4.  Arquitectura de aplicaciones distribuidas

1515

Para el desarrollo de una aplicación Para el desarrollo de una aplicación distribuida, la solución planteada por distribuida, la solución planteada por JavaJava y y RMIRMI ( (Remote Method InvocationRemote Method Invocation) es más ) es más sencilla de llevar a cabo que cualquiera de sencilla de llevar a cabo que cualquiera de las otras alternativas (las otras alternativas (CORBACORBA o o DCOMDCOM). ).

Carece de un soporte contrastado para Carece de un soporte contrastado para múltiples lenguajes y no es tan robusto y múltiples lenguajes y no es tan robusto y escalable como los dos anteriores.escalable como los dos anteriores.

Lo que realmente hace interesante esta Lo que realmente hace interesante esta aproximación es la facilidad de desarrollo aproximación es la facilidad de desarrollo de aplicaciones distribuidas dentro del de aplicaciones distribuidas dentro del marco del lenguaje marco del lenguaje JavaJava. .

2 . La invocación remota de métodos (RMI)

Introducción

Page 16: TEMA 4.  Arquitectura de aplicaciones distribuidas

1616

El uso de El uso de RMIRMI, entre otras cosas, aporta: , entre otras cosas, aporta:

– Un recolector de basura distribuido, Un recolector de basura distribuido,

– mantiene los sistemas de seguridad de Java,mantiene los sistemas de seguridad de Java,

– usa la posibilidad de crear hilos de ejecución usa la posibilidad de crear hilos de ejecución ((threadsthreads) concurrentes potenciando la idea ) concurrentes potenciando la idea concurrente en las aplicaciones distribuidas yconcurrente en las aplicaciones distribuidas y

– hace un uso inteligente de la hace un uso inteligente de la Serialization Serialization de los de los

objetos objetos JavaJava con la posibilidad de transportar con la posibilidad de transportar objetos a través de la red sin necesidad de objetos a través de la red sin necesidad de ningún esquema extra.ningún esquema extra.

2 . La invocación remota de métodos (RMI)

Introducción

Page 17: TEMA 4.  Arquitectura de aplicaciones distribuidas

1717

El objetivo básico que se El objetivo básico que se persigue es la posibilidad de persigue es la posibilidad de enviar un mensaje a un objeto enviar un mensaje a un objeto que reside en una máquina a que reside en una máquina a partir de un método que se está partir de un método que se está ejecutando en otra máquina ejecutando en otra máquina distinta. distinta.

2 . La invocación remota de métodos (RMI)

Estrategia

Page 18: TEMA 4.  Arquitectura de aplicaciones distribuidas

1818

2 . La invocación remota de métodos (RMI)

Arquitectura RMI

stub

Capa ref. remota

Capa transporte

skeleton

Capa de ref. remota

Capa transporte

Ruta de datos lógica

Ruta de datos física

Interfaz con el programa

Implementa protocolos de ref. remota

Implementa protocolo transporte

objetocliente

Objetoservidor

Servicio directorios

Page 19: TEMA 4.  Arquitectura de aplicaciones distribuidas

1919

2 . La invocación remota de métodos (RMI)

Interacciones stub

stub

Empaquetado parámetros

Envía petición

Desempaquetado: Invoca método

métodoremoto

executa codigo

Recibe retorno

empaqueta

envía

desempaqueta

Retorna valor

tiempo

stub

Llamada a método

Page 20: TEMA 4.  Arquitectura de aplicaciones distribuidas

2020

Para estudiar el mecanismo de Para estudiar el mecanismo de RMI se plantea el siguiente RMI se plantea el siguiente ejercicio.ejercicio.

Diseñar un servidor remoto que Diseñar un servidor remoto que informe sobre la hora, de forma informe sobre la hora, de forma que tenga un método que tenga un método obtenerHora que pueda ser obtenerHora que pueda ser consultado por cualquier cliente. consultado por cualquier cliente.

2 . La invocación remota de métodos (RMI)

Ejemplo cliente/servidor

Page 21: TEMA 4.  Arquitectura de aplicaciones distribuidas

2121

import java.rmi.*;import java.rmi.*;

interface HoraExactaI extends interface HoraExactaI extends Remote {Remote {

long obtenerHora() throws long obtenerHora() throws RemoteException;RemoteException;

}}

2 . La invocación remota de métodos (RMI)

Cliente y servidor

Page 22: TEMA 4.  Arquitectura de aplicaciones distribuidas

2222

import java.rmi.*;import java.rmi.*;import java.rmi.server.*;import java.rmi.server.*;import java.rmi.registry.*;import java.rmi.registry.*;import java.net.*;import java.net.*;

public class HoraExactapublic class HoraExacta extends UnicastRemoteObject extends UnicastRemoteObject implements HoraExactaI implements HoraExactaI {{

// Implementación de la interface:// Implementación de la interface:public long obtenerHora()public long obtenerHora() throws RemoteException throws RemoteException {{return System.currentTimeMillis();return System.currentTimeMillis();}}// Implementación del constructor para lanzar // Implementación del constructor para lanzar //RemoteException://RemoteException:public HoraExacta() throws RemoteException {public HoraExacta() throws RemoteException {super();super();}}

2 . La invocación remota de métodos (RMI)

Servidor

Page 23: TEMA 4.  Arquitectura de aplicaciones distribuidas

2323

El cliente debe conocer la clase El cliente debe conocer la clase HoraExacta, pero sólo le HoraExacta, pero sólo le interesan los métodos que interesan los métodos que puede invocar.puede invocar.

La solución que proporciona el La solución que proporciona el lenguaje es mediante el uso de lenguaje es mediante el uso de interfaces remotas, que interfaces remotas, que presentan los métodos y no el presentan los métodos y no el código que estará en la máquina código que estará en la máquina residente del servidor.residente del servidor.

2 . La invocación remota de métodos (RMI)

Cliente

Page 24: TEMA 4.  Arquitectura de aplicaciones distribuidas

2424

El problema reside en como el El problema reside en como el cliente crea una referencia a un cliente crea una referencia a un objeto remoto y como el objeto remoto y como el servidor hace accesibles los servidor hace accesibles los métodos de sus objetos métodos de sus objetos remotos.remotos.

2 . La invocación remota de métodos (RMI)

Page 25: TEMA 4.  Arquitectura de aplicaciones distribuidas

2525

try {try {

HoraExacta he = new HoraExacta();HoraExacta he = new HoraExacta();

Naming.bind("//canyella:2005/Naming.bind("//canyella:2005/HoraExacta", he);HoraExacta", he);

System.out.println("Preparado...");System.out.println("Preparado...");

} catch(Exception e) {} catch(Exception e) {

2 . La invocación remota de métodos (RMI)

Accesibilidad del objeto remoto (servidor)

Page 26: TEMA 4.  Arquitectura de aplicaciones distribuidas

2626

En nuestro caso hay una llamada a En nuestro caso hay una llamada a Naming.bind()Naming.bind(), que requiere que el , que requiere que el registro esté ya ejecutándose como registro esté ya ejecutándose como un proceso a parte en nuestro un proceso a parte en nuestro sistema. sistema.

El nombre del proceso que se El nombre del proceso que se encarga de hacer el registro es encarga de hacer el registro es rmiregistryrmiregistry y en función del sistema y en función del sistema en el que estemos lo arrancaremos en el que estemos lo arrancaremos como:como:

– Start rmiregistryStart rmiregistry en en WindowsWindows y y – rmiregistry &rmiregistry & en en UNIXUNIX..

2 . La invocación remota de métodos (RMI)

Arrancar el registro

Page 27: TEMA 4.  Arquitectura de aplicaciones distribuidas

2727

Si se registran objetos sin ningún Si se registran objetos sin ningún parámetro, el registro escuchará en parámetro, el registro escuchará en el puerto 1099. el puerto 1099.

La información del puerto se debe La información del puerto se debe pasar al comando pasar al comando bind()bind(), así como la , así como la dirección IP de la máquina sobre la dirección IP de la máquina sobre la que se ejecuta el registro. que se ejecuta el registro.

El nombre del servicio es arbitrario, El nombre del servicio es arbitrario, en nuestro caso coincide con el en nuestro caso coincide con el nombre de la clase pero no tiene nombre de la clase pero no tiene porque ser así. Lo único importante porque ser así. Lo único importante es que sea único dentro del registro es que sea único dentro del registro al que el cliente pregunta. al que el cliente pregunta.

2 . La invocación remota de métodos (RMI)

Arrancar el registro

Page 28: TEMA 4.  Arquitectura de aplicaciones distribuidas

2828

Si en un mismo registro Si en un mismo registro tuviésemos dos servicios con el tuviésemos dos servicios con el mismo nombre se lanzaría la mismo nombre se lanzaría la excepción excepción AlreadyBoundExceptionAlreadyBoundException. .

Para prevenir esta posibilidad Para prevenir esta posibilidad podemos usar podemos usar rebind()rebind() en lugar en lugar de de bind()bind() ya que ésta añade o ya que ésta añade o reemplaza el nuevo servicio en reemplaza el nuevo servicio en función de que ya exista.función de que ya exista.

2 . La invocación remota de métodos (RMI)

Arrancar el registro

Page 29: TEMA 4.  Arquitectura de aplicaciones distribuidas

2929

Aunque se termine el Aunque se termine el main()main(), el , el objeto creado y registrado objeto creado y registrado permanece vivo por el registro permanece vivo por el registro esperando por alguna petición esperando por alguna petición de algún cliente a no ser que se de algún cliente a no ser que se llame a llame a Naming.unbind()Naming.unbind()..

2 . La invocación remota de métodos (RMI)

Arrancar el registro

Page 30: TEMA 4.  Arquitectura de aplicaciones distribuidas

3030

El registro se puede reiniciar El registro se puede reiniciar desde la aplicación haciendo uso desde la aplicación haciendo uso de de LocateRegistry.createRegistry(2LocateRegistry.createRegistry(2005)005), en donde el 2005 es el , en donde el 2005 es el puerto en el que escucha. puerto en el que escucha.

2 . La invocación remota de métodos (RMI)

Arrancar el registro

Page 31: TEMA 4.  Arquitectura de aplicaciones distribuidas

3131

Los stubs establecen de forma Los stubs establecen de forma transparente las conexiones con la transparente las conexiones con la red y hacen que el objeto remoto red y hacen que el objeto remoto se comporte como si fuese local.se comporte como si fuese local.

Para crear los stubs usamos la Para crear los stubs usamos la herramienta herramienta rmicrmic sobre el código sobre el código compilado y creará los archivos compilado y creará los archivos necesarios. necesarios.

rmic HoraExactarmic HoraExacta

2 . La invocación remota de métodos (RMI)

Creación de stubs

Page 32: TEMA 4.  Arquitectura de aplicaciones distribuidas

3232

El resultado será una clase, que El resultado será una clase, que tendrá que tener el cliente y el tendrá que tener el cliente y el servidor:servidor:

– HoraExacta_Stub.classHoraExacta_Stub.class

2 . La invocación remota de métodos (RMI)

Creación de stubs y skeletons

Page 33: TEMA 4.  Arquitectura de aplicaciones distribuidas

3333

import java.rmi.*;import java.rmi.*;public class MuestraHoraExacta {public class MuestraHoraExacta {public static void main(String[] args) {public static void main(String[] args) {try {try {HoraExactaI t = HoraExactaI t =

(HoraExactaI)Naming.lookup("//canyella:2005/Ho(HoraExactaI)Naming.lookup("//canyella:2005/HoraExacta");raExacta");

for(int i = 0; i < 10; i++)for(int i = 0; i < 10; i++)System.out.println("Hora Exacta = " System.out.println("Hora Exacta = "

+t.obtenerHora());+t.obtenerHora());} catch(Exception e) {} catch(Exception e) {

}} }}

2 . La invocación remota de métodos (RMI)

Usando el objeto remoto