jacorb sobre jxta
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 PresentationTRANSCRIPT
Ivan Bittencourt de A. e S. Neto
JacORB Sobre JXTA
Implementação Do JXTA Como Protocolo De Transporte Do
JacORB
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.
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
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...
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.
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>
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);
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”.
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.
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
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
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).
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.
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).
Ivan Bittencourt de A. e S. Neto
Travessia de firewall/NAT
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”.
Ivan Bittencourt de A. e S. Neto
Interfaces da ETF Connection (ClientConnection e
ServerConnection) Profile Listener Factories Handle (o JacORB já implementa)
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:
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.
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.
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.
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.
Ivan Bittencourt de A. e S. Neto
É isso... Mais informações em: http://www.linux.ime.usp.br/
~ivanneto/mac499/ Perguntas, sugestões?