1 criterios para escoger y evaluar las arquitecturas

Anuncio
TABLA DE CONTENIDO
1
CRITERIOS PARA ESCOGER Y EVALUAR LAS ARQUITECTURAS .......................... 5
2
OPCIONES DE ARQUITECTURAS PARA IMPLEMENTAR P2P EN DISPOSITIVOS
MÓVILES .................................................................................................... 6
2.1. ARQUITECTURA BASADA EN RELAYS ........................................................... 7
2.2. P2P PURA................................................................................................. 9
3
INTEGRACIÓN DE LAS ARQUITECTURAS P2P ................................................ 11
3.1.
3.2.
3.3.
3.4.
3.5.
3.6.
P2P PUNTOS COMUNICADOS POR RELAY .................................................... 12
P2P CON SERVIDOR DE ÍNDICES CON PUNTOS COMUNICADOS POR RELAY .... 15
SERVIDOR DE ÍNDICES Y BÚSQUEDAS ...................................................... 16
P2P SERVIDOR ÍNDICES .......................................................................... 18
P2P CON SERVIDOR DE INDICES Y BUSQUEDAS .......................................... 19
P2P CON SERVIDOR DE INDICES Y SIN BUSQUEDAS .................................... 21
4
MÉTODO PARA ESCOGER LA ARQUITECTURA DEL API DE COMUNICACIONES ... 22
5
DISEÑO DE LA ARQUITECTURA ................................................................... 24
5.1.
5.2.
5.3.
5.4.
5.5.
5.6.
DISEÑO DE PAQUETES ............................................................................ 24
PAQUETE CLIENTE: ..................................................................................... 25
PAQUETE ÍNDICES....................................................................................... 26
PAQUETE COMUNICACIONES ........................................................................... 26
PAQUETE DE TIPOS ..................................................................................... 27
PAQUETE DE SERVICIOS................................................................................ 27
6
SERVICIOS A IMPLEMENTAR ....................................................................... 29
7
OTROS SERVICIOS .................................................................................... 30
8
REFERENCIAS ........................................................................................... 31
ÍNDICE DE TABLAS
Tabla 1. Selección de Arquitectura a Implementar. ............................................. 23
Tabla 2. Rangos de Calificación ........................................................................ 23
ÍNDICE DE GRAFICAS
Gráfica 1. Diagrama de Arquitectura Basada en Relays ......................................... 7
Gráfica 2. Diagrama de Secuencias de la Arquitectura Basada en Relays ................. 8
1
CRITERIOS
PARA
ESCOGER
Y
EVALUAR
LAS
ARQUITECTURAS
Como objetivo especifico de la primera etapa del Proyecto de
Investigación, se pretende establecer el diseño de la arquitectura
y del API de comunicaciones, para escoger y evaluar nuestra
decisión se tuvieron en cuenta los siguientes criterios:
•
Posible
disponibilidad
implementación
de
los
de
un
aspectos,
código
pues
abierto
nos
para
la
ayudaría
a
independizar esta parte con el API en concreto.
•
Flexibilidad en la forma de la creación de servicios y fácil
extensibilidad del API para futuras implementaciones.
•
Baja
complejidad
en
la
construcción
y
futuro
mantenimiento del API.
•
Agilidad en la adquisición de conocimientos en la curva de
aprendizaje.
•
Uso de recursos físicos (memoria, procesador) donde se
implementarán los servicios del API.
•
El uso de la comunicación y del canal de red, distribución
de la carga, flujo de paquetes.
•
Parte técnica: que existe en POA que sea soportado por
Compact Framework para brindar servicios de comunicación
2
OPCIONES DE ARQUITECTURAS PARA IMPLEMENTAR P2P EN
DISPOSITIVOS MÓVILES
Existen básicamente una forma conocida para implementar
soluciones P2P en dispositivos móviles y es la planteada por
JXTA para J2ME, basada en Relays. Sin embargo Microsoft .Net
Framework es una herramienta poderosa para implementar
soluciones de
comunicación por
su simplicidad.
Según el
documento de MSDN Magazine. ”NET P2P: Writing Peer-to-Peer
Networked Apps with the Microsoft .NET Framework” [OLSN] las
maneras de implementar P2P son:

P2P puro

P2P con servidor de descubrimiento simple

P2P con servidor de descubrimiento y búsquedas

