Академический Документы
Профессиональный Документы
Культура Документы
comunicacin
Xavier Vilajosana Guilln
Leandro Navarro Moldes
PID_00184782
FUOC PID_00184782
Ninguna parte de esta publicacin, incluido el diseo general y la cubierta, puede ser copiada,
reproducida, almacenada o transmitida de ninguna forma, ni por ningn medio, sea ste elctrico,
qumico, mecnico, ptico, grabacin, fotocopia, o cualquier otro, sin la previa autorizacin escrita
de los titulares del copyright.
Mecanismos de comunicacin
Mecanismos de comunicacin
FUOC PID_00184782
ndice
Introduccin...............................................................................................
Objetivos.......................................................................................................
1.
Paradigmas de comunicacin.........................................................
1.1.
1.2.
11
1.3.
12
1.4.
14
1.5.
17
Mecanismos de comunicacin........................................................
19
2.1.
19
2.1.1.
2.
19
23
2.2.1.
23
2.2.2.
25
2.2.3.
26
2.2.4.
26
28
2.3.1.
30
2.3.2.
31
2.3.3.
34
2.3.4.
48
2.3.5.
REST ...............................................................................
49
Resumen.......................................................................................................
53
Bibliografa.................................................................................................
55
2.2.
2.3.
FUOC PID_00184782
Introduccin
Mecanismos de comunicacin
FUOC PID_00184782
Objetivos
Mecanismos de comunicacin
FUOC PID_00184782
1. Paradigmas de comunicacin
Todo mecanismo de comunicacin tiene que considerar aspectos como la fiabilidad en el envo, es decir, que el mecanismo nos asegurar que cualquier
informacin que se enva llegar, o en caso contrario, el mecanismo nos notificar que no ha podido enviar la informacin. Un mecanismo de comunicacin tambin puede garantizar la remisin en orden de la informacin que
se enva y definir la topologa del proceso de comunicacin, es decir, si los
mensajes se envan uno a uno (unicast o de igual a igual), uno a muchos (multicasting o broadcasting) o muchos a uno (cliente-servidor).
Mecanismos de comunicacin
FUOC PID_00184782
Figura 1
Los paradigmas de comunicacin comparten un mismo objetivo pero su mbito de aplicacin es diverso, dado que depende directamente de la aplicacin,
del hardware, de la interconexin entre procesos y de las caractersticas de la
Red. Hay paradigmas que slo sirven para establecer conexiones sncronas,
mientras que otros solo permiten conexiones asncronas. Tambin hay paradigmas que pueden ser usados tanto sncronamente como asncronamente.
Seguidamente veremos los paradigmas de comunicacin ms relevantes y que
engloban la mayora de formas de comunicacin entre procesos, programas
u objetos, ya sean en una misma mquina o en mquinas remotas. Hay que
remarcar que los paradigmas que se presentan no representan siempre un mismo escenario ni son adecuados para cualquier situacin. Algunos de ellos son
ms adecuados para la comunicacin de procesos a bajo nivel o incluso para
escenarios caracterizados por muchas restricciones, como es el caso de la comunicacin entre microcontroladores; otros son ms adecuados para estructurar la comunicacin en programas complejos y a alto nivel. Vemoslos.
1.1. Paso de mensajes
El paso de mensajes es un paradigma de comunicacin usado en programacin
orientada a objetos, computacin concurrente y paralela y computacin distribuida. En este modelo los procesos u objetos pueden enviar mensajes a los
otros procesos y recibirlos, e incluso sincronizarse en espera de algn mensaje.
Mecanismos de comunicacin
FUOC PID_00184782
Mecanismos de comunicacin
Los mensajes pueden ser enviados va red o usar memoria compartida, si est
(1)
En ingls, one-sided.
disponible. Las comunicaciones entre dos tareas ocurren a dos bandas, donde
los dos participantes tienen que invocar una operacin (enviar, por parte del
emisor, y recibir, por parte del receptor). Podemos denominar a estas comunicaciones operaciones cooperativas, puesto que tienen que ser realizadas por cada
proceso: el proceso que tiene los datos y el proceso que quiere acceder a los
datos. Tambin en algunas implementaciones, puede haber comunicaciones
de tipo unilateral1, si es un nico proceso el que invoca la operacin, colocando todos los parmetros necesarios; y la sincronizacin se hace de forma
implcita.
Conceptualmente, el paso de mensajes es el paradigma de comunicacin ms
explcito; el emisor genera un mensaje que enva a travs de un canal de comunicacin usando una primitiva especfica para llevar a cabo esta tarea. El
receptor, usando una primitiva, es capaz de leer el mensaje del canal. Este paradigma admite perfectamente tanto la comunicacin sncrona como la asncrona, que en todo caso solo tendra la limitacin de memoria del canal.
Como ventajas, el paso de mensajes permite enlazar con el hardware existente, puesto que se corresponde bien con arquitecturas que tengan una serie de
procesadores conectados por una red de comunicaciones (sea interconexin
interna o red cableada). En cuanto a la funcionalidad, incluye una mayor expresin disponible para los algoritmos concurrentes, dado que proporciona
control explcito y no habitual en la comunicacin entre procesos.
Por el contrario, el principal problema del paso de mensajes es la responsabilidad que el modelo hace recaer en el programador. Este tiene que implementar
explcitamente el esquema de distribucin de datos, las comunicaciones entre
las tareas, y su sincronizacin. En estos casos, su responsabilidad es evitar las
dependencias de datos, evitar abrazos mortales y condiciones de carrera en
las comunicaciones, as como implementar mecanismos de tolerancia a fallos
para sus aplicaciones.
En el paradigma de paso de mensajes es el programador quien directamente
controla el flujo de las operaciones y los datos. El medio ms usado para implementar este modelo de programacin es una biblioteca, que implementa la
API de primitivas habituales en entornos de paso de mensajes.
Abrazos mortales
Un abrazomortal (tambin
conocido como deadlock o interbloqueo) es una situacin
donde dos o ms acciones se
esperan mutuamente, incapaces de continuar hasta que las
otras acaben, con lo que ninguna de ellas logra acabar.
10
FUOC PID_00184782
Mecanismos de comunicacin
(2)
Creacin esttica (y/o dinmica) de grupos de tareas dentro de la aplicacin, para restringir el mbito de aplicacin de algunas primitivas. Permite separar conceptualmente unas interacciones de las otras dentro de la
aplicacin.
Primitivas de barrera
Las primitivas de barrera (o barrier, en ingls) son puntos de
sincronizacin o bloqueo de
mltiples tareas en un programa. La barrera tambin puede
ser el punto de sincronizacin
de varios programas o procesos distribuidos.
FUOC PID_00184782
11
Mecanismos de comunicacin
En el modelodememoriacompartida, el programador ve la aplicacin como una coleccin de tareas que normalmente son asignadas a
hilos de ejecucin en forma asncrona. Los hilos de ejecucin tienen
acceso al espacio compartido de memoria con los mecanismos de control mencionados antes.
(3)
En ingls, sockets.
(4)
FUOC PID_00184782
12
Mecanismos de comunicacin
(5)
En el caso de la ejecucin de
mtodos de objetos remotos, el
paradigma se denomina invocacin
remota de mtodos (en ingls, remote method invocation (RMI).
Lectura recomendada
En el artculo Implementing
remote procedure calls de
Birrell, Nelson, etc. se describe la primera realizacin de
un sistema de invocacin remota transparente. Hay que
destacar las comparaciones
de eficiencia.
FUOC PID_00184782
13
Un RPC es iniciado por un cliente, que enva una peticin a un servidor remoto para ejecutar un procedimiento o mtodo especfico. En esta llamada,
el cliente enva los parmetros al servidor, proceso que se denomina serializa7
que haya fallado la respuesta con los resultados de la ejecucin del mtodo.
De este modo, y para evitar una compleja gestin de las excepciones, se buscan
mtodos remotos que sean idempotentes, es decir, que en caso de ser ejecutados ms de una vez, el resultado sea el mismo.
Figura 4
La invocacin remota normalmente usa una arquitectura de componentes formada por los elementos siguientes:
Mecanismos de comunicacin
(7)
En ingls, marshalling.
FUOC PID_00184782
14
Mecanismos de comunicacin
stub y que despus, ya de forma local, invoca el mtodo del objeto remoto.
Generalmente, se le denomina skeleton.
Figura 5
Se trata de un paradigma de comunicacin asncrono en el que los emisores de mensajes8 no envan sus mensajes a receptores especficos. Por
el contrario, los mensajes se publican en diferentes categoras sin saber
quines son los suscriptores.
En ingls, publishers.
FUOC PID_00184782
15
Mecanismos de comunicacin
Figura 6
Para poder tener el comportamiento descrito, en el paradigma de publicacin-suscripcin los procesos actan con los siguientes roles:
a) Productor de informacin: aplicacin que tiene la informacin que se
quiere difundir. El productor publica esta informacin sin tener que saber
quin est interesado en recibirla. Enva la informacin a travs de canales.
b) Consumidor de informacin: aplicacin interesada en recibir informacin. El consumidor se suscribe en los canales que diseminan la informacin
que le interesa. Recibe esta informacin por los canales a los que est suscrito.
c)Mediador9: est entre el productor y el consumidor de informacin. Recibe
informacin de los productores y peticiones de suscripcin de los consumidores. Tambin se encarga de encaminar la informacin publicada a los destinatarios suscritos en el canal. Este mediador puede estar distribuido. En este caso,
hace falta que los diferentes mediadores se organicen para proveer los canales.
d)Canal: son los conectores (lgicos) entre los productores y los consumidores de informacin. El canal determina varias de las propiedades de la informacin que se distribuye y de las funcionalidades que se soportan: tipo de
informacin; formato de los datos; posibilidades de personalizacin del canal
por parte del usuario (por ejemplo, la seleccin de contenidos o los modos de
operacin); si el contenido expira o es persistente; la estrategia que se seguir
para hacer las actualizaciones; si los datos se entregan solo una vez (como en
la televisin) o si, en cambio, garantizamos que se pueda recibir el contenido independientemente del momento en que se haya generado; el modo de
operacin (si se le da apoyo por el modo de operacin en desconectado); el
pago (cul es la poltica de pago que se usa: pagar por ver, por tiempo, por
contenido...).
(9)
En ingls, broker.
FUOC PID_00184782
16
Mecanismos de comunicacin
(10)
En ingls, tailoring.
FUOC PID_00184782
17
Usenet
Usenet es un histrico sistema de comunicaciones entre redes de computadoras que se
cre en 1979, antes del Internet que hoy conocemos. Se trata de una red formada por
grupos de noticias que incluye discusiones sobre diferentes cuestiones, contenidos musicales, pelculas, series de televisin y documentos digitales.
El funcionamiento es muy similar al de las redes de igual a igual porque los usuarios
comparten los contenidos sin nimo de lucro y sin que una nica empresa los gestione
o controle las descargas.
Como las redes de igual a igual, tambin funciona a travs de un protocolo abierto y
descentralizado.
Actualmente se trata de una alternativa poco utilizada frente a las opciones existentes
en la web o en comparacin con los sistemas de igual a igual de mayor popularidad. Sin
embargo, contienen una importante cantidad de informacin disponible y millones de
archivos compartidos.
b)Bolsaynoticias. Los sistemas que informan sobre la evolucin de las acciones en la bolsa o las agencias de noticias son otro ejemplo de sistemas de
publicacin-suscripcin. En estos sistemas, los usuarios especifican unos intereses y el sistema tiene que garantizar que los usuarios dispongan en todo
momento de la informacin tan actualizada como sea posible.
c) Sistemas de informacin de trnsito. Como en las aplicaciones para la
bolsa y las noticias, la informacin debe enviarse la mayora de las veces en
tiempo real. La informacin tambin se distribuye por medio de ordenadores
o dispositivos mviles.
d)Distribucindesoftware. Muchos sistemas requieren que el software se
actualice frecuentemente, por ejemplo, el gestor de actualizaciones de algunos
sistemas operativos. Utilizando una aplicacin de publicacin-suscripcin se
consigue que el sistema est en funcionamiento continuo y actualizado en la
ltima versin sin problemas de seguridad para las actualizaciones.
e)Serviciosdealertas,monitorizaciones,vigilanciaycontrol.
El paradigma de publicacin-suscripcin normalmente se implementa siguiendo un paradigma de programacin por eventos que facilita la existencia
de publicadores y suscriptores.
1.5. Modelo de programacin por eventos
El paradigma de publicacin-suscripcin requiere de modelos de programacin que faciliten la asincrona y el desacoplamiento entre componentes. De
este modo uno de los paradigmas de programacin ms usados para implementar este modelo de comunicacin es el que se denomina programacin por
eventos.
Mecanismos de comunicacin
FUOC PID_00184782
18
En la programacin secuencial (o estructurada), es el programador quien define cul es el flujo del programa, mientras que en la programacin dirigida
por eventos, es el propio usuario que acciona el programa quien dirige el flujo
de ejecucin. A cada accin del usuario, se generar un evento al cual el programa dar respuesta.
Un programa dirigido por eventos normalmente implementa una mquina de
estados donde las transiciones de estado vienen dadas por eventos. La tcnica ms usada para la implementacin de la comunicacin por eventos es el
patrn de diseo llamado observador. En este patrn, un proceso u objeto
observador es el encargado de recibir las notificaciones de sus sujetos, es decir, aquellos procesos que generan eventos conocen a los observadores y les
notifican el evento en cuanto sucede.
Este paradigma de programacin se usa para implementar el paradigma de publicacin-suscripcin, pero tambin en el desarrollo de las interfaces grficas
de usuario, en la programacin de sistemas embebidos y en protocolos estndar de mensajera instantnea como XMPP.
Figura 7
Mecanismos de comunicacin
19
FUOC PID_00184782
Mecanismos de comunicacin
2. Mecanismos de comunicacin
(11)
En ingls, bytes.
11
El marshalling
El mecanismo de seriacin y
deseriacin se denomina marshalling y un-marshalling en honor al general Marshall, un militar que organiz el desembarco de Normanda de la Segunda Guerra Mundial: las tropas
y los efectivos militares se dispusieron con gran orden sobre
la playa de Dover. Un mecanismo cuidadoso y ordenado de
transporte en serie por barco
acab reproduciendo la misma organizacin sobre la playa
de Normanda. Un tanque sera una estructura de datos en
nuestras aplicaciones, un barco
sera un paquete IP, un soldado sera un entero, etc.
(12)
FUOC PID_00184782
20
los tipos de datos y las maneras de construir tipos de datos complejos con el
formato escogido, y con los tipos de datos de los lenguajes de programacin
habituales.
Los tipos de datos ms habituales se corresponden con los tipos de datos primitivos de los procesadores y de los lenguajes de programacin ms populares,
como el C o el C++.
Hay varias estrategias posibles de conversin de los datos representados en cada computador para ser transferidos desde formatos internos hasta un formato
de serie. El objetivo es reducir la complejidad y el coste de conversin de datos:
a) Enviar en el formato interno del emisor.
b) Transformar los datos para enviarlos en el formato interno del receptor.
En ambos casos el problema es complejo, puesto que uno de los extremos no
tiene que hacer nada mientras que el otro tendra que saber cmo representar
los datos para cualquier posible representacin (arquitectura). No parece una
solucin viable.
c) Enviar en una forma cannica intermedia (por ejemplo, como se representan las cabeceras IP que son big-endian). Cada computador slo tiene que saber cmo tiene que hacer la conversin entre su formato interno y el formato
cannico.
d) No conversin, si los dos computadores son similares. En el caso anterior,
puede pasar que dos mquinas con la misma arquitectura interna tengan que
hacer dos conversiones innecesarias para que los datos viajen en el formato
cannico cuando se podran haber comunicado sin hacer ninguna conversin.
Si se pudiera conocer el formato del computador del otro extremo, se podra
optimizar la transferencia ahorrando conversiones superfluas.
Mecanismos de comunicacin
FUOC PID_00184782
21
Mecanismos de comunicacin
Big-endian: el octeto ms significativo se guarda en la direccin de memoria menor, que ser la direccin del dato.
Figura 8
Formatos little-endian
Son little-endian los procesadores Intel 80X86, Pentium, Alfa, los sistemas operativos Windows, OSF/1 y varios formatos
de archivos.
Formatos big-endian
Son big-endians los procesadores Motorola 680x0, el PARISC de Hewlett-Packard y
el SuperSPARC de Sun. Los
procesadores MIPS de Silicon
Graphics y el PowerPC de IBM/
Motorola pueden trabajar como little-endian y big-endian.
El sistema operativo de Apple
tambin es big-endian, y tambin la mquina virtual de Java. Internet tambin es big-endian: en TCP y en IP se transmite primero el octeto ms
significativo.
Ejemplos de codificacin
binaria
Algunos ejemplos de protocolos que usan este tipo de codificacin son: el DNS, el LDAP,
el SNMP, el NFS.
En esta codificacin, los datos estructurados tambin son transformados a texto, de forma que se necesitan convenios o protocolos de transformacin de
los mismos. Los datos, una vez codificados, mantienen en cierto modo su legibilidad con detrimento de la cantidad de espacio que ocupan.
Ejemplos de codificacin
textual
La codificacin textual es usada por protocolos como HTTP,
SMTP, POP o IMAP.
FUOC PID_00184782
22
Delimitacin de datos
Cualquier codificacin tiene que determinar una manera de separar las
partes que componen una secuencia de datos.
Mecanismos de comunicacin
FUOC PID_00184782
23
Mecanismos de comunicacin
(13)
b)Binarios:
(14)
FUOC PID_00184782
24
Podis ver que no es una representacin compacta pero s que es muy informativa y fcil de entender. En el caso del XML-RPC, los tipos de los parmetros
se especifican como etiquetas XML, como la i4 para tipos enteros que observamos en el ejemplo anterior. En cambio, otros mecanismos de invocacin ms
complejos como el SOAP se aprovechan ms de las posibilidades del XML.
Ms concretamente, uno de los puntos a destacar de los documentos XML es
la validacin o restriccin de documentos en base a contratos establecidos. En
general, podemos decir que un documento que cumple la sintaxis del XML se
dice que est bien formado. Si adems el documento cumple un conjunto
de restricciones adicionales especificadas por cierto contrato, se puede decir
que es vlido.
Las caractersticasdellenguajedelcontrato, su gramtica (elementos de una
lengua y sus combinaciones), se pueden expresar en una seccin del documento, o en un documento aparte, de dos maneras:
1) DTD, o definicin del tipo de documento, que es el nico formato que
exista a comienzos del XML. La sintaxis de un DTD no es XML y carece de
tipos de datos para restringir los valores.
Mecanismos de comunicacin
FUOC PID_00184782
25
Mecanismos de comunicacin
Control sobre los datos: longitud length (nmero de caracteres de la cadena, binario), maxlength (mxima longitud de la cadena, binario), lexical representation (representaciones posibles, por ejemplo, DD-MM-AAAA),
enumeration, maxInclusive (mximo posible), maxExclusive (mximo exclusivo), minInclusive (mnimo posible), minExclusive (mnimo exclusivo), precision (nmero de dgitos), scale (dgitos con parte decimal), encoding (binario).
Estas caractersticas del XML y su XML Schema lo hacen idneo como lenguaje de codificacin de datos interoperable. En esta lnea, se han creado muchos
contratos basados en esquemas XML como el SensorML, MathML, BioML,
XMPP o el SOAP entre otros.
2.2.2. Codificacin textual con JSON
La codificacin JSON15 ha adquirido cierta relevancia como formato ligero para el intercambio de datos en entornos AJAX, sobre todo desde la evolucin de
la web a la Web 2.0. El JSON es un subconjunto de la notacin literal de objetos del Javascript, pero no est restringido a este lenguaje, sino que es usado
por multitud de entornos de programacin.
Una de las ventajas del JSON sobre el XML como formato de intercambio de
datos es que escribir un analizador semntico del JSON es mucho ms sencillo.
En Javascript, el JSON se puede analizar trivialmente usando el procedimiento
eval y por eso se ha popularizado en entornos web de invocacin remota como AJAX. Tambin se ha utilizado como lenguaje de codificacin de servicios
REST16 y en mecanismos de invocacin, como por ejemplo el JSON-RPC.
De todas maneras, el JSON no especifica tipo de datos ni permite restricciones
como el XML y su XML Schema. Es simplemente un formato textual para
agrupar y estructurar contenidos. Aun as, su simplicidad y rapidez hacen que
lo utilicen servidores de Google o Yahoo, donde el volumen del flujo de datos
entre cliente y servidor es muy importante.
(15)
FUOC PID_00184782
26
Mecanismos de comunicacin
(17)
ta todos los tipos del lenguaje C excepto el puntero a funcin. Define la forma
cannica intermedia que usa para transmitir los datos.
El sistema de archivos distribuido NFS utiliza XDR como un lenguaje de descripcin de datos para el intercambio de datos; se utiliza con las llamadas a
procedimiento remoto ONC RPC.
El estndar de XDR
El estndar de XDR est definido en el RFC 4506 (RFC 1014
y RFC 1832 obsoletos).
Figura 9
(18)
Reglasdecodificacin:
FUOC PID_00184782
27
DER: distinguished ...; no tiene opciones (por seguridad); longitud codificacin definida.
Campodelongitud:
Si longitud: 0-127 octetos 0, longitud, valor
Si longitud > 127 1, valor, valor (incluye longitud)
Tipocompuesto:
Figura 10
Tiene un rendimiento menor que el XDR, puesto que es ms complejo, el alineamiento de valores en palabras es peor, la (des)seriacin es algo ms compleja (por ejemplo, para tratar el campo longitud).
Figura 11
Mecanismos de comunicacin
28
FUOC PID_00184782
Mecanismos de comunicacin
Binario
Legible
ASN.1
S (XER, va ECN)
BSON
No
Comma-separated values
(CSV)
No
JSON
Netstrings
OGDL
Property list
Protocol buffers
Parcial
S-expressions
No
No
Thrift
Parcial
No
XML
YAML
No
(19)
FUOC PID_00184782
29
Mecanismos de comunicacin
(20)
En ingls, middleware.
(21)
En ingls, interfaces.
Los stubs constituyen el cdigo intermedio encargado de gestionar conexiones remotas entre el cliente y el servidor, y establecer protocolos
de codificacin y de parmetros y resultados de la invocacin remota.
Los stubs son as los artfices de la transparencia de acceso y localizacin
en el software intermediario20 de invocacin remota de procedimientos.
terfaces
remotas.
En local, los lenguajes de programacin organizan el programa en mdulos que se comunican entre ellos mediante llamadas a procedimientos. Para controlar las interacciones entre mdulos, la interfaz de cada
mdulo define la firma de los procedimientos o funciones que pueden
ser invocados.
En invocacin remota, es imprescindible definir una interfaz de los procedimientos o servicios que se van a llamar remotamente. A partir de la informacin de firmas y parmetros de esta interfaz, las herramientas de generacin
de stubs podrn crear el cdigo intermedio necesario para hacer estas llamadas
remotas transparentes al programador.
Siguen este modelo de invocacin los mecanismos de llamada de ONC-RPC
y RMI, que operan en un entorno homogneo: el mismo lenguaje de programacin y, en el caso de Java-RMI, la misma mquina (la mquina virtual de
Java). Esta separacin entre la mquina proceso que solicita un servicio y
quien lo lleva a cabo posibilita la introduccin de variantes que permiten, en
general, la interaccin entre sistemas heterogneos en los aspectos siguientes:
El soporte a la heterogeneidad provoca una complejidad ms grande del entorno. Se pueden controlar ms parmetros, pero el programador est obligado a tratar con estos: la llamada no es transparente, sino que el programador tiene que escribir mucho (decidir varios aspectos) para hacer cualquier
invocacin remota.
FUOC PID_00184782
30
De este modo, en los mecanismos de invocacin remota que soportan la heterogeneidad, es usual la utilizacin de un lenguaje de definicin de interfaces
(IDL22).
Mecanismos de comunicacin
(22)
bres .
(23)
FUOC PID_00184782
31
Mecanismos de comunicacin
(24)
ce.
Un conector o socket es un punto de acceso a los servicios de comunicacin en el mbito de transporte. Cada socket tiene asociada una direccin que lo identifica. Conocindola, se puede establecer una comunicacin con un socket para que acte como extremo de un canal bidireccional.
(25)
En ingls, kernel.
FUOC PID_00184782
32
bind(): usado en el lado del servidor para asociar el conector a una direccin y un
puerto.
connect(): usado en el cliente para conectarse a una direccin y puerto del servidor.
Al finalizar la llamada, se establece la conexin.
send() y recv(), o write() y read(), o recvfrom() y sendto(): se usan para recibir y leer datos
de un conector.
close(): se cierra la conexin (en caso de ser TCP). Se liberan los recursos.
select(): se usa para seleccionar los conectores que estn preparados para lectura/escritura o con errores.
La figura 13 ilustra el ciclo de vida de un conector TCP u orientado a la conexin. Una vez el conector se ha creado en el lado del servidor y se vincula a
una direccin y un puerto, se mantiene a la espera de peticiones por parte del
cliente. Cuando el cliente invoca el connect, el servidor acepta la peticin y se
establece la comunicacin.
Mecanismos de comunicacin
(26)
En ingls, sockets.
FUOC PID_00184782
33
Mecanismos de comunicacin
34
FUOC PID_00184782
Mecanismos de comunicacin
(27)
VM es la sigla de la expresin
inglesa virtual machine.
semntica del modelo de objetos locales de Java y facilita de este modo la implantacin y el uso de objetos distribuidos. En el modelo de objetos distribuidos de Java, un objeto remoto es aquel cuyos mtodos pueden ser invocados
por objetos que se encuentran en una mquina virtual (VM27) diferente. Los
objetos de este tipo se describen por una o ms interfaces remotas que contienen la definicin de los mtodos del objeto que es posible invocar remotamente.
(28)
28
Integrar el modelo de objetos distribuidos en el lenguaje Java de una manera natural, conservando en la medida de lo posible la semntica de los
objetos Java.
35
FUOC PID_00184782
Mecanismos de comunicacin
(29)
o el paso por valor . Para invocar los mtodos de un objeto remoto, en lugar
de una copia del objeto, la mquina donde est el objeto remoto enva un
objeto stub (su servidor intermediario o representante que acta en referencia
al objeto remoto), que se construye dinmicamente y se carga durante la ejecucin, cuando es necesario.
Para hacer que un objeto pueda viajar se tiene que seriar (Java object serialization). Los datos y el cdigo de la implementacin tienen que trasladarse y crear
una copia de estos en el lugar remoto. Esto implica que cualquier clase Java que
sea serializable puede ser pasada por parmetro entre objetos remotos RMI.
(30)
FUOC PID_00184782
36
Mecanismos de comunicacin
RMI y Java ofrecen en su API objetos para gestionar la seguridad de la aplicacin, como por ejemplo evitando que un applet pueda acceder a disco, o
controlando los puertos que pueden abrir para establecer conexiones. Uno de
estos objetos es el SecurityManager, al que se le pueden especificar diferentes
polticas de seguridad para una aplicacin.
Hay que mencionar que con posterioridad han aparecido mecanismos parecidos en otros lenguajes de programacin como es el caso de Remoting en Csharp (C#).
SUN-RPC
El RFC 1831 describe el SUN-RPC, que fue diseado para la comunicacin
cliente-servidor por el sistema de ficheros en red NFS de SUN. Tambin se
denomina ONC-RPC (open network computing) y es usado por varios sistemas
operativos de SUN as como en las distribuciones de NFS. En este protocolo, los
desarrolladores pueden hacer uso de RPC sobre conexiones UDP o TCP segn
sus preferencias. SUN-RPC usa XDR como metalenguaje de codificacin de
datos y un generador de stubs para el lenguaje de programacin C denominado
rpcgen.
Lectura complementaria
R.Srinivasan (agosto, 1995).
RPC: Remote Procedure Call
Protocol Specification Version 2. Internet RFC 1831.
FUOC PID_00184782
37
Mecanismos de comunicacin
FUOC PID_00184782
38
Mecanismos de comunicacin
#include <stdio.h>
#include <rpc/rpc.h>
#include"FileReadWrite.h"
void * write_2(writeargs *a)
{
/* do the writing to the file */
}
Data * read_2(readargs * a)
{
static Data result;
/* tiene que ser static */
result.buffer = ...
/* leemos el fichero */
result.length = ...
/* cantidad leda del fichero */
return &result;
}
(32)
En ingls, broadcast.
cliente, no nota el duplicado; s que lo nota durante proceso, y lo elimina. Esta memoria de corto plazo no es problema en una red local.
XML-RPC o invocacin sobre web (HTTP)
El protocolo de transferencia de la web, el HTTP, fue concebido como un mecanismo de peticin/respuesta en el que se intercambian mensajes y se invocan mtodos predefinidos (GET, HEAD, HEDE, TABLA, DELETE, PROPFIND,
(33)
39
FUOC PID_00184782
Mecanismos de comunicacin
40
FUOC PID_00184782
Mecanismos de comunicacin
<value>juan</value>
</member>
<member>
<name>edad</name>
<value><i4>42</i4><value>
</member>
</struct>
</value>
</param>
</params>
</methodCall>
</html>
Respuesta:
<?xml version='1.0'?>
<methodResponse>
<params>
<param>
<value>
<struct>
<member>
<name>id</name>
<value><int>123456</int></value>
</member>
<member>
<name>nombre_completo</name>
<value>juan perez</value>
</member>
41
FUOC PID_00184782
Mecanismos de comunicacin
</struct>
</value>
</param>
</params>
</methodResponse>
Se tiene que tener en cuenta que el XML-RPC se ha diseado para ser muy
ligero y muy simple. Por eso, no es comparable en funcionalidades a sistemas
como el CORBA o la RMI. As, el XML-RPC no define interfaces remotas, no
tiene compilador o generador de stubs, no dispone de servicios de nombres, no
tiene excepciones y no ofrece paso por referencia. Est diseado para servicios
sin estado con una interfaz muy simple, donde para localizar el servicio se
utiliza la URL estndar del servidor. Adems, el cliente tiene que conocer los
parmetros y los tipos del servicio previamente para poderlo invocar; toda la
responsabilidad queda en el cliente. Por eso no es necesaria la generacin de
stubs.
SOAP
La invocacin de objetos distribuidos mediante tecnologas RMI, CORBA o
DCOM tiene un problema fundamental de interoperabilidad entre sistemas
heterogneos. En consecuencia, ha sido necesario utilizar complejos puentes
y pasarelas34 que permitieran la traduccin de protocolos y su comunicacin.
De este modo, sistemas desarrollados en tecnologas Microsoft (DCOM) encontraban dificultades para comunicarse con sistemas basados en el CORBA.
Adems, el uso de puertos propietarios y codificacin binaria ha ocasionado
tambin problemas debido a cortafuegos y redes corporativas protegidas. Para
resolver estos problemas, la tendencia actual es apostar por protocolos abiertos e interoperables, como el HTTP como canal de transporte y el XML como
lenguaje de codificacin de informacin. En esta lnea, la compaa Userland
empez definiendo el protocolo XML-RPC como protocolo sencillo de invocacin remota basado en el HTTP y el XML. Ms tarde, Userland y Microsoft
desarrollaron un protocolo de invocacin remota ms completo y complejo
denominado SOAP.
(34)
En ingls, bridges.
FUOC PID_00184782
42
1)LosmensajesSOAP
Como hemos visto, SOAP es un protocolo simple basado en XML que permite
que las aplicaciones intercambien informacin sobre HTTP.
Un mensaje SOAP es un documento ordinario en XML que contiene los siguientes elementos:
Todos los elementos se declaran en el espacio de nombres por defecto del elemento envelope.
Esqueleto de un mensaje SOAP
<?xmlv version="1.0"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
<soap:Header>
...
</soap:Header>
<soap:Body>
...
<soap:Fault>
...
</soap:Fault>
</soap:Body>
</soap:Envelope>
a)Elelementoenvelope
El elemento envelope es la raz del mensaje SOAP y define el documento como mensaje SOAP. El xmlns:soap namespace siempre tomar el valor http://
www.w3.org/2001/12/soap-envelope, dado que define el envelope como envelope de SOAP. Si se usara otro espacio de nombres, la aplicacin generara un
error y descartara el mensaje.
El atributo encodingStyle se usa para definir los tipos de datos del documento.
El atributo puede aparecer en cualquier elemento SOAP y se aplica al propio
elemento y a sus descendientes (hijos). Un mensaje SOAP no tiene una definicin de tipo por defecto sino que siempre se tiene que enlazar a alguna. Para
hacerlo usaremos:
Mecanismos de comunicacin
FUOC PID_00184782
43
Mecanismos de comunicacin
soap:encodingStyle="URI"
b)Elelementoheader
El elemento header es opcional y contiene informacin especfica de la aplicacin, como por ejemplo, informacin de autenticacin, de pago, etc.
Si existe un elemento header, este ser el primero de los hijos (descendientes)
del elemento envelope.
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
<soap:Header>
<m:Trans xmlns:m="http://www.uoc.edu/transaction/" soap:mustUnderstand="1">
234
</m:Trans>
</soap:Header>
...
...
</soap:Envelope>
El ejemplo contiene un header con el elemento trans, un atributo mustUnderstand con valor 1 y un valor 234.
SOAP define tres atributos en el espacio de nombres por defecto http://
www.w3.org/2001/12/soap-envelope. Estos atributos son mustUnderstand, actor, y encodingStyle.
Los atributos de header definen cmo lo tiene que procesar el receptor del
mensaje. El atributo mustUnderstand se usa para indicar al receptor si tiene
que saber procesar el elemento, o no. Si el elemento mustUnderstand = 1, el
receptor tiene que entender el valor que recibe por este elemento. En caso de
que no lo reconozca, el receptor fallar indicando que no ha podido procesar
el header.
<?xml version="1.0"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
<soap:Header>
<m:Trans xmlns:m="http://www.uoc.edu/transaction/" soap:actor="http://www.uoc.edu/appml/">
234
</m:Trans>
</soap:Header>
...
FUOC PID_00184782
44
...
</soap:Envelope>
El atributo actor se usa para dirigir el elemento header a un destinatario especfico. La sintaxis es:
soap:actor="URI"
c)Elelementobody
Cada uno de los hijos del elemento body tiene que indicar su espacio de nombres.
<?xml version="1.0"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
<soap:Body>
<m:GetNotes xmlns:m="http://www.uoc.edu/notes">
<m:Item>Redes</m:Item>
</m:GetNotes>
</soap:Body>
</soap:Envelope>
d)Elelementofault
Elemento opcional que es usado para indicar errores e informacin de estado.
Si este elemento est presente, siempre ser descendiente del elemento body.
El elemento fault slo aparecer una vez como hijo del elemento body.
Mecanismos de comunicacin
45
FUOC PID_00184782
Descripcin
<faultcode>
<faultstring>
<faultactor>
<detail>
2)CdigosfaultdeSOAP
Los cdigos del subelemento faultcode son:
Error
Descripcin
VersionMismatch
MustUnderstand
Cliente
Server
3)InterfacesSOAP:lenguajededescripcindeservicioswebowebservice
descriptionlanguage(WSDL)
Como en cualquier tecnologa de invocacin remota, es necesario establecer
un contrato que defina el servicio ofrecido. Este contrato definir el nombre de
los mtodos y los tipos de los parmetros y el resultado de estos. El WSDL es un
lenguaje XML que define el nombre de los mtodos y los tipos de parmetros
que aceptan. Adems, en cada lenguaje habr herramientas que generen stubs
a partir del contrato (WSDL2Java, WSDL2C#, WSDL2Python...).
A diferencia del Java RMI, tanto los clientes como los servidores SOAP se
pueden implementar en cualquier lenguaje de programacin (con bibliotecas
SOAP, est claro). WSDL es tambin un estndar del W3C.
Veamos un ejemplo de WSDL para la siguiente clase Java:
public class Calculator {
public int add(int y1, int y2) {
return y1 + y2;
}
public int subtract(int y1, int y2) {
return y1 - y2;
}
Mecanismos de comunicacin
FUOC PID_00184782
46
Mecanismos de comunicacin
FUOC PID_00184782
47
<wsdlsoap:operation soapAction=""/>
<wsdl:input name="subtractRequest">
<wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
namespace="http://DefaultNamespace" use="encoded"/>
</wsdl:input>
<wsdl:output name="subtractResponse">
<wsdlsoap:body encodingStyle=http://schemas.xmlsoap.org/soap/encoding/
namespace="http://localhost:8080/axis/Calculator.jws" use="encoded"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="CalculatorService">
<wsdl:port binding="impl:CalculatorSoapBinding" name="Calculator">
<wsdlsoap:address location="http://localhost:8080/axis/Calculator.jws"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
Podemos observar que en este fichero encontramos una definicin de las operaciones ofrecidas por el servicio (portType, operation), de los mensajes de solicitud y respuesta intercambiados (message) incluidos el tipo de parmetros
(type), y de los protocolos de comunicacin (bindings).
Figura 15
En general, no ser necesario que el programador conozca el formato del lenguaje WSDL. Hay herramientas automatizadas que generan el WSDL a partir
de cdigo en cada lenguaje de programacin. Aun as, slo los tipos bsicos
estn estandarizados en el SOAP.
As, por ejemplo, la correspondencia estndar para Java es la siguiente:
xsd:base64Binary byte[]
xsd:boolean boolean
xsd:byte byte
xsd:dateTime java.util.Calendar
xsd:decimal java.math.BigDecimal
Mecanismos de comunicacin
FUOC PID_00184782
48
Mecanismos de comunicacin
xsd:double double
xsd:float float
xsd:hexBinary byte[]
xsd:int int
xsd:integer java.math.BigInteger
xsd:long long
xsd:QName javax.xml.namespace.QName
xsd:short short
xsd:string java.lang.String
Observamos en la figura 15 que el SOAP s que utiliza en su codificacin tipo estndar XML del XML Schema como xsd:string o xsd int entre otros. En
realidad, se pueden usar otros esquemas XML de codificacin.
Lo que se describe de este modo sigue el esquema referenciado con la URL
http://schemas.xmlsoap.org/soap/encoding/.
La utilizacin de otros tipos complejos ya depende de cada lenguaje y entorno.
Algunas veces se tiene que implementar la codificacin (o usar alguna herramienta del entorno). En general los arrays son aceptados en la mayora de
implementaciones como estructura de datos compuesta. Aun as, colecciones
complejas pueden no ser reconocidas por otras implementaciones del SOAP
en lenguajes diferentes.
En trminos de seguridad, SOAP ofrece ampliaciones para la inclusin de certificados en cada mensaje. Aparte, un mensaje SOAP se puede enviar a travs
de un canal asegurado con TLS o SSH, del mismo modo que lo podemos hacer
con las conexiones HTTP.
2.3.4. Localizacin de servicios
Para invocar servicios remotos desde un cliente, primero hay que localizarlos
mediante algn mtodo. As, es posible usar localizaciones directas al servicio
(incluyendo el servidor y el puerto) o bien mediante algn servicio de nom-
(35)
(36)
49
FUOC PID_00184782
Mecanismos de comunicacin
(37)
En ingls, discovery.
(38)
En ingls, bind.
Originariamente, REST haca referencia a una arquitectura de aplicaciones en red, pero el trmino ha sido generalizado para referirse a cualquier interfaz web que usa HTTP y XML para el intercambio de informacin. Se diferencia de SOAP o XML-RPC porque REST no usa ninguna abstraccin adicional fuera de las que ofrece el propio HTTP.
(39)
FUOC PID_00184782
50
En la web los agentes de usuario interactan con los recursos, y los recursos
son todo aquello que puede ser denominado y representado. Cada recurso
se puede resolver a travs de una nica interfaz (URI).
La interaccin con los recursos (ubicados a travs de su URI nico) se realiza mediante una interfaz uniforme usando los verbos estndar de HTTP
(GET, POST, PUT y DELETE). Tambin es importante en la interaccin la
declaracin del tipo del recurso, que es designado mediante el encabezamiento HTTP Content-Type (XHTML, XML, JPG, PNG y JSON son algunos
tipos de medios conocidos).
Figura 17
Mecanismos de comunicacin
Una arquitectura de
aplicaciones
Un estilo de arquitectura es un
conjunto de restricciones que
se pueden aplicar al crear algo. Un estilo de arquitectura
de software es un conjunto de
restricciones que describen las
caractersticas que pueden utilizarse para guiar la implementacin de un sistema de software. REST es un estilo de arquitectura que se puede utilizar para crear software, en el
cual los clientes (agentes de
usuario) pueden efectuar peticiones de servicios (extremos).
REST es una forma de implementar un estilo de arquitectura de cliente/servidor, de hecho, REST explcitamente se
basa en el estilo de arquitectura de cliente/servidor.
FUOC PID_00184782
51
Un pequeo ejemplo
Imaginmonos que la UOC os quiere ofrecer un servicio de consulta de notas. Este servicio nos podra dar nuestra nota de la asignatura que le pidiramos.
Al crear el servicio RESTful, podramos responder a las siguientes preguntas:
1) Cules sern los recursos?
2) Cules sern los identificadores URI que se usarn para identificar los recursos?
3) Qu verbos de HTTP permitiremos?
Los recursos en nuestro servicio REST son las asignaturas, los estudiantes y las notas. De
este modo se construira la representacin en XML de estos tres recursos: notas, asignaturas y estudiantes. (La representacin de los recursos puede ser en otro meta-lenguaje de
definicin. No hace falta que sea XML.)
Una vez definidos los recursos se definiran las URI para estos recursos. La definicin solo
hace falta que sea relativa, dado que la identificacin absoluta vendr dada por la URL
del servidor en la que se ejecutar el servicio. En nuestro ejemplo podramos utilizar /
{alumno}, /{asignatura} y /{nota} como URI de cada uno de los recursos. As pues, /{Jos
Armengol}/{Estructura de redes de computadores (05.098)/{B} correspondera a la nota B
del alumno Juan Armengol para la asignatura Estructura de redes de computadores (75.098).
Finalmente, para determinar las operaciones que se pueden hacer sobre el recurso, solamente tenemos que ver que este ser de solo lectura, puesto que es una aplicacin de
consulta para los estudiantes; as pues, permitiramos la operacin GET.
VentajasdeREST
REST se est convirtiendo en un mecanismo bastante usado, dado que ofrece
un conjunto de ventajas que lo hacen idneo para aplicaciones web de gran
escala. Las caractersticas son las siguientes:
Inalterable. Como REST utiliza los verbos de HTTP (GET, POST, PUT y
DELETE), el protocolo no se puede alterar y mantiene as la simplicidad
de su utilizacin.
Interoperable. El hecho de que los recursos se definan en un lenguaje independiente del cdigo de las mquinas cliente y servidor, y que la comunicacin se haga usando un protocolo estndar como es HTTP permite a
diferentes tecnologas y arquitecturas de hardware utilizar este mecanismo
Mecanismos de comunicacin
FUOC PID_00184782
52
Finalmente, hay quien puede pensar que REST es un poco restrictivo si los
sistemas que se tienen que construir son muy complejos, dado que ciertas
funcionalidades pueden parecer difciles de implementar con las primitivas
(GET, POST, PUT y DELETE). Como siempre, esta decisin queda en manos
del desarrollador.
Mecanismos de comunicacin
FUOC PID_00184782
53
Resumen
Mecanismos de comunicacin
FUOC PID_00184782
55
Bibliografa
Birman, K. P. (2005). Reliable distributed systems: technologies, web services, and applications.
springer middleware for communications. Qusay Mahmoud: Wiley 2004.
Burke, B. (2006). Enterprise JavaBeans 3.0. OReilly Media.
Cerami, E. (2002). Web services essentials (OReilly XML). OReilly Media.
Cornell, G.; Horsmann, C. (1996). Core Java. Prentice Hall.
Coulouris, G.; Dollimore, J.; Kindberg, T. (2005). Distributed systems: concepts & design
(4. ed.). Addison-Wesley. [Traduccin al castellano: Sistemas distribuidos: conceptos y diseo
(2001, 3. ed.). Pearson.]
Englander, R. (2002). Java and SOAP. OReilly Media.
Loosemore, S.; Stallman, R. M.; McGrath, R.; Oram, A.; Drepper, U. (1992). The
GNU. C library reference manual. Boston: Free Software Foundation.
Mrquez Garca, F. M. (1996). UNIX. Programacin avanzada. Madrid: Ra-ma.
Oberg, R. (2001). Mastering RMI: developing enterprise applications in Java and EJB. John Wiley
& Sons.
Orfali, R. (1998). Client/server programming with Java and CORBA. Nueva York: Wiley & sons.
Pacheco, P. (2000). Parallel programming with MPI. Morgan Kaufmann.
Peterson, L.; Davie, B. (2003). Computer networks: a system approach (3. ed.). EUA: Morgan-Kauffman.
Rifflet, J. M. (1992). Comunicaciones en UNIX. Madrid: McGraw-Hill.
Sinha, P. (1997). Distributed operating systems: concepts & design. IEEE Press.
Sridharan, P. (1997). Advanced Java networking. Prentice Hall.
St. Laurent, S. (2001). Programming web services with XML-RPC. Reilly Media.
Stevens, W. R. (2005). Advanced programming in the UNIX environment (2. ed.). Addison-Wesley Professional.
Tanembaum, A.; Steen, M. (2007). Distributed systems: principles and paradigms, 2/E. Prentice Hall.
Pginas web:
RMI
W3C, Web Services Architecture
JAX-WS
DCOM
Mecanismos de comunicacin