jacorb sobre jxta

23
Ivan Bittencourt de A. e S. Neto JacORB Sobre JXTA Implementação Do JXTA Como Protocolo De Transporte Do JacORB

Upload: tejano

Post on 31-Jan-2016

38 views

Category:

Documents


0 download

DESCRIPTION

JacORB Sobre JXTA. Implementação Do JXTA Como Protocolo De Transporte Do JacORB. Objetivo do trabalho. Fazer o JacORB rodar sobre o JXTA, de modo a permitir que aquele “atravesse” possíveis firewalls presentes em aplicações distribuídas. O JacORB: É um ORB Java; Open-source, etc. O JXTA: - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: JacORB Sobre JXTA

Ivan Bittencourt de A. e S. Neto

JacORB Sobre JXTA

Implementação Do JXTA Como Protocolo De Transporte Do

JacORB

Page 2: JacORB Sobre JXTA

Ivan Bittencourt de A. e S. Neto

Objetivo do trabalho Fazer o JacORB rodar sobre o JXTA,

de modo a permitir que aquele “atravesse” possíveis firewalls presentes em aplicações distribuídas.

Page 3: JacORB Sobre JXTA

Ivan Bittencourt de A. e S. Neto

O JacORB e o JXTA

O JacORB: É um ORB Java; Open-source, etc.

O JXTA: Protocolo P2P

aberto; Escrito em Java e

em C (mas pode ser implementado em outras linguagens);

Independência de plataforma

Page 4: JacORB Sobre JXTA

Ivan Bittencourt de A. e S. Neto

O JXTA Há uma série de protocolos definidos: Peer Resolver Protocol: enviar pedidos e

receber respostas de outros peers. Peer Discovery Protocol: usado para

publicar e encontrar recursos. Pipe Binding Protocol: usado para criar

um canal de comunicação entre 2 peers. Etc...

Page 5: JacORB Sobre JXTA

Ivan Bittencourt de A. e S. Neto

Mais JXTA Bastante diferente do modelo tradicional do

TCP/IP. Funciona de maneira meio “mágica” (API

simples). Não utiliza IPs nem portas, mas um ID e um

grupo (na verdade um Advertisement) para cada recurso.

Guarda as configurações iniciais num diretório “.jxta”.

Comunicação entre peers ocorre por meio de Pipes.

Page 6: JacORB Sobre JXTA

Ivan Bittencourt de A. e S. Neto

Exemplo de Advertisement

<?xml version=“1.0”?><jxta:PipeAdvertisement>

<Id>urn:jxta:uuid-DEAE73...106</Id><Type>JxtaUnicast</Type><Name>ExamplePipe</Name>

</jxta:PipeAdvertisement>

Page 7: JacORB Sobre JXTA

Ivan Bittencourt de A. e S. Neto

Publicando um InputPipediscoverySvc =

netPeerGroup.getDiscoveryService();pipeAdvertisement = (PipeAdvertisement)

AdvertisementFactory.newAdvertisement( PipeAdvertisement.getAdvertisementType());

discoveryService.publish(pipeAdvertisement);discoveryService.remotePublish(pipeAdvertise

ment);

Page 8: JacORB Sobre JXTA

Ivan Bittencourt de A. e S. Neto

Tipos de Peers Rendezvous: decide se propaga

mensagens que ele recebe. Relay: faz requisições e recebe

respostas em nome de outro peer. Peer “normal”.

Page 9: JacORB Sobre JXTA

Ivan Bittencourt de A. e S. Neto

Publicação/Busca de recursos Cada peer conhece algum(ns) rendezvous

peer(s). Cada rendezvous peer conhece alguns

outros rendezvous peers. Quando um peer publica seus recursos, ele

manda informações ao seu rendezvous. A busca de recursos ocorre somente entre

os redezvous, o que agiliza bastante a busca.

Mas a comunicação entre peers é feita diretamente.

Page 10: JacORB Sobre JXTA

Ivan Bittencourt de A. e S. Neto

Um exemplo JXTApublic static void main (String[] args) throws Exception {

PeerGroup netPeerGroup = PeerGroupFactory.newNetPeerGroup();DiscoveryService discovery = netPeerGroup.getDiscoveryService();discovery.addDiscoveryListener(this);discovery.getRemoteAdvertisements(null, DiscoveryService.PEER,

null, null, 5);}

Sending a Discovery MessageGot a Discovery Response [5 elements] from peer : unknownPeer name = suzPeer name = Frog@SF05

Page 11: JacORB Sobre JXTA

