1. Sabato 28 Ottobre 2006
P2P facile con JXTA:
introduzione allo sviluppo
di applicazioni peer to peer
Bello Emmanuele
TorLUG.org
emmanuele.bello@torlug.org
http://www.torlug.org
1
2. Agenda
• ...strutture e storia!
• applicazioni P2P comuni
• caratteristiche comuni
• introduzione a JXTA
• architettura del framework
• una semplice applicazione
• live example! ;-)
2
3. Precisiamo...
• Questo talk è:
- una introduzione a JXTA...non si
puo' vedere tutto in 45 minuti :-)
- un invito a programmare applicazioni P2P.
• Questo talk NON è:
- la guerra epica tra C e Java!!!
- l'enciclopedia di JXTA!!!
3
4. Introduzione
• Un sistema P2P:
è un insieme di entità autonome (peers), capaci di auto-organizzarsi,
che condividono un insieme di risorse distribuite presenti all’interno
di una rete di computers. Il sistema utilizza tali risorse per fornire una
determinata funzionalità in modo completamente decentralizzato.
• Paradigma SERVENT
-Risorse condivise: potenza di calcolo, banda, memoria, informazioni,
file, etc. etc.
4
5. Introduzione 2
• La comunità:
è il punto forte del sistema, ogni “edge” fornisce e riceve risorse
autonomamente (nella maggior parte dei casi!).
-Ad esempio in SETI@Home si donano risorse!
-Connessione transiente, IP dinamico, indirizzamento diverso da
quello classico...
5
6. Introduzione 2
• Architetture:
-cooperazione decentralizzata
-evoluzione dei modelli con la storia
-Client/server, puro, ibrido
6
8. Introduzione 4
• Struttura:
- Sistemi non strutturati
overlay network dinamica creata dai peer che si collegano è non
strutturata. Algoritmi di ricerca basati su flooding o su directory
centralizzate
- Sistemi strutturati
basati su algoritmi DHT(Distributed Hash Tables), stabili.
I peer devono eseguire una determinata procedura per
connettersi.
Complessità garantita dalla rete O(log N)!!!
8
9. Storia 1
• Origini:
- Fine anni '60
ARPAnet condivisione di documenti e risorse.
- 1997
USENET basata su newsgroup, modello basato su
client/server.
- 1999
Napster, prima generazione dei sistemi P2P.
9
10. Storia 1
• Origini:
- Dicembre 1999
prima denucnia di RIAA verso Napster....cominciano i problemi
etici e legali!!
- Febbraio 2001
2.79 bilioni di file scambiati al mese.
- Luglio 2001
Napster chiude!!!
10
11. Storia 2
• Seconda generazione:
- Ottobre 2000
iniziano i sistemi di seconda generazione. Routing gerarchico.
Introduzione dei reflector superpeer.
- Introduzione del progetto Gnutella.
- ...riassumiamo...
11
13. JXTA
• Introduzione:
- Tecnologia sviluppata da Sun Microsystem (Billy Joy e Mike
Clary);
- Significa giustapposto, perchè il P2P deve affiancare le tecnologie
esistenti e non sostituirle;
- JXTA è una suite di protocolli aperti per sviluppare soluzioni
interessanti, portabili e leggere;
- Esistono le librerie scritte in Java e C, C++;
- http://www.jxta.org/
13
14. JXTA
• Cosa fa:
- Standardizza le modalità su come i peer si scoprono sulla rete;
- Standardizza le ricerche delle risorse tra i peer;
- Standardizza le modalità di diffusione delle risorse (pubblicazione);
- Usa un sistema a pipes per comunicare;
- Standardizza le attività di monitoraggio.
...si utilizza XML che è lo standard per l'interscambio dei dati.
14
17. JXTA
• Classificazione dei peer:
- Identificati da un ID univoco, JXTAID
- Un qualsiasi dispositivo connesso alla rete di overlay di JXTA
- Minimal edge peer
hanno risorse limitate e solitamente sono dietro un firewall o un
NAT. Possono ricevere e inoltrare messaggi, non hanno cache e
non svolgono lavoro per altri.
17
18. JXTA
• Classificazione dei peer 2:
- Full featured edge peer
hanno le stesse funzionalità dei minimal edge peer, in più hanno la
cache per memorizzare informazioni sulla rete.
- Rendez-vouz peer
stesse funzionalità dei precedenti, offrono servizi di routing,
memorizzano informazioni per altri peers. Possiede risorse dicalcolo
superiori a quelle dei due precedenti.
18
19. JXTA
• Classificazione dei peer 3:
- Relay peer
sono in grado di inoltrare messagi per conto di peer che sono
dietro FW o dietro NAT.
- Rely peer
utili per permettere il collegamento ad una rete JXTA per i peer
che sono dietro FW o NAT. Sono peer di boot.
19
20. JXTA
• Gruppi:
- servono a suddividere la rete di overlay in base all'applicazione a cui
i peer partecipano
- nei gruppi ci sono peer con interesse comune;
- il peer group definisce:
a) un insieme di servizi;
b) politiche di membership;
c) scoping;
d) monitoraggio.
- sono creati dalle applicazioni.
20
21. JXTA
• Gruppi 2:
- al boot per default si appartiene a NetPeerGroup in grado di
fornire servizi di base
- un peer può unirsi a diversi gruppi durante il suo ciclo vita
- rappresentato come albero NetPeerGroup è la radice
NetPeerGroup 1
GameGroup 2
AppGroup 3
21
22. JXTA
• Le pipes:
- meccanismi per lo scambio di messaggi tra servizi e applicazioni
- componenti: pipe, pipe endpoint(in e out), messaggi
- collegamenti tramite pipe binding protocol
- sono risorse condivise
-solitamente sono:
a) point-to-point unicast;
b) secure unicast pipes;
c) propagate pipes.
- messaggi scambiati con XML
22
23. JXTA
• Gli advertisements:
- rappresentazione strutturata di entità, servizi, o risorsa resa
disponibile da un peer per gli altri peer
- hanno un ciclo di vita per non intasare la cache dei peer
- esempio:
<?xml version=“1.0”?>
<!DOCTYPE jxta: PipeAdvertisement>
<jxta: PipeAdvertisement xmlns:jxta=“http://jxta.org”>
<id>
urn:jxta:uuid59616261646162614E504720503250338E3E786229EA460DADC1A176B69B735
</id>
<type>
JxtaUnicast
</type>
< name
TestPipe
</name>
</jxta:PipeAdvertisement>
23
24. JXTA
• Gli advertisements 2:
- peer advertisements
- peer group advertisemts
- pipe advertisements
- peer info advertisements
- ...ne esistono altri...li vediamo avanti
....Ora arriva il codice finalmente :-) !!!
24
26. JXTA
• Ricerca di un gruppo:
- creazione del riferimento al NetPeerGroup e reperimento del discovery:
...
try
{
PeerGroup netpg = PeerGroupFactory.newNetPeerGroup ( );
}
catch (PeerGroupException e)
{
System.exit(1); }
DiscoveryService hdisco = netpg.getDiscoveryService ( );
...
26
27. JXTA
• Ricerca di un gruppo 2:
- ricerca di advertisemnts per RestoPeerGroup:
Enumeration ae = null;
int count = 3;
while (count-- >0)
{ try {
ae = hdisco.getLocalAdvertisements(DiscoveryService.GROUP, “Name”,”RestoNet”);
if ((ae !=null) )
break;
hdisco.getRemoteAdvertisements(null, DiscoveryService.GROUP,
Name”,”RestoNet”,1,null)
try {
Thread.sleep(timeout)
} catch (InterrruptedException ie) { }
if (ae == null)
<creazione del nuovo gruppo>
else <richiesta di partecipazione al gruppo>
catch (Exception e)
{System.exit(1);}
27
29. JXTA
• Protocolli e servizi:
- Discovery Service : Peer Discovery Protocol (PDB);
- Pipe Service: Peer Binding Protocol (PBP);
- Peer Information Service: Peer Information Protocol (PIP);
- Rendez Vouz Service: Rendez Vouz Protocol(RVP);
- End Point Service: END Routing Protocol(ERP);
- Peer Resolver Service: Peer Resolve Protocol(PRP);
- Membership e Access Protocol.
29
30. JXTA
• Live Session:
- Per completare l'introduzione a JXTA vediamo live:
a) il meccanismo delle pipe;
b) il discovery Service;
c) la pubblicazione di advertisements;
d) la ricerca dei servizi;
e) ricezione dei messaggi.
30