Newsgroup: it.comp.java
Titolo: simulatore P2P

Ciao a tutti avrei bisogno di un consiglio
su un progetto che sto svolgendo in questo periodo.
Ho appena creato in Java una rete P2P composta semplicemente
da nodi e links.
Ogni nodo ha la sola conoscenza dei nodi vicini.
A ogni nodo viene assegnato (oltre all'ID) anche un indentificativo
del flusso di dati che può distribuire (A, B, C , etc ...) e un
flag/contatore che rappresenta gli slot disponibili in outbound.
Quello che vorrei realizzare è un sistema distribuito per l'informazione
sui nodi che hanno risorse disponibili che permetta ai nodi 
che hanno bisogno di alcune informazioni di affacciarsi a questa
"struttura" e scegliere il nodo più vicino che è in grado di risolvere
la sua richiesta.
L'idea sarebbe quella di creare un albero distribuito dei nodi
che hanno risorse disponibili. Il problema è la fase iniziale.
Ogni nodo che ha risorse disponibili deve andare alla ricerca di 
un possibile padre (quindi un nodo già dentro l'albero) all'interno
della rete.
Se si ipotizza una rete di 50.000 nodi il traffico diventa esagerato
se ad ogni passo si interroga tutti i vicini (quindi per ogni nodo
viene interrogata tutta la rete nel caso peggiore). 
In più, se al primo passo viene trovato un padre, le altre richieste
ai vicini continuano a viaggiare nella rete.
Qualcuno più pratico potrebbe consigliarmi un algoritmo un po' più
"ottimo"?
Grazie
Paolo
-- 


Prego,
Bojan 

 "ottimo"?
Stai applicando un algoritmo pensato per una architettura dati/rete ad 
una architettura diversa: o è una rete ad albero (con un padre/server) o 
è paritetica (dove ogni nodo conosce solo i suoi vicini).
Quindi la prima parte del tuo lavoro è corretta, il problema si presenta 
quando "salti" dal sistema distribuito:
 > scegliere il nodo più vicino che è in grado di risolvere
 > la sua richiesta.
a quello ad albero:
 > L'idea sarebbe quella di creare un albero distribuito
Ti consiglio di buttar via tutta questa seconda parte e continuare a 
ragionare in termini di sistema distribuito (se un nodo ha bisogno di 
una informazione la chiede ai nodi vicini, quelli che conosce, e via 
ricorsivamente).
Tra l'altro parlare di "albero distribuito" è al limite dell'ossimoro... ;)
Ciao,
Paolo

 vicini).
L'obiettivo è quello di avere come infrastruttura di trasmissione dati
la classica rete P2P (quindi nessun sistema client server) e come
infrastruttura per la meta informazione (in questo caso "nodi che hanno
risorse da condividere") una struttura distribuita (nel senso che
se un peer ha risorse disponibili avra anche la conoscenza di suo
padre che è soltanto un altro peer con risorse disponibili che è
"vicino" a lui) che sta sopra la rete p2p e permette a un nodo
che richiede risorse di trovare in pochi passi un fornitore vicino. Una
volta trovato il fornitore la distribuzione dei dati veri e propri può
essere fatto con un qualsiasi protocollo P2P.
il mio gruppo: 
www.tacitotumulto.com
-- 

 ricorsivamente).
Scusami ... rispondo in particolare a questa affermazione.
Il primo passo che svolge un nodo che "richiede" è logicamente quello
di trovare tra i nodi vicini quello che ha risorse da condividere. Se
però questo nodo ha risorse ma non quello che serve a me non è di
certo una soluzione ottimale quella di continuare a cercare a caso.
Vorrei rimandare il compito di ricerca al primo nodo che ho trovato
che, facendo parte di una struttura contenente tutti i nodi che hanno
risorse, eviterà di esaminare nodi notoriamente non disponibili.
Quando parlo di "albero distribuito" intendo una struttura ad albero 
in cui ogni peer sa soltando chi è suo padre e chi sono i suoi figli
e non una struttura "interamente" contenuta in ogni peer.
Non mi sembra un idea stupida...


 Non mi sembra un idea stupida...
Non è questione di stupidità, ci mancherebbe, semplicemente del fatto 
che sono due tipi di architettura diversa.
 > Quando parlo di "albero distribuito" intendo una struttura ad albero
 > in cui ogni peer sa soltando chi è suo padre e chi sono i suoi figli
 > e non una struttura "interamente" contenuta in ogni peer.
Se un peer ha un padre e dei figli non è un peer ;)
Nel senso che in una architettura P2P non ci sono gerarchie, per questo 
ho "criticato" la definizione "albero distribuito".
Detto questo nulla vieta di far sì che un nodo abbia una sua struttura 
interna (quelli che tu chiami padre e figli non sono nodi, ma attributi 
del nodo), anzi, ma la gerarchia/struttura interna a un nodo è diversa 
dalla gerarchia tra nodi (l'albero "globale" che ipotizzavi all'inizio).
 > Vorrei rimandare il compito di ricerca al primo nodo che ho trovato
 > che, facendo parte di una struttura contenente tutti i nodi che hanno
 > risorse, eviterà di esaminare nodi notoriamente non disponibili.
Mi sembra una soluzione sensata, però (se non ci siamo capiti male fin 
dall'inizio) è diversa da quella che ipotizzavi nel primo post.
Resta il fatto che non risolvi il problema iniziale (l'algoritmo di 
ricerca tra nodi), semplicemente ne riduci l'ambito di applicazione (il 
numero di nodi).
Per risolvere il problema ti consiglio di dare un'occhiata ai vari 
algoritmi di ricerca in reti di questo tipo (ant, random walk, 
associativa, geografica).
 > [...] non è di certo una soluzione ottimale quella di continuare a
 > cercare a caso.
Eppure è la soluzione più frequente (posti i debiti limiti e fatte le 
debite distinzioni; vedi esempi citati sopra), per un motivo molto 
semplice: la ridondanza dei dati. Sono (dovrebbero essere) parecchi 
(relativamente) i nodi che contengono l'informazione che cerchi, per cui 
spostandoti a caso nel giro di pochi passaggi dovresti trovare 
l'informazione.
Ovviamente è una soluzione ridondante e non certo ottimizzata.
Ciao,
Paolo

 che richiede risorse di trovare in pochi passi un fornitore vicino.
Quindi avere una rete contenente i dati e una contenente la loro 
posizione? Ho capito correttamente?
Non ti sembra un po' ridondante?
Ciao,
Paolo
P.S.: magari proseguiamo solo sull'altro ramo del thread...

On Thu, 10 Jan 2008 11:26:24 +0100, PaoloPass <paol...@LEVAlibero.it>  
wrote:

Una volta ho studiato una roba molto simile per un esame, ma visto che mi  
faceva ribrezzo l'idea stessa ho prontamente rimosso, quindi non posso  
dirti se si adatta al tuo caso
In ogni caso prova a fare una ricerca con baton (balanced tree structure  
for p2p networks)
-- 
Using Opera's revolutionary e-mail client: 
http://www.opera.com/mail/