Ivan Bittencourt de A. e S. Neto

Comunicação entre peers O peer “servidor” cria

um InputPipe e publica o ID deste na rede.

O peer cliente obtém de algum modo o ID publicado (numa IOR, por exemplo), localiza o InputPipe e cria um OutputPipe.

A conexão (unidirecional) está estabelecida.

Peer cliente

Peer servidor

Page 12: JacORB Sobre JXTA

Ivan Bittencourt de A. e S. Neto

Felizmente há o JXTASocket Mais alto nível. Muito parecido com sockets de Java. Permite comunicação nos dois sentidos. Precisa do grupo e PipeAdvertisement de

onde vai conectar. Há um grande delay no estabelecimento

da conexão (solucao: rendezvous peer em comum).

Há também o P2PSocket (não vem junto com o JXTA).

Page 13: JacORB Sobre JXTA

Ivan Bittencourt de A. e S. Neto

P2PSocket Substitui o Socket e ServerSocket do Java. Mas roda sobre JXTA. Seu uso é muito parecido com o de sockets

normais. Usa componentes JXTA para simular uma

rede TCP/IP. Mais intuitivo que o JXTASocket. Dá até pra

usar sem saber que roda sobre JXTA.

Page 14: JacORB Sobre JXTA

Ivan Bittencourt de A. e S. Neto

Atravessando firewalls/NAT Se um peer está atrás de firewall ou NAT, é

preciso que ele encontre um relay peer (o configurador do JXTA faz isso).

O relay peer recebe/envia mensagens em nome do peer inacessível.

De tempos em tempos, o peer inacessível se conecta ao seu relay peer e envia/pega suas mensagens pendentes.

Logo, o firewall tem que estar aberto em pelo menos uma porta para conexões externas (geralmente 80).

Page 15: JacORB Sobre JXTA

Ivan Bittencourt de A. e S. Neto

Travessia de firewall/NAT

Page 16: JacORB Sobre JXTA

Ivan Bittencourt de A. e S. Neto

A “ponte” entre o JacORB e o JXTA: a ETF A ETF (Extensible Transport

Framework) é suportada pelo JacORB.

Ela define (num arquivo IDL) uma série de interfaces que devem ser implementadas para adicionar um novo protocolo de transporte.

Basta estender as classes da ETF que estão no “jacorb.jar”.

Page 17: JacORB Sobre JXTA

Ivan Bittencourt de A. e S. Neto

Interfaces da ETF Connection (ClientConnection e

ServerConnection) Profile Listener Factories Handle (o JacORB já implementa)

Page 18: JacORB Sobre JXTA

Ivan Bittencourt de A. e S. Neto

JacORB e a ETF

ORB

Plugin

Factories::create_listener()

Listener::set_handle()

Listener::listen()

Criação de um Listener server-side:

Page 19: JacORB Sobre JXTA

Ivan Bittencourt de A. e S. Neto

ETF Profile Contém toda informação relacionada

a um endereço para um protocolo de transporte específico (no caso do JXTA, o PipeAdvertisement e o grupo) + versão GIOP + object key.

Métodos Profile <-> CDROutputStream <-> IOR.

Representa o alvo de uma conexão.

Page 20: JacORB Sobre JXTA

Ivan Bittencourt de A. e S. Neto

ETF Listener, Connection e Factories Listener: Provê um “transport endpoint”

que pode ser conectado a partir de um cliente (que possui um profile).

Factories: usado pelo ORB para criar Listeners, Connections e Profiles.

Connection: define uma interface entre o ORB e a camada de transporte.

Page 21: JacORB Sobre JXTA

Ivan Bittencourt de A. e S. Neto

Juntando tudo isso JacORB rodando sobre JXTA. Mas fica lento. Bem lento mesmo! Solução: P2PSockets? Não. Solução2: criar grupos? Não. É o que o

P2PSockets faz. O JXTA é lento mesmo. Afinal, ele é destinado

a P2P, onde não respostas imediatas não são essenciais (ou possíveis).

O que foi feito: configurado um rendezvous peer em comum.

Page 22: JacORB Sobre JXTA

Ivan Bittencourt de A. e S. Neto

Próximos passos Testes de desempenho em vários

ambientes. Problema com JxtaSocket: objetos

muito grandes. Adicionar suporte a P2PSockets --

talvez.

Page 23: JacORB Sobre JXTA

Ivan Bittencourt de A. e S. Neto

É isso... Mais informações em: http://www.linux.ime.usp.br/

~ivanneto/mac499/ Perguntas, sugestões?