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
Agenda

 • ...strutture e storia!

 • applicazioni P2P comuni

 • caratteristiche comuni
 • introduzione a JXTA

 • architettura del framework

 • una semplice applicazione
 • live example! ;-)


                                2
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
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
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
Introduzione 2

 • Architetture:
 -cooperazione decentralizzata
 -evoluzione dei modelli con la storia
 -Client/server, puro, ibrido




                                         6
Introduzione 3

 • Campi applicativi:
 - File sharing (Napster, KaZaa, Gnutella, ...)
 - Comunicazione (VoIP, IM, ...)
 - Distributed Storage (Freenet, ...)
 - Computazione (Seti@home, ...)
 - Game on-line multiplayer
 - ...




                                                  7
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
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
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
Storia 2

 • Seconda generazione:
 - Ottobre 2000
   iniziano i sistemi di seconda generazione. Routing gerarchico.
   Introduzione dei reflector superpeer.

 - Introduzione del progetto Gnutella.


 - ...riassumiamo...




                                                                    11
Storia 3

 • Le generazioni P2P:




                         12
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
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
JXTA

• Overlay Network:




                     15
JXTA

• Layer:




           16
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
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
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
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
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
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
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
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
JXTA

• Restonet un valido esempio:




                                25
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
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
JXTA

• Creazione di un gruppo:
...
String groupURL”jxta:uuid-4d617267657……………….f202002”

PeerGroupID groupID= (PeerGroupID)
      IDFactory.fromURI(new URI(“urn”,” “,groupURL));

PeerGroup restoNet = null;

ModuleImplAdvertisement implAdv =
   netpg.getAllPurposePeerGroupImplAdvertisement( );

restoNet = netpg.newGroup(groupID,implAdv,”RestoNet”,”Gruppo Ristoranti”);

...




                                                                             28
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
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
DOMANDE...




             31
GRAZIE...

      www.torlug.org

    emmanuele.bello@torlug.org




                                 31

Bello Jxta Intro

  • 1.
    Sabato 28 Ottobre2006 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 • ...strutturee storia! • applicazioni P2P comuni • caratteristiche comuni • introduzione a JXTA • architettura del framework • una semplice applicazione • live example! ;-) 2
  • 3.
    Precisiamo... • Questotalk è: - 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 • Unsistema 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
  • 7.
    Introduzione 3 •Campi applicativi: - File sharing (Napster, KaZaa, Gnutella, ...) - Comunicazione (VoIP, IM, ...) - Distributed Storage (Freenet, ...) - Computazione (Seti@home, ...) - Game on-line multiplayer - ... 7
  • 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
  • 12.
    Storia 3 •Le generazioni P2P: 12
  • 13.
    JXTA • Introduzione: - Tecnologiasviluppata 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
  • 15.
  • 16.
  • 17.
    JXTA • Classificazione deipeer: - 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 deipeer 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 deipeer 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: - servonoa 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 advertisements2: - peer advertisements - peer group advertisemts - pipe advertisements - peer info advertisements - ...ne esistono altri...li vediamo avanti ....Ora arriva il codice finalmente :-) !!! 24
  • 25.
    JXTA • Restonet unvalido esempio: 25
  • 26.
    JXTA • Ricerca diun 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 diun 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
  • 28.
    JXTA • Creazione diun gruppo: ... String groupURL”jxta:uuid-4d617267657……………….f202002” PeerGroupID groupID= (PeerGroupID) IDFactory.fromURI(new URI(“urn”,” “,groupURL)); PeerGroup restoNet = null; ModuleImplAdvertisement implAdv = netpg.getAllPurposePeerGroupImplAdvertisement( ); restoNet = netpg.newGroup(groupID,implAdv,”RestoNet”,”Gruppo Ristoranti”); ... 28
  • 29.
    JXTA • Protocolli eservizi: - 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
  • 31.
  • 32.
    GRAZIE... www.torlug.org emmanuele.bello@torlug.org 31