P2P
con
servidor
de
descubrimiento,
búsquedas
y
contenido
JXTA para J2ME es una implementación P2P pura, sin embargo la
comunicación entre la red y los dispositivos móviles se hace a
través de Relays. Pero no es la única manera de montar P2P en
dispositivos móviles.
2.1. ARQUITECTURA BASADA EN RELAYS
Puntos Wireless
Red P2P
Relay
Aplicaciones
Cliente
Puntos Wireless
Relay
Aplicación Servidor con
Servicios Basados en Aspectos
Aplicaciones
Cliente
Gráfica 1. Diagrama de Arquitectura Basada en Relays
Un patrón Proxy provee un sustituto u objeto que asume el lugar
de otro, que controla el acceso al objeto el cual se esta
reemplazando [GAMM].
Esta es la filosofía de los Relay, en
donde reside los servicios que resultarían pesados (en términos
de recursos de máquina) en los dispositivos móviles.
Gráfica 2. Diagrama de Secuencias de la Arquitectura Basada en
Relays
El anterior diagrama de secuencia muestra la comunicación entre
dos puntos de la red P2P. El primer punto busca el servicio en la
red preguntando a los demás puntos, una vez se ha encontrado
el servicio el punto que los posee se le retorna.
2.2. P2P PURA
Red P2P
Una arquitectura P2P pura es aquella que descubre manera
dinámica los demás puntos, de esta manera obtiene los servicios
que se desea, para ello es usual utilizar una comunicación
broadcast.
En el diagrama de secuencias anterior se muestra como un
punto se desea conectar a la red P2P, para esto el punto tiene la
responsabilidad de recorrer la red buscando a cada uno de los
puntos notificándoles su llegada. Los demás deben actualizar su
caché con el nuevo punto, igualmente el punto que se acaba de
conectar actualiza su caché.
Luego cuando el punto desea buscar un servicio, éste debe
recorrer el caché para obtener la dirección de los demás puntos
e ir a preguntarle a cada punto si posee el servicio. Una vez
encontrado servicio se posee hacer la transmisión de datos entre
los dos puntos.
Esta solución elimina los Relay lo que implica que los servicios
van a residir en los dispositivos móviles, como los servicios que
se pretenden prestar van a estar encapsulados en aspectos la
implementación de estos utilizando MS Compact Framework .Net
es muy limitada, ya que tan solo el Add-in de Mesalem [ADDM],
(que es una implementación de código cerrado) brinda el soporte
para POA.
3
INTEGRACIÓN DE LAS ARQUITECTURAS P2P
A continuación se analizarán las ventajas y desventajas de cada
una de las posibles arquitecturas que podría adoptar el API de
comunicaciones, basados en los criterios expuestos en el punto 1
de este documento y en los modelos P2P para dispositivos
móviles del punto 2.
Las siguientes arquitecturas han sido las escogidas, ya que
soluciones con servidores de contenido son bastante ineficientes
porque el servidor es el encargado de obtener cada uno de los
servicios que se van a publicar; esto implica que cada vez que se
conecta un punto al servidor el punto debe descargar todos los
servicios que va publicar en el servidor, si estos servicios fueran
archivos, en algún momento el servidor se desbordaría, lo que
implica que esta solución está limitada por la capacidad del
servidor.
Las implementaciones con servidores de descubrimiento pero sin
búsquedas no explotan la escalabilidad de las implementaciones
con servidores tanto de búsquedas como de descubrimiento.
Adicionalmente una implementación con tan sólo servidores
descubrimiento hace el tráfico de la red sea más alto, por tal
motivo y aunque si se tuvo en cuenta estas implementaciones,
se
ha
decidido
no
optar
en
implementar
el
API
comunicaciones con tan sólo servidores de descubrimiento.
de
3.1. P2P PUNTOS COMUNICADOS POR RELAY
Red P2P
Relay
Relay
Esta arquitectura implementa una solución P2P pura, pero la
comunicación entre los dispositivos móviles y la red P2P se hace
a través de Relays, estos liberarán de servicios pesados (en
términos de recursos de máquina) a los dispositivos móviles.
Cuando un dispositivo móvil se desea conectar a la red P2P
deben notificar a su Relay, éste se encarga de notificar a los
demás puntos utilizando los protocolos P2P establecidos y
brindándole al mensaje servicios de conexión, transmisión,
búsquedas y seguridad entre otros.
Una vez se ha notificado a todos los puntos de la red que se ha
conectado el dispositivo móvil, estos actualizan su caché y
finalmente el dispositivo móvil también debe actualizar su caché.
Cuando el dispositivo móvil quiere hacer una búsqueda en la red,
éste debe recorrer cada una de las direcciones almacenadas en
el caché y con la ayuda del Relay preguntar a los demás puntos
si posee el servicio, una vez encuentre el punto con el servicio se
procede a hacer la transmisión de datos.
Esta arquitectura nos brinda la posibilidad de implementar
servicios basados en POA y contar con implementaciones
robustas y que proveen código abierto, por consiguiente la
implementación de servicios es bastante flexible y conveniente.
El hecho utilizar Relays hace que la implementación del API
tenga que preocuparse por el canal de comunicación entre el
Relay y los dispositivos móviles; además el P2P no es muy
escalable y el trafico de red es alto; adicionalmente implementar
una
solución
dinámica
implica
utilizar
(en
principio)
comunicación broadcast lo cual puede ser costoso en términos
de
desarrollo,
seguridad
y
demás
[OLSN].
La
tecnología
disponible a implementar POA para esta solución específica es
sencilla, lo que es una ventaja en la curva aprendizaje. Al utilizar
un Relay los servicios residen en este, optimizando el uso de
recursos de máquina del dispositivo móvil, razón por la cual el
proyecto JXME emplea Relays.
El soporte de MS Compact Framework .NET para crear una
aplicación cliente que se comunique con el Relay no es un
problema, principalmente porque los aspectos no van a residir
en los dispositivos móviles sino en el Relay.
3.2. P2P
CON
SERVIDOR
DE
ÍNDICES
CON
PUNTOS
COMUNICADOS POR RELAY
Red P2P
Servidor de
Indices
Relay
Relay
Esta arquitectura implementa una solución utilizando un servidor
en el cual se publican las direcciones de todos los puntos de la
red, adicionalmente cuando un punto hace una búsqueda le pide
a este servidor que le vuelva la lista de los puntos que poseen el
servicio. Este modelo es bastante eficiente ya que optimiza el
tráfico de red, adicionalmente es un modelo escalable a bajo
costo en tiempo de desarrollo [OLSN].
La comunicación entre los dispositivos móviles y la red P2P se
hace a través de Relays, estos liberarán de servicios pesados (en
términos de recursos de máquina) a los dispositivos móviles.
Se va a analizar la arquitectura del Servidor de Índices y
Búsquedas con Relay, ya que implementar la solución sin
búsquedas fue descartada en el punto 3 de este documento.
3.3. SERVIDOR DE ÍNDICES Y BÚSQUEDAS
Cuando un dispositivo móvil desea buscar los servicios le pide al
Relay que busqué en el servidor de índices la dirección de los
puntos que poseen el servicio. El servidor de índices posee una
lista con la dirección y los servicios que tiene publicado cada
punto, una vez encuentre los servicios, el servidor retorna una o
todas las direcciones de los puntos al Relay. El Relay le comunica
al dispositivo móvil la dirección del servicio y éste empieza a
establecer la comunicación directa a través de los protocolos P2P
que provee el Relay.
Esta arquitectura nos brinda la posibilidad de implementar
servicios basados en POA y contar con implementaciones
robustas y que proveen código abierto, por consiguiente la
implementación de servicios es bastante flexible y conveniente.
El hecho utilizar Relays hace que la implementación del API
tenga que preocuparse por el canal de comunicación entre el
Relay y los dispositivos móviles. La tecnología disponible a
implementar POA para esta solución específica es sencilla, lo que
es una ventaja en la curva aprendizaje. Al utilizar un Relay los
servicios residen en este, optimizando el uso de recursos de
máquina del dispositivo móvil, razón por la cual el proyecto JXME
emplea Relays.
El soporte de MS Compact Framework .NET para crear una
aplicación cliente que se comunique con el Relay no es un
problema, principalmente porque los aspectos no van a residir
en los dispositivos móviles sino en el Relay.
3.4. P2P SERVIDOR ÍNDICES
Red P2P
Servidor de
Indices
Esta arquitectura implementa una solución utilizando un servidor
en el cual se publican las direcciones de todos los puntos de la
red, adicionalmente cuando un punto hace una búsqueda le pide
a este servidor que le vuelva la lista de los puntos que poseen el
servicio. Este modelo es bastante eficiente ya que optimiza el
tráfico de red, adicionalmente es un modelo escalable a bajo
costo en tiempo de desarrollo [OLSN].
Esta solución elimina los Relay lo que implica que los servicios
van a residir en los dispositivos móviles, como los servicios que
se pretenden prestar van a estar encapsulados en aspectos la
implementación de estos utilizando MS Compact Framework .Net
es muy limitada, ya que tan solo el Add-in de Mesalem [ADDM],
(que es una implementación de código cerrado) brinda el soporte
para POA.
3.5. P2P CON SERVIDOR DE INDICES Y BUSQUEDAS
Cuando un dispositivo móvil desea buscar los servicios le pide al
servidor de índices la dirección de los puntos que poseen el
servicio. El servidor de índices posee una lista con la dirección y
los servicios que tiene publicado cada punto, una vez encuentre
los servicios, el servidor retorna una o todas las direcciones de
los puntos al dispositivo móvil, luego éste empieza a establecer
la comunicación directa con el punto seleccionado.
Como se explicó antes, el hecho de que los servicios residen en
el dispositivo móvil hace que la implementación del API esté
fuertemente
acoplada
al
proveedor
para
soluciones
POA
denominado Add-in de Mesalem [ADDM], el cual es código
cerrado. La flexibilidad en la creación de nuevos servicios no es
tan trivial. Existen varias limitantes a nivel de lenguaje de
programación, aunque implementar aspectos con Mesalem es
bastante
sencillo
no
siempre
funciona
en
MS
Compact
Framework, teniendo que recurrir a un código complejo para
lograr el éxito de una aplicación POA ya que MS Compact
Framework no provee la totalidad de funcionalidad que trae el
Framework de .NET.
Como no se cuentan con Relays, todos los servicios, tanto los
básicos que toda red P2P debe poseer y que se muestran en el
punto 6 de este documento, como los servicios encapsulados en
aspectos que se muestran el punto 7 de este documento van a
residir en el dispositivo móvil, lo que implica un consumo de
recursos mayor haciendo esta solución o sea tan óptima.
3.6. P2P CON SERVIDOR DE INDICES Y SIN BUSQUEDAS
Esta solución no explotan en su totalidad el servidor de índices,
por
tal
motivo
fue
descartada
como
implementar el API de comunicaciones.
arquitectura
para
4
MÉTODO PARA ESCOGER LA ARQUITECTURA DEL API DE
COMUNICACIONES
Para escoger entre las arquitecturas mencionadas anteriormente
se utilizará el método descrito en [KINN]. En el cual basados en
los criterios planteados en el punto 1, se hará una cuantificación
de las arquitecturas para escoger la que mejor se acomode al
proyecto de investigación.
Cada criterio posee un peso, que indica la importancia dentro del
desarrollo del API de comunicaciones. A multiplicar éste peso por
la calificación que obtuvo cada arquitectura en determinado
criterio y sumándolas se obtiene la calificación total de la
arquitectura.
Los peso de los criterios fueron establecidos de acuerdo a la
experiencia en desarrollar aplicaciones distribuidas y van en una
escala de 1 a 10.
La calificación de la arquitectura en cada criterio está valuada
por:

