jueves, 9 de julio de 2009

Aplicaciones p2p en java con JXTA

Hola amig@s del mundo, me he decidido nuevamente a publicar un texto despues de un largo tiempo (espero no haya sido demasiado), pero quiero mantener este espacio y para hacerlo hay que publicar ;p

Bueno, a lo que vine, actualmente estoy trabajando en lo que vendria a ser mi proyecto de final de grado, tambien conocido como tesina o tesis dependiendo del contexto en el que hablemos. El programa en el que estoy trabajando tendrá que ver con el uso de aplicaciones en p2p y para ello voy a utilizar la libreria JXTA, uso el termino libreria porque creo que es el mas apropiado, ya que para ser considerado un framework creo que le faltaria un poco mas de "maduración".

En fin, me he topado con un tutorial de esta libreria a principios de este año (2009) y lo he estado leyendo "lentamente" y de hecho varias veces "interrumpido" por los quehaceres de todos los dias.

Para los que no conozcan, les explicaré en la forma que yo entendí, lo que hace el JXTA, ahora que me acuerdo, siempre lo mencionan como la "Especificacion" ya que pretende ser la base para el desarrollo de aplicaciones p2p, y desenmarañar la forma en la que estas se desarrollan, ya que casi todas las aplicaciones, desarrolladas por diferentes programadores o grupos de estos, lo hacen "a su manera" y lo que tenemos como resultado es que todos "reinventan la rueda" una y otra vez para lograr la conectividad y ese tipo de cosas (disculpen mi poco tecnisismo).

Entonces como decia, lo que pretende es establecer las normas y estandares como para que a partir de la especificacion, se pueda desarrollar en los distintos lenguajes (C,C++,java,python,etc), para demostrar el funcionamiento de la especificación se eligió java, no me pregunten porque ni quien/es lo decidió/eron.

Bueno, como dije en un principio, yo tome la decisión de hacer mi proyecto en java y utilizar esta especificación como base para esta, actualmente sigo con la investigación de como funciona, luego de tener un pequeño y tonto tropezon (leia un tutorial para la versión 2.4 utilizando la libreria 2.5) supongo que por tonto perdi unas cuantas horas procurando hacer funcionar los ejemplos, pero no todo es malo, sirvió para entender algunos pasos que dieron para llegar a la versión 2.5 y entender "como funcionan" algunas de las partes que lo integran.

Luego de esto tengo planeado desarrollar una aplicación basica de interconexion entre dos computadoras a través de internet y transmitir mi primer "hello world" o "hola mundo!" junto con algún fichero que me encuentre por ahi.

El funcionamiento, aclaro como yo entiendo hasta el momento, es el siguiente.
Todas las comunicaciones son a través de los llamados adversitements que se transmiten utilizando siempre XML.

Existen varios protocolos que dominan el funcionamiento, y estos son:
* PDP (Peer Discovery Protocol) - utilizado por los peers para anunciar sus recursos por ej. otros peers, grupos de peers, pipes (canales de comunicacion) o servicios.
* PIP (Peer Information Protocol) - utilizado por los peers para obtener información de estado (tiempo online, estado, tráfico reciente, etc) de otros peers.
*PRP (Peer Resolver Protocol) - Permite a los peers enviar una consulta genérica a uno o más peers y recibe una respuesta (o multiples) a la consulta. Estas pueden ser dirigidas a todos los peers, a un grupo de peers, o a un conjunto selecto dentro de este. A diferencia del PDP y PIP, los cuales son usados para consultar informacion específica y predefinida, este protocolo permite a los servicios del peer definir e intercambiar información de forma arbitraria como se necesite.
* PBP (Pipe Binding Protocol) - Usado por los peers para establecer una comunicación virtual, o pipe, entre uno omas peers. El PBP es usado por un peer y ligado a dos o mas conexiones finales (pipe endpoints)
* ERP (End point routing protocol) - Usado por los peers para hallar rutas (caminos o path) a los puertos de destino de otros peers. La información de ruteo incluye una ordenada secuencia de ID's de peers repetidores que pueden ser usados para enviar un mensaje al destino. (Por ejemplo, el mensaje puede ser entregado al Peer A el cual lo repite al Peer B, que lo reenviará al destino final).
* RVP (Rendezvous Protocol) - Usado por los 'Edge Peer' (creo que son peers que se encuentran al final de una ruta, tras un NAT o un firewall) para resolver recursos, propagar mensajes, y anunciar recursos locales. Usado por los peers rendezvous para organizarse con otros peers rendezvous, compartir la tabla hash distribuida de espacio de direcciones, y propagar mensajes de forma controlada.

NOTA: esta lista y descripcion de protocolos lo extraje y traduje de la guia para programadores hecha por SUN microsystems. Link a la guia aqui.

Como no he encontrado mucha informacion o ejemplos complejos de esta especificacion en java pretendo cuando termine mi proyecto publicarlo bajo licencia libre, quizas GPL o BSD, no se aun, de hecho no he revisado la licencia bajo la cual se libero la especificacion en java, tendré que adaptarme a ella quizas. Pero si publicare los fuentes que yo cree para hacer mi aplicación, y en sucesivos post ire mostrando mis avances.

Llegando a la parte final de este post les ruego, que si consiguen mas informacion (comunidades, ejemplos, informacion o lo que sea referenciado a esto) publiquen un comentario con esa información, no solo me ayudaran a mi sino a todo aquel que luego busque mas información al respecto.

Me despido nuevamente hasta una proxima publicacion.