210 likes | 342 Views
Etude de la volatilité dans un système de stockage P2P. Fabio Picconi – LIP6. Motivation. Problème de la volatilité (churn) dans les réseaux pair-à-pair toujours pas résolu Couches de routage tolérantes à la volatilité (Bamboo, MSPastry), mais question encore ouverte concernant la couche DHT
E N D
Etude de la volatilité dans un système de stockage P2P Fabio Picconi – LIP6
Motivation • Problème de la volatilité (churn) dans les réseaux pair-à-pair toujours pas résolu • Couches de routage tolérantes à la volatilité (Bamboo, MSPastry), mais question encore ouverte concernant la couche DHT • Etude des effets de la volatilité des nœuds d’une DHT à blocs modifiables
Plan • Réplication dans PAST • Limitations du protocole de maintenance • Solutions • Evaluation
Placement des répliques (PAST) 04F2 E25A Facteur de réplication k = 3 Clef = 8959 3A79 put( 8959, block ) C52A AC78 5230 8BB2 8971 2-root 8957 0-root 8954 1-root 73AB 8909 834B
Placement des répliques (PAST) 04F2 E25A Facteur de réplication k = 3 Clef = 8959 3A79 C52A AC78 5230 8BB2 8971 Le nœud 8909 doit remplacer le nœud 8954 8957 8954 Le nœud 8954 se déconnecte 73AB 8909 834B
Protocole de maintenance (PAST) • Chaque noeud A émet une requête toutes les 10 minutes à tous ses voisins logiques. envoyer_requete() { pour chaque voisin logique V • envoyer liste de clefs stockées localement à V • attendre la réponse de V • ajouter les clefs retournées par V à la liste de clefs à régénérer } recevoir_requete() { • recevoir la liste de clefs stockées par A • répondre à A avec toutes les clefs stockées localement qu’il devrait stocker, mais qu’il ne possède pas }
Protocole de maintenance (PAST) get( 8959 ) Blocs 8955 8956 8959 Blocs 8955 8956 8959 Blocs 89558956 8959 get( 8956 ) 8959 8909 8957 requête 8955 8956 8955 8954 réponse 8956, 8959
Limitations • Réactivité : jusqu’à 10 minutes pour détecter la perte d’une réplique • Cohérence : la réplique est régénérée à partir de n’importe quel autre réplique (pas forcément à jour) • Simplicité : pas de distinction entre blocs mutables et immutables • Inefficacité : l’arrivé d’un nouveau noeud produit l’effacement des répliques du noeud sortant du replica set (nécessaire pour éviter plus de k répliques vivantes en meme temps)
Solutions • Réactivité : augmenter la fréquence des requêtes envoyées aux voisins (10 minutes 1 minute). Traffic toujours négligeable par rapport au transfer des blocs. • Cohérence : utilisation de quorums de lecture et écriture • Nombre de répliques = 3f + 1 • Quorum d’écriture = 2f + 1 • Quorum de lecture = 2f +1 • Ecriture et lecture forment une intersection d’au moins 1 réplique correcte
Solutions Facteur de réplication k = 10 f = 3 Quorum : 2f + 1 = 7 Ecriture Lecture
Solutions Facteur de réplication k = 10 f = 3 Quorum : 2f + 1 = 7 Nœuds byzantins (roll-back) Nœuds très lents Ecriture Lecture Nœuds pas à jour Replique correcte (numéro de version plus élevé)
Solutions • Problème : un bloc mutable devient inaccessible en lecture s’il y a moins de 2f+1 répliques vivantes. • Situation bloquante : le bloc ne peut plus être régénéré, même si plusieurs répliques existent • Priorité à la réplication de bloc mutables • Un noeud va régénérer des blocs immutables seulement après avoir fini de régénérer tous les blocs mutables
Evaluation • Modification de FreePastry 1.4.1 : • Quorums d’écriture et lecture dans tout accès aux blocs mutables • Réduction de l’intervalle de maintenance de 10 minutes à 1 minute • Priorité à la régénération des blocs mutables
Evaluation • Tests : • DHT de 50 noeuds stoquant • 400 fichiers de 1 Mo • Environ 80000 blocs, ou 100 Mo par noeud de la DHT (k = 11) • Emulation liens ADSL (10 mbps downstr, 1 mbps upstr) • Latences entre 10 et 250 ms. • Arrivée de nouveaux noeuds selon un processus de Poisson(même effet que le départ de noeuds existants)
Conclusions • Algorithme de réplication original pas adapté à une DHT stoquant des blocs mutables et immutables • Utilisation des quorums pour éviter la régéneration d’anciennes versions d’un bloc mutable • Priorité aux blocs mutables pour éviter des blocs «perdus» • Problème ouvert : l’arrivée simultanée d’un grand nombre de noeuds produit la perte de blocs
Future work • Eviter l’effacement des répliques lors de l’arrivée de nouveaux nœuds • Concevoir un système qui distingue les noeuds «stables» de ceux «instables» • Proposer un mécanisme d’incitations (incentives) pour motiver les utilisateurs à rester en ligne