Upload
ronan-tyson
View
48
Download
2
Embed Size (px)
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
Citation preview
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).
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.
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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)
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)
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
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
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
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
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
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
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
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