Malo: con calificación de 1

Regular: con calificación de 3

Bueno: con calificación de 5
Código
Abierto
Flexibilid
ad
Agilidad en
Baja complejidad
Creación
la curva
Implementación
nuevos
aprendizaje
servicios
Recursos
máquina
PPC
Comunicación
distribución de
carga y envío
de paquetes
Soporte
CF
Total
Pesos De los Criterios
2
3
2
2
5
5
4
P2P con Puntos
comunicados por
Relay
5
5
3
5
5
1
5
91
P2P con servidor de
indices(sin búsquedas)
y puntos comunicado
por Relays
5
3
3
5
3
1
5
75
5
5
5
5
5
3
5
105
1
3
3
3
1
3
3
55
1
3
3
3
1
5
3
65
P2P con servidor de
indices(con
búsquedas) y puntos
comunicado por
Relays
P2P pura con servidor
de indices (sin
búsquedas)
P2P pura con servidor
de indices (con
búsquedas)
Tabla 1. Selección de Arquitectura a Implementar.
Bueno
Regular
Malo
5
3
1
Tabla 2. Rangos de Calificación
Como se puede observar, la arquitectura que obtuvo un mejor
resultado en la comparación fue “P2P con servidor de índices
(con búsquedas) y puntos comunicado por Relays”, por tal
motivo, será la arquitectura escogida para el desarrollo de esta
investigación y su diseño se describe a continuación.
5
DISEÑO DE LA ARQUITECTURA
El
diseño
de
los
paquetes
que
se
implementarán
están
distribuidos de la siguiente forma:
5.1. DISEÑO DE PAQUETES
Paquete Cliente:
En éste paquete se busca agrupar la implementación del la
interfaz del usuario en la Pocket Pc y los componentes de
comunicación con el Relay.
Paquete de Tipos:
Se busca mantener las interfaces de los componentes que crean
la funcionalidad del API con el fin de mantener una relación de
estos, sin crear dependencias directas.
Paquete de Servicios:
Agrupa los servicios necesarios para crear una red P2P, además
mantiene los servicios que entrelazan la aplicación encapsulados
en Aspectos.
Paquete de Índices
Contiene la implementación del Servidor de índices, basado en
un patrón Observer con el fin de desacoplar los clientes del
servidor.
Paquete de comunicaciones
Establece las conexiones directas utilizando el protocolo TCP,
permitiendo una comunicación P2P y la comunicación con el
Servidor de Índices.
5.2. Paquete Cliente:
Paquete Relay
Reside la lógica del Relay basado en el Patrón Proxy, ya que el
Relay hace las veces de un punto en la Red P2P.
Paquete GUI
Representa la lógica que reside en la Pocket Pc y el conjunto de
herramientas para implementar una aplicación sobre el API.
5.3. Paquete Índices
IServidorIndices
Servi dorI ndices
-iPuntosVector:Vector
+attach:void
+detach:void
+inform:void
+iPuntos:Enumeration
Basado en el concepto de un patrón Observer, el servidor de
índices mantiene una lista de los puntos que tiene conectados
facilitando las notificaciones de eventos en el servidor a un bajo
acoplamiento.
5.4. Paquete Comunicaciones
Cliente TCP establece una comunicación P2P con otros puntos de
la Red a través del Relay; mientras que ServidorTCP lanza un
hilo, representado por la clase ServidorHiloTCP, que atiende los
llamados de los clientes en el servidor de índices.
5.5. Paquete de Tipos
Posee las interfaces de las clases más importantes de la
implementación,
manteniendo
una
relación
sin
crear
dependencias. Estas clases modelan el comportamiento del API y
la manera de cómo se deben implementar las aplicaciones.
5.6. Paquete de Servicios
Los Servicios 1,2 y 3 son los servicios básicos que debe tener la
mayoría
de
las
aplicaciones
p2p,
estos
servicios
serán
mencionados en el punto 6 de este documento.
Mientras que los Aspectos, que residen el Paquete de Aspectos,
son considerados como servicios y dan valor agregado al API,
algunos de los aspectos que se planean implementar son
mencionados en el punto 7.
6
SERVICIOS A IMPLEMENTAR

Publicación de Puntos Ante el Servidor de Índices

Búsqueda de Servicios en la Red P2P

Envío de Mensajes y transferencia de datos
o Envío de Archivos
o Envío de Audio
7
OTROS SERVICIOS

Servicios de Seguridad

Servicios de Encripción de Datos

Auditoria de Mensajes
8
REFERENCIAS
[KINN]
Thomas C. Kinnear, James R. Taylor. “Investigación de
Mercados 5ª Edición”. McGraw Hill. Colombia 1998
[GAMM] Gamma, Erich. “Design patterns : elements of reusable object
- oriented software”. Addison - Wesley professional computing
series. Reading, Massachusetts, 1995.
[OLSN]
Olson, Lance. “.NET P2P: Writing Peer-to-Peer Networked Apps
with the Microsoft .NET Framework”. The Microsoft Journal for
Developers (MSDN Magazine). Febrero 2001.
[ADDM] An
add-in
Studio.NET
for
Aspect
Tomado
Oriented
Programming
Noviembre
7
de
in
Visual
2004.
http://www.codeproject.com/macro/AspectOrientedVSNet.asp?
Descargar