Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Llegados a este punto ya podemos darnos cuenta de una de las principales dificultades de
la programacin distribuida cmo se comunican cliente y servidor?, a travs de que
lenguaje, entorno o herramienta?, es aqu cuando debemos hacer referencia a Java, Java es
una herramienta ideal para programacin distribuida debido a su portabilidad, seguridad y
amplio abanico de componentes. Desarrollando en Java podemos llegar a olvidarnos de dnde
vamos a ejecutar nuestro programa, ser en una mquina UNIX o en un servidor Windows
2000 Server?, y es ms, lo podemos preparar para que se ejecute en varios entornos
diferentes? Con Java todo esto es posible.
Finalicemos esta seccin dando una definicin muy bsica:
-Un sistema distribuido consiste en una coleccin de ordenadores autnomos unidos por
una red y con un sistema que les permite compartir recursos de hardware, software y
datos.
La cuestin bsica en la programacin de un sistema distribuido es cmo comunicarse con
otras mquinas a travs de la red. Resumiremos aqu diversas formas de atacar la
programacin de aplicaciones a travs de la red.
SOCKETS
Los sockets son puntos finales de enlaces de comunicaciones entre procesos. Los
procesos los tratan como descriptores de ficheros, de forma que se pueden intercambiar datos
con otros procesos recibiendo y transmitiendo a travs de sockets, el tipo de socket describe la
forma en la que se transfiere la informacin.
Sockets proveen al usuario de un interfaz para comunicarse a travs de la red con otro
sistema. Cada direccin de identificacin para sockets consiste en una direccin de Internet y
en un puerto. Se suelen utilizar los conocidos protocolos TCP/IP o UDP/IP, preferentemente el
primero.
Distinguimos los siguientes tipos de sockets:
-
Sockets Datagram: Son un servicio de transporte sin conexin, son ms eficientes que
TCP pero su utilizacin no es del todo fiable. Los datos se envan y reciben en
paquetes cuya entrega no est garantizada.
Sockets Raw: son sockets que dan acceso a protocolos de ms bajo nivel, no estn
soportados por Java.
Enviando Proceso
Recibiendo Proceso
Sistema Operativo
Sistema Operativo
Socket
A la hora de desarrollar una aplicacin con sockets debemos tener en cuenta lo siguiente:
Es necesario tratar de manera especial los sockets para evitar problemas de seguridad, lo
hacemos a travs de la clase de Java SecurityManager y del paquete java security,
podemos a travs de estos recursos incluso generar mensajes codificados a travs de
algoritmos DSA.
A la hora de conectar con BBDD, JDBC debe ser una opcin a tener en cuenta, JDBC es
un modelo de conexin a BBDD diseado por JAVA, su utilidad radica en que es til para
acceso a bases de datos de diferentes tipos y vendedores, SQL Server, Oracle, etc.
Cliente
Servidor
Stubs
Skeletons
Arquitectura RMI
Arquitectura de RMI:
-
En RMI toda la informacin sobre los servicios del servidor se dan en una definicin de
interface remota.
Si comparamos RMI con sockets percibiremos que RMI es ms simple. Adems, esta
tecnologa permite despreocuparnos del protocolo, en sockets depende de la aplicacin, si sta
es grande puede que nos tengamos que preocupar del protocolo.
CORBA
Hasta ahora hemos hablado de tcnicas de programacin que adquieren
implementacin a travs de unas clases o interfaces definidas, con CORBA (desarrollado por
OMG un consorcio de 700 compaas) el concepto cambia totalmente, CORBA (Common
Object Request Broker Architecture) ES UNA ESPECIFICACIN PARA CREAR Y USAR
OBJETOS DISTRIBUIDOS NO UN LENGUAJE DE PROGRAMACIN. Desarrollar
aplicaciones distribuidas con CORBA es similar a hacerlo con RMI porque una interfaz debe
ser definida primero, pero las interfaces de RMI son definidas en JAVA mientras que las de
CORBA emplean IDL.
Los objetos CORBA son diferentes porque:
-
El uso de CORBA es ms complejo de lo que hemos visto hasta ahora, pero tambin
bastante ms completo.
Otra de las caractersticas y al mismo tiempo diferencias con RMI es que CORBA fue
desarrollado con un lenguaje independiente donde los objetos de mueven en un sistema
heterogneo, RMI fue desarrollado para un lenguaje simple donde los objetos se desenvuelven
en un entorno con un lenguaje homogneo, adems CORBA soporta parmetros de entrada y
salida pero RMI no, lo cual son una ventajas claras de CORBA sobre RMI sin embargo
debemos tener en cuenta que los objetos CORBA no tienen recolector de basura y es nuestra
obligacin preocuparnos de ello, al contrario que con RMI.
Cliente
Implementacin
IDL
Cliente
IDL
Implimentacin
IDL
ORB
IDL
ORB
RED
CORBA: Ejemplo comunicacin
IDL nombres e identificadores son mapeados como nombres Java sin cambios.
Un constructor IDL puede ser mapeados a varios constructores java, los nombres
adicionales se crean aadiendo sufijos descriptivos.
Un cliente primero debe obtener una referencia a un objeto, despus establece una
conexin con l a travs de un interfaz y finalmente crea un objeto proxy si es
necesario, y devuelve una referencia al objeto.
IDL soporta herencia simple y mltiple (destacar que la herencia mltiple no est
soportada por java, para este tipo de cosas tenemos tie mechanist).
Por otra parte y si tanto cliente como servidor van a usar Java, y buscamos una
solucin sencilla para crear un sistema distribuido, la mejor opcin ser RMI. RMI es sin duda
la opcin ms integrada en Java, la de uso ms natural para un programador de Java y que
adems aporta un buen nmero de utilidades. Sin embargo su sencillez se puede transformar
en inflexibilidad si se quieren hacer cosas que los creadores de RMI no contemplan.
Por ltimo, si se quiere garantizar una casi absoluta capacidad de eleccin para
cualquier parmetro del sistema distribuido o si no vale Java para ambos extremos de la
comunicacin, la solucin es CORBA. Escoger CORBA sera slo la primera de las decisiones
que habra que tomar para crear un sistema distribuido, la siguiente sera escoger qu
implementacin de CORBA elegir, para lo cual hay muchos factores que evaluar: soporte del
lenguaje y plataforma que se quiere usar, precio, cumplimiento del estndar, servicios
adicionales, velocidad o soporte son slo algunas de las posibilidades. La eleccin de la
implementacin es algo que no se debe menospreciar porque una vez tomada una decisin es
difcil cambiar. Esto es as puesto que aunque las diferentes implementaciones son
interoperables, existen bastantes diferencias a la hora de programar como para que exista
portabilidad binaria o de fuentes, incluso si ambas implementaciones soportan el mismo
subconjunto o superconjunto de CORBA.
Por otro lado, CORBA es casi lo opuesto a RMI. Donde este aporta sencillez, CORBA
aporta un cierto nivel de complejidad. El premio a este esfuerzo es un sistema es flexible y que
se adapta a casi cualquier entorno de computacin existente.
AGENTES MOVILES
Los agentes mviles son entidades que circulan libremente por la red esperando
llamadas del cliente. Representan un nuevo paradigma en la programacin distribuida.
Estos agentes mviles presentan una serie de ventajas principales:
- Eficiencia: consumen menos recursos de red
- Utilizan menos ancho de banda
- Son robustos y tolerantes a fallos.
- Soportan entornos heterogneos.
- Buenos para aplicaciones de comercio electrnico.
- Fcil desarrollo.
Las cuestiones de seguridad son especialmente importantes en los agentes mviles, se
pretende cubrir dos objetivos:
-
Productividad
Compatibilidad
Eficiencia
Flexibilidad
Voyager viene sobradamente preparado para integrarse con CORBA, generando las
clases IDL de la aplicacin.
SOAP
SOAP (Simple Object Access Protocol) es un protocolo basado en XML que permite
comunicar componentes y aplicaciones mediante el conocido HTTP. Sera similar a hacer RPC
(llamada a procedimientos remotos) mediante HTTP y XML. De hecho es la evolucin del
protocolo XML-RPC que permite hacer llamadas a procedimientos remotos usando XML como
lenguaje comn y HTTP como protocolo de transporte.
Internet fue diseada para que mltiple sistemas se pudiesen comunicar entre si. Lo
ideal es que una aplicacin pueda usar componentes de otras aplicaciones, e incluso
desarrollados en otros lenguajes. Eso se consigue actualmente mediante CORBA y DCOM. No
obstante un desarrollo con estos estndares no es fcil de lograr y, sobre todo, la comunicacin
entre mdulo situados remotamente da problemas. El ms tpico es que haya un "firewall" por
el medio. Entonces la cosa se complica bastante. Como SOAP trabaja sobre HTTP, este
problema se minimiza ya que HTTP es un protocolo que se maneja muy bien con los
"cortafuegos".
Si queremos que la comunicacin SOAP sea segura no tenemos ms que usar el
protocolo HTTPS en lugar de HTTP.
Propiedades de SOAP:
Es un protocolo ligero
Es simple y extensible
JINI
JINI construye redes que pueden adaptarse a las demandas de sistemas dinmicos,
requiere una arquitectura innovadora que se acomode con eficiencia a un sistema complejo y a
los cambios. El ideal de JINI es que se adapte de forma automtica a las modificaciones que se
hagan en la red. Sin embargo, a pesar de esta complejidad aparente JINI tambin ha sido
pensado para ser fcil de usar y aprender. Adems, Jini es una ventaja para el programador ya
que el cdigo necesario se simplifica de forma destacable.
Jini puede convivir perfectamente con todas las tecnologas y servicios tpicos de una
red.
Todas las representaciones en Jini se hacen con objetos java, a esos objetos se
accede a travs de interfaces en Java (como se puede comprobar el acceso a travs de una
interfaz es tpico en la programacin distribuida).
Gracias a esta tecnologa podemos:
- Buscar servicios "multicast".
- Buscar servicios para autentificar cdigo.
- Buscar servicios que mandan alertas.
Para encontrar un servicio, un cliente Jini lo localiza por tipo en "Lookup Service"
(Interfaz de Java), despus mueve el servicio al cliente y el cdigo que el servicio necesita usar
es dinmicamente cargado en demanda.
Debemos saber que a la hora de requerir un servicio, la comunicacin se establece
entre el servicio y su proxy, esto acta de forma independiente al cortafuegos, el proceso es
independiente del protocolo, es decir, en el caso de que el protocolo cambiase no afectara al
cliente.
Jini utiliza RMI, varias son las razones de esto:
-
RMI puede pasar de forma completa los objetos (cdigo incluido) programados en
Java.
Se trabaja mejor con la Java Virtual Machine.
Obtenemos serializacin en el proceso.
Hay robustez y las configuraciones de seguridad son diversas.