Errata Corrige. DHT Routing (Tapestry) Tabella di routing (base k=4, digit d=4) Consideriamo il nodo x con id (x 1, x 2, x 3, x 4 ): (1+x 1, *, *, *)

Slides:



Advertisements
Presentazioni simili
1 Automazione dellalgoritmo ricorsivo di permutazione eseguita da Mariano Melchiorri.
Advertisements

if (condizione.) { blocco_istruzioni } else
Ricorsione Procedure e funzioni ricorsive. Definizioni Un oggetto si dice ricorsivo se è definito totalmente o parzialmente in termini di sé stesso La.
Procedure e funzioni ricorsive
Type Checking (1° parte)
Code a priorità (Heap) Definizione
Alberi binari di ricerca
Dallalgoritmo minimax allalgoritmo alfa-beta. MINIMAX int minimax(stato, livello) { if((livello == max_livello) || condizione_uscita(stato)) { CAMMINO.
La ricorsione Simulazione. Il Main /* Programma che usa una funzione ricorsiva*/ #include #define MAX_N 8 main() int valore, dato; printf(Introduci n:
Insiemi disgiunti.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Stesso approccio.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Stesso approccio.
Middleware per MANET WP3 Alessandro Ghioni
Tail recursion: esempio
Esercizi su alberi binari di ricerca
Esercizi su strutture dinamiche Fondamenti di Programmazione Canale AD a.a. 2009/2010.
Interrogazioni su un albero binario di ricerca Search(S,k) – dato un insieme S ed un valore chiave k restituisce un puntatore x ad un elemento in S tale.
Algoritmi e Strutture Dati Alberi Binari di Ricerca.
Algoritmi e Strutture Dati Valutazione del tempo di esecuzione degli algoritmi.
Basi di Dati II Sara Romano
1 2. Analisi degli Algoritmi. 2 Algoritmi e strutture dati - Definizioni Struttura dati: organizzazione sistematica dei dati e del loro accesso Algoritmo:
Introduzione1 Algoritmi e strutture dati - Definizioni Struttura dati: organizzazione sistematica dei dati e del loro accesso Algoritmo: procedura suddivisa.
APPUNTI SUL LINGUAGGIO C
Peer To Peer (o quasi) Gennaro Cordasco.
? Peer To Peer (P2P) Kademlia pastry can jxta napster fiorana
Sistemi Peer To Peer (P2P) Avanzati Gennaro Cordasco Gennaro Cordasco
Lezione 5. Ricapitolando…. Sistemi P2P puri Sistemi UniformiSistemi Non uniformi Abbiamo detto abbastanza KoordeNeighbor of Neighbor routing (NON)
Ancora esercizi!!! Chernoff Bound allora
Sistemi P2P avanzati Sistemi Peer To Peer (P2P) Avanzati Gennaro Cordasco – –
Ricapitolando…. Sistemi P2P puri Sistemi UniformiSistemi Non uniformi Abbiamo detto abbastanza KoordeNeighbor of Neighbor routing (NON)
Autori: I. Stoica, R. Morris, D. Liben-Nowell, D. R. Karger, M. F
Ion Stoica, Robert Morris, David Karger, M. Frans Kaashoek, Hari Balakrishnan MIT and Berkeley Chord: A Scalable Peer-to-peer Lookup Service for Internet.
Sistemi P2P avanzati Sistemi Peer To Peer (P2P) Avanzati Gennaro Cordasco – –
Lezione 5 Domande: Laverage path length di Chord con 2^b identificatori e N=2^b nodi è (giustificare la risposta) Laverage path length di Chord con 2^b.
Domande Consideriamo un grafo di de bruijn con base k, ed N = k^b nodi, quale delle seguenti affermazioni è vera (giustificare la risposta) Il grado di.
Modello dati ALBERO Albero: Albero: insieme di punti chiamati NODI e linee chiamate EDGES EDGE: linea che unisce due nodi distinti Radice (root): in una.
Modello dati ALBERO Albero: Albero: insieme di punti chiamati NODI e linee chiamate EDGES EDGE: linea che unisce due nodi distinti Radice (root): in una.
Esercizi su alberi binari
Esempi di riuso del codice nei linguaggi di alto livello Lab Programmazione - turno /2006.
P2P (o quasi): Peer To Peer (o quasi) Gennaro Cordasco.
Sorting: MERGESORT Vogliamo ordinare lista (a 1,…,a n ). 1.Dividi lista in 2 sottoliste aventi (quasi) la stessa dimensione: (a 1,a 3,a 5,…) e (a 2,a 4,…),
Sistemi P2P avanzati Sistemi Peer To Peer (P2P) Avanzati Gennaro Cordasco – –
Sistemi P2P avanzati Lezione 3 Chord seconda parte.
Sistemi P2P Facciamo un piccolo test Quanti successori ha un nodo nel protocollo Chord? (m) (1) (log N) (nessun prec.) Aumentando il numero di identificatori.
Sistemi P2P avanzati Lezione 4 Consisten Hashing Altri sistemi P2P uniformi F-Chord :-)
Sistemi P2P Facciamo un piccolo test Quanti successori ha un nodo nel protocollo Chord? (m) (1) (log N) (nessun prec.) Aumentando il numero di identificatori.
Sistemi Peer To Peer (P2P)
Alberi di ricerca binari
Reti L-S 2005 Servizio per la ricerca distribuita basato sul protocollo Rossi Daniele
Anche la RB-Delete ha due fasi: Nella prima viene tolto un nodo y avente uno dei sottoalberi vuoto sostituendolo con la radice dellaltro sottoalbero. Per.
Algoritmi e Strutture Dati
INFORMATICA APPLICATA A.A ° semestre.
RB-insert(T, z) // z.left = z.right = T.nil Insert(T, z) z.color = RED // z è rosso. Lunica violazione // possibile delle proprietà degli alberi // rosso-neri.
1 P2P e DHT - G. Ruffo Peer to Peer Computing e Distributed Hash Table (DHT) Giancarlo Ruffo Dipartimento di Informatica Università di Torino.
Outline Database P2P e stato dellarte delle strutture di indice Obiettivi dellarchitettura P-Ring Soluzioni di P-Ring Verifiche sperimentali dei risultati.
Tail recursion: esempio
Esercizi su alberi binari di ricerca
alberi completamente sbilanciati
Flusso Statico e Dinamico 20/03/2006. Codice da Interpretare int valore; valore = funz(); if( valore > 0 ) { [codice1] } else { [codice2] } return valore;
Alberi Alberi radicati : alberi liberi in cui un vertice è stato scelto come radice. Alberi liberi : grafi non orientati connessi e senza cicli. Alberi.
Soluzione 6: Algoritmo Quicksort
TECNICA DIVIDE ET IMPERA
Capitolo 8 Code con priorità Algoritmi e Strutture Dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano.
Internetworking livello III Prof. Alfio Lombardo.
Corso di Algoritmi e Strutture Dati APPUNTI SUL LINGUAGGIO C Esercizi su Alberi.
Algoritmo per il calcolo del maggiore tra tre numeri qualsiasi Francesco PUCILLO matr
R-AR-B R-CR-D R-E R-F H-A H-B H-CH-D H-E H-FH-G Rete di Riferimento Grafo Equivalente OSPF - RIP BGP.
SWITCH – CASE LINGUAGGIO C.
Sistemi Peer to Peer Gennaro Cordasco
comprensione e modifica di codice
Transcript della presentazione:

Errata Corrige

DHT Routing (Tapestry) Tabella di routing (base k=4, digit d=4) Consideriamo il nodo x con id (x 1, x 2, x 3, x 4 ): (1+x 1, *, *, *) (x 1, 1+x 2, *, *) (x 1, x 2,1+x 3, *) (x 1, x 2, x 3, 1+x 4 ) (2+x 1, *, *, *) (x 1, 2+x 2, *, *) (x 1, x 2, 2+x 3, *) (x 1, x 2, x 3, 2+x 4 ) (3+x 1, *, *, *) (x 1, 3+x 2, *, *) (x 1, x 2, 3+x 3, *) (x 1, x 2, x 3, 3+x 4 ) (in totale sono k-1 d nodi -- n=d k -> d=log k n) Es. tabella di routing (1323 base 4) (2, 1, 3, 0) (1, 0, 2, 3) (1, 3, 3, 2) (1, 3, 2, 0) (3, 1, 2, 2) (1, 1, 1, 3) (1, 3, 0, 1) (1, 3, 2, 1) (0, 3, 2, 1) (1, 2, 1, 2) (1, 3, 1, 1) (1, 3, 2, 2)

DHT Routing (Tapestry) Tabella di routing (base k=4, digit d=4) Consideriamo il nodo x con id (x 1, x 2, x 3, x 4 ): (1+x 1, *, *, *) (x 1, 1+x 2, *, *) (x 1, x 2,1+x 3, *) (x 1, x 2, x 3, 1+x 4 ) (2+x 1, *, *, *) (x 1, 2+x 2, *, *) (x 1, x 2, 2+x 3, *) (x 1, x 2, x 3, 2+x 4 ) (3+x 1, *, *, *) (x 1, 3+x 2, *, *) (x 1, x 2, 3+x 3, *) (x 1, x 2, x 3, 3+x 4 ) (in totale sono k-1 d nodi -- n=k d -> d=log k n) Es. tabella di routing (1323 base 4) (2, 1, 3, 0) (1, 0, 2, 3) (1, 3, 3, 2) (1, 3, 2, 0) (3, 1, 2, 2) (1, 1, 1, 3) (1, 3, 0, 1) (1, 3, 2, 1) (0, 3, 2, 1) (1, 2, 1, 2) (1, 3, 1, 1) (1, 3, 2, 2)

Koorde m.lookup(k,ks,i) 1if k (m, m.successor] return successor 2else if i (m, m.successor] 3 return d.lookup(k,ks<<1, i topbit(ks)) 4 else 5 return m.successor.lookup(k,ks,i) Cerchiamo il predecessore del nodo immaginario? Passiamo al nuovo nodo del grafo di de Bruijn Il passo 3 viene eseguito al massimo b volte Quante volte eseguiamo il passo 5, vale a dire quanto impieghiamo per trovare il predecessore di un nodo immaginario?

Koorde m.lookup(k,ks,i) 1if k (m, m.successor] return successor 2else if i [m, m.successor) 3 return d.lookup(k,ks<<1, i topbit(ks)) 4 else 5 return m.successor.lookup(k,ks,i) Cerchiamo il predecessore del nodo immaginario? Passiamo al nuovo nodo del grafo di de Bruijn Il passo 3 viene eseguito al massimo b volte Quante volte eseguiamo il passo 5, vale a dire quanto impieghiamo per trovare il predecessore di un nodo immaginario?

Programming with JXTA Hello World Peer discovery

JXTA: Hello World Requirement Java SDK ( Java SDK ( JXTA ( [JXTA 2.5] JXTA ( [JXTA 2.5] jxse-lib-2.5jxse-tutorials-2.5jxse-doc-2.5

JXTA: Hello World Compilare usando JXTA javac -classpath.\lib\jxta.jar SimpleJxtaApp.java Lanciare un applicazione java -classpath.\lib\jxta.jar.\lib\bcprov-jdk14.jar;. SimpleJxtaApp

JXTA: Hello World import net.jxta.platform.NetworkManager; import java.text.MessageFormat; /** * A example of strating and stopping JXTA */ public class HelloWorld { /** * Main method args none defined */ public static void main(String args[]) { NetworkManager manager = null; try { manager = new NetworkManager(NetworkManager.ConfigMode.EDGE, "HelloWorld"); System.out.println("Starting JXTA"); manager.startNetwork(); System.out.println("JXTA Started"); } catch (Exception e) { e.printStackTrace(); System.exit(-1); } System.out.println("Waiting for a rendezvous connection"); boolean connected = manager.waitForRendezvousConnection(12000); System.out.println(MessageFormat.format("Connected :{0}", connected)); System.out.println("Stopping JXTA"); manager.stopNetwork(); } }

JXTA: Configurazione

Demo

Programming with JXTA Peer discovery Gli advertisement vengono mantenuti nella cache di JXTA (./.jxta/cm) Gli advertisement vengono mantenuti nella cache di JXTA (./.jxta/cm) In particolare per ogni gruppo sarà presente una sottodirectory In particolare per ogni gruppo sarà presente una sottodirectory./.jxta/cm/jxta-NetGroup./.jxta/cm/jxta-NetGroup./.jxta/cm/group-ID./.jxta/cm/group-ID Le directory contengono tre tipi di file Le directory contengono tre tipi di file *.idx file, indice record-offset.tbl, entry list advertisement.tbl, advertisement

Programming with JXTA Peer discovery Per leggere i messaggi dalla cache si usa il metodo getLocalAdvertisement(); Per leggere i messaggi dalla cache si usa il metodo getLocalAdvertisement(); Per scrivere nella cache si usa invece il metodo getRemoteAdvertisement(); (il quale invia un messaggio di discovery e attende la risposta). Per scrivere nella cache si usa invece il metodo getRemoteAdvertisement(); (il quale invia un messaggio di discovery e attende la risposta). Come si ottiene la risposta Come si ottiene la risposta Si può aspettare e successivamente controllare la propria cache (getLocalAdvertisement()) Si può utilizzare un Discovery Listner (utilizzato nella demo).

import net.jxta.discovery.DiscoveryEvent; import net.jxta.discovery.DiscoveryListener; import net.jxta.discovery.DiscoveryService; import net.jxta.document.Advertisement; import net.jxta.peergroup.PeerGroup; import net.jxta.platform.NetworkManager; import net.jxta.protocol.DiscoveryResponseMsg; import java.io.File; import java.util.Enumeration; public class DiscoveryClient implements DiscoveryListener { private transient NetworkManager manager; private transient DiscoveryService discovery; //Constructor for the DiscoveryClient public DiscoveryClient() { try { manager = new NetworkManager(NetworkManager.ConfigMode.ADHOC, "DiscoveryClient", new File(new File(".cache"), "DiscoveryClient").toURI()); manager.startNetwork(); } catch (Exception e) { e.printStackTrace(); System.exit(-1); } // Get the NetPeerGroup PeerGroup netPeerGroup = manager.getNetPeerGroup(); // get the discovery service discovery = netPeerGroup.getDiscoveryService(); } Programming with JXTA Per instanziare JXTA Per discovery

// main args command line args public static void main(String args[]) { DiscoveryClient disocveryClient = new DiscoveryClient(); disocveryClient.start(); } /** * loop forever attempting to discover advertisements every minute */ public void start() { long waittime = 60 * 1000L; try { // Add ourselves as a DiscoveryListener for DiscoveryResponse events discovery.addDiscoveryListener(this); discovery.getRemoteAdvertisements( null, // no specific peer (propagate) DiscoveryService.ADV // Adv type(DiscoveryService.ADV null, // Attribute = any null, // Value = any 1, // one advertisement response is all we are looking for null); // no query specific listener. we are using a global listener Programming with JXTA

while (true) { // wait a bit before sending a discovery message try { System.out.println("Sleeping for :" + waittime); Thread.sleep(waittime); } catch (Exception e) { // ignored } } System.out.println("Sending a Discovery Message"); // look for any peer discovery.getRemoteAdvertisements( // no specific peer (propagate) null, // Adv type DiscoveryService.ADV, // Attribute = name "Name", // Value = the tutorial "Discovery tutorial", // one advertisement response is all we are looking for 1, // no query specific listener. we are using a global listener null); } } catch (Exception e) { e.printStackTrace(); } Programming with JXTA

/** * This method is called whenever a discovery response is received, which are * either in response to a query we sent, or a remote publish by another node ev the discovery event */ public void discoveryEvent(DiscoveryEvent ev) { DiscoveryResponseMsg res = ev.getResponse(); // let's get the responding peer's advertisement System.out.println(" [ Got a Discovery Response [" + res.getResponseCount() + " elements] from peer : " + ev.getSource() + " ]"); Advertisement adv; Enumeration en = res.getAdvertisements(); if (en != null) { while (en.hasMoreElements()) { adv = (Advertisement) en.nextElement(); System.out.println(adv); } /** * Stops the platform */ public void stop() { // Stop JXTA manager.stopNetwork(); } Programming with JXTA

import net.jxta.discovery.DiscoveryEvent; import net.jxta.discovery.DiscoveryListener; import net.jxta.discovery.DiscoveryService; import net.jxta.document.Advertisement; import net.jxta.document.AdvertisementFactory; import net.jxta.id.IDFactory; import net.jxta.peergroup.PeerGroup; import net.jxta.peergroup.PeerGroupID; import net.jxta.pipe.PipeService; import net.jxta.platform.NetworkManager; import net.jxta.protocol.DiscoveryResponseMsg; import net.jxta.protocol.PipeAdvertisement; import java.io.File; import java.util.Enumeration; public class DiscoveryServer implements DiscoveryListener { private transient NetworkManager manager; private transient DiscoveryService discovery; public DiscoveryServer() { try { manager = new NetworkManager(NetworkManager.ConfigMode.ADHOC, "DiscoveryServer", new File(new File(".cache"), "DiscoveryServer").toURI()); manager.startNetwork(); } catch (Exception e) { e.printStackTrace(); System.exit(-1); } PeerGroup netPeerGroup = manager.getNetPeerGroup(); // get the discovery service discovery = netPeerGroup.getDiscoveryService(); } Programming with JXTA

/** * main args command line args */ public static void main(String args[]) { DiscoveryServer disocveryServer = new DiscoveryServer(); disocveryServer.start(); } public void start() { long lifetime = 60 * 2 * 1000L; long expiration = 60 * 2 * 1000L; long waittime = 60 * 3 * 1000L; try { while (true) { PipeAdvertisement pipeAdv = getPipeAdvertisement(); // publish the advertisement with a lifetime of 2 mintutes System.out.println( "Publishing the following advertisement with lifetime :" + lifetime + " expiration :" + expiration); System.out.println(pipeAdv.toString()); discovery.publish(pipeAdv, lifetime, expiration); discovery.remotePublish(pipeAdv, expiration); try { System.out.println("Sleeping for :" + waittime); Thread.sleep(waittime); } catch (Exception e) {// ignored } } catch (Exception e) { e.printStackTrace(); } Programming with JXTA

/** * This method is called whenever a discovery response is received, which are * either in response to a query we sent, or a remote publish by another node * ev the discovery event */ public void discoveryEvent(DiscoveryEvent ev) { DiscoveryResponseMsg res = ev.getResponse(); // let's get the responding peer's advertisement System.out.println(" [ Got a Discovery Response [" + res.getResponseCount() + " elements] from peer : " + ev.getSource() + " ]"); Advertisement adv; Enumeration en = res.getAdvertisements(); if (en != null) { while (en.hasMoreElements()) { adv = (Advertisement) en.nextElement(); System.out.println(adv); } Programming with JXTA

/** * Creates a pipe advertisement * a Pipe Advertisement */ public static PipeAdvertisement getPipeAdvertisement() { PipeAdvertisement advertisement = (PipeAdvertisement) AdvertisementFactory.newAdvertisement(PipeAdvertisement.getAdvertisementType()); advertisement.setPipeID(IDFactory.newPipeID(PeerGroupID.defaultNetPeerGroupID)); advertisement.setType(PipeService.UnicastType); advertisement.setName("Discovery tutorial"); return advertisement; } /** * Stops the platform */ public void stop() { // Stop JXTA manager.stopNetwork(); } Programming with JXTA

Demo Peer Discovery