Outil d’observation d’un réseau pair-à-pair Fabio Picconi – LIP6
Motivations Emulation : évaluation d’un réseau P2P (Pastry, PAST, Pastis) Modelnet : plate-forme répartie (~100 nœuds réels) Vision globale du réseau P2P utile pour : – démarrage du réseau – observation des clients – injection de volatilité
Architecture contrôleur hôte1hôte2hôte3 hôte1hôte2hôte3 routeur Modelnet
Gestion du réseau Pastry contrôleur eth0:1 eth0:2 eth0:3 eth0:4 JVM MON hôte1 créer nœud Pastry Pastry
Gestion du réseau Pastry contrôleur eth0:1 eth0:2 eth0:3 eth0:4 JVM MON hôte1 Pastry créer nœud Pastry Pastry bootstrap
Gestion du réseau Pastry contrôleur eth0:1 eth0:2 eth0:3 eth0:4 JVM MON hôte1 Pastry tuer nœud Pastry
Gestion du réseau Pastry contrôleur eth0:1 eth0:2 eth0:3 eth0:4 JVM MON hôte1 Pastry recréer nœud Pastry
Evaluation de FreePastry 04F2 3A B BB2 AC78 C52A E25A k = AB lookup(8959) racine contrôleur lookup(8959) fausse racine 8971
Evaluation de FreePastry 04F2 3A B BB2 AC78 C52A E25A 73AB racine contrôleur fausse racine 8971 résultat
Architecture JVM Hôte JVM Controller RMI Controller TestBase ChurnManager SimulationHost Pastis Past / Pastry
Architecture void registerNodeStart( Id id, SimulationHost host ); void registerNodeReady( Id id ); void unregisterNode( Id id ); NodeConfigurator registerHost( SimulationHost host ); interface Controller
Architecture void startNewNode( InetSockAddress bootstrapHost ); void killNode( Id id ); NodeHandle getNodeHandle( Id id ); InetSocketAddress getNodeISA( Id id ); void sendPing( Id sender, Id dest, int pingId, PingManager pm ); interface SimulationHost
Architecture abstract void runTest(); abstract class TestBase void InitNetwork( NodeConfigurator configurator ); void waitForNodes() void setChurnRate(); Id pickRandomNodeId(); SimulationHost getHostForNodeId( Id id ); class ControllerImpl
Architecture registerHost() registerNodeStart() registerNodeReady() unregisterNode() Interface Controller startNewNode() killNode() getNodeHandle() sendPing() Interface SimulationHost initNetwork() waitForNodes() setChurnRate() pickRandomNodeId() getHostForNodeId() Class ControllerImpl runTest() Class PastryTest runTest() Class PastTest
Architecture void runTest() { controller.InitNetwork(); controller.waitForNodes(); controller.setChurnRate( 30 ); pingLauncher.setRate( 0.1 ); } void sendPing() { PingManager pm = new PingManager(); for( i = 0; i<num_senders; i++ ) { nid = controller.getRandomNodeId(); host = controller.getHostForNodeId(nid); host.sendPing( dest, pm ); } PastryTest.java
Architecture class PingApp extends CommonAPIAppl { void sendPing( Id dest, int pingId, PingManager pm ) { Message msg = new PingMsg(); pastry.routeMsg( dest, msg ); } void deliver(Id Key, Message msg ) { PingManager pm = msg.getPingManager(); pm.recordReciept( msg ); } PingApp.java
Architecture void churnNode() { Id id = pickRandomNodeId(); SimulationHost host = getHostForNodeId( id ); unregisterNode( id ); host.killNode(); host.startNewNode( generateBootStrap() ); } ControllerImpl.java
Evaluation de FreePastry Métriques d’évaluation de FreePastry : – Nb. de lookups réussis – Nb. de lookups cohérents – Latence – Nb. de hops – Distance par rapport à la vraie racine
Evaluation de Pastis 90 min45 min23 min10 minMST :