Pastis : un système de fichiers P2P
Transcription
Pastis : un système de fichiers P2P
Pastis : un système de fichiers P2P J-M. Busca, F. Picconi, P. Sens Equipe REGAL Journée P2P & Grid computing GT Sphere – GDR I3 22 juin 2005 page 0 Système de fichier P2P Espace de stockage virtuel ■ Principe ● ● ■ agréger l’espace disque des calculateurs participants constituer espace de stockage virtuel unique de grande capacité Introduction Architecture Cohérence Intérêt ● stockage données volumineuses ● haute disponibilité via réplication ● faible coût En cours Conclusion 1 Caractéristiques des systèmes P2P Problèmes à résoudre Caractéristiques intrinsèques nombre élevé de noeuds 100 000+ noeuds performances - de localisation - d’accès aux données dispersion géographique échelle planétaire très haute volatilité connexions de qq. heures disponibilité des données absence de fiabilité propriétaires inconnus sécurité - des données - des traitements Introduction Architecture Cohérence En cours Conclusion 2 Briques de base du P2P put(k,b) b = get(k) Stockage haute disponibilité de blocs • associe clé k ↔ bloc de donnée b niveau 2 Distributed Hash Table • stocke b sur l’id le plus proche de k • maintient plusieurs répliques du bloc b Exemples : Past, DHash, Tapestry, … route() notify() Routage efficace des messages • noeud : identifiant id, table de routage sur ids niveau 1 Key Based Router • route(k, m) : route m vers id le plus proche de k Exemples : Pastry, Chord, Kademlia… Introduction Architecture Cohérence En cours Conclusion 3 Positionnement de Pastis Caractéristiques Pastis Systèmes existants fichiers en lecture / écriture CFS : lecture seule grand nombre d’écrivains Ivy : # écrivains limité entièrement décentralisé OceanStore : 2 niveaux Axes de recherche Introduction ● modèles de cohérence performants ● garantissant la sécurité des données ● dans un contexte asynchrone, avec fautes byzantines Architecture Cohérence En cours Conclusion 4 Plan ■ Architecture générale ■ Modèles de cohérence ■ Travaux en cours ■ Conclusion Introduction Architecture Cohérence En cours Conclusion 5 Architecture générale page 6 Architecture logicielle Application Andrew Benchmark FS Pastis put(Key, Bloc) Structure fichiers et répertoires Sémantique des accès Bloc = get(Key) DHT Past KBR Pastry Introduction Tests de performances Architecture Support stable de blocs (réplication flottante) Localisation efficace par clés (routage Plaxton) Cohérence En cours Conclusion 7 Pastry et Past 0 ■ 2n -1 Organisation ● noeuds en anneau logique ● routage par préfixe croissant ● répliques sur noeuds contigus route #567 k=566 #345 ■ #513 Bonnes propriétés de localité ● #561 distance physique prise en compte pour construire les tables de routage distroutage ≈ 1,4 x distphysique (moy.), < 2 x distphysique (max) ● route() atteind très souvent la réplique d’un bloc la plus proche en premier prob(plus proche) ≈ 75%, prob (2 plus proches) ≈ 90% Introduction Architecture Cohérence En cours Conclusion 8 Structures de données Structure de type UFS inode fichier - fichier : inode + blocs - répertoire : fichier spécial size, ctime, … clé bloc #1 clé bloc #2 … clé bloc #12 size, ctime, … nom1 clé inode 1 clé bloc #1 null null nom2 clé inode 2 null null null contenu fichier … … … … clé bloc ind. #1 clé bloc ind. #2 clé bloc ind. #3 nom3 clé inode 3 … … contenu répertoire Différence avec UFS n° d'inode / @ de bloc = clé de stockage PAST inode répertoire Introduction Architecture Cohérence En cours Conclusion 9 Problèmes restant à résoudre ■ Sécurité des données par définition, ne peut être déléguée au niveau DHT coopération entre DHT et utilisateur final ■ Performances des accès mêmes localisés rapidement, les données restent distantes définition de modèles de cohérence optimisant les accès ■ Cohérence des répliques (au niveau DHT) pas de gestion de données modifiables par la DHT cohérence des répliques à assurer au niveau supérieur Introduction Architecture Cohérence En cours Conclusion 10 Stockage des données ■ ■ Objectifs ● assurer l'intégrité et l’authenticité des données stockées ● malgré la malveillance possible des noeuds de stockage Solution ● ensemble de conventions entre DHT et utilisateurs ● liant le contenu d'un bloc et sa clé de stockage ● via des techniques cryptographiques différents types de blocs : CHB et UCB Introduction Architecture Cohérence En cours Conclusion 11 Content Hash Bloc (CHB) ■ ■ ■ Convention ● Kstock = SHA-1(Bloc) ● DHT.put(Kstock, Bloc) Bloc Kstock Vérification ● Bloclu = DHT.get(Kstock) ● SHA-1(Bloclu) == Kstock ? SHA-1(d+s) Discussion … … données … … … sel ☹ Kstock ≠ identifiant logique de bloc ☹ données non modifiables ☺ caching facile Introduction Architecture Cohérence En cours Conclusion 12 Public Key Bloc (PKB) ■ ■ ■ Convention Bloc ● PKB associé à (Kpub, Kpriv) ● Kstock = SHA-1(Kpub) ● DHT.put(Kstock, {Bloc, Sig(Bloc, Kpriv)}) Kstock Vérification ● {Bloc, Sig}lu = DHT.get(Kstock) ● SHA-1(Bloc.Kpub) == Kstock ? ● verifySig({Bloc, Sig}lu, Kpub) ? Kpub n° version Sig(Kpriv) Discussion ● Kstock = identifiant logique ● mise à jour “en place” ● coût de lecture élevé Introduction Architecture Cohérence … … données … … En cours Conclusion 13 User Certificate Block (UCB) ■ ■ ■ Bloc Principe Kstock ● PKB amélioré pour multi-écrivains ● utilisateur associé à (Kpub util, Kpriv util) ● certificat “droit d'écriture” sur bloc Vérification ● validité certificat via Kpub bloc ● validité bloc via Kpub util. du certificat Kpub bloc n° version Sig(Kpriv util.) Discussion Kpub bloc Kpub util. date expiration Sig(Kpriv bloc) ☺ diffusion Kpriv bloc inode inutile ☺ retrait droit d’écriture possible ☹ coût de lecture élevé Introduction Architecture … … données … … Certificat Cohérence En cours Conclusion 14 Utilisation des blocs contenu répertoire nom1 clé inode 1 size, ctime, … nom2 clé inode 2 clé bloc #1 clé bloc #2 … clé bloc #12 nom3 clé inode 3 … … CHB ■ Avantages ● ● inode fichier … … … clé bloc ind. #1 clé bloc ind. #2 clé bloc ind. #3 UCB bloc = CHB : accès rapide, caching efficace ■ inode = UCB : mises à jour circonscrites au fichier Introduction contenu fichier Architecture Cohérence CHB Compromis entre ● performances lecture / écriture ● granularité des mises à jour En cours Conclusion 15 Implémentation des lectures / écritures ■ ■ ■ Lecture d’un fichier ● lire l’inode + vérifier son intégrité ● lire les blocs référencés + vérifier leur intégrité Ecriture – pour chaque bloc modifié : ● écrire le bloc dans un nouveau CHB ● modifier l’adresse de stockage dans l’inode ● signer l’inode et l’écrire dans son UCB Avantages / inconvénients ☺le contenu de l’inode matérialise une version du fichier (snapshot) ☹ impossible de fusionner deux inodes signés pour fusionner des mises à jour Introduction Architecture Cohérence En cours Conclusion 16 Modèles de cohérence page 17 Modèles de cohérence ■ ■ ■ Objectifs ● permettre un accès performant aux fichiers ● en gardant une sémantique claire et utilisable Facteurs de bonnes performances ● diminuer le nombre d'accès aux blocs ● diminuer la latence des accès aux blocs Deux modèles de cohérence implémentés ● close-to-open (défini dans Andrew FS) ● read-your-writes (inspiré de Bayou) Introduction Architecture Cohérence En cours Conclusion 18 Modèle close-to-open (CTO) ■ Définition ● open() : retourne la dernière version du fichier validée par close() ● entre open() et close() : seule les mises à jour locales sont vues O R(1) W(2) R(2) C O R(2) util. 1 O R(1) W(3) C util. 2 O R(2) R(2) util. 3 Introduction Architecture Cohérence En cours Conclusion 19 Modèle CTO – Discussion ■ ■ ■ Intérêt pour l’utilisateur ● lit toujours la dernière version du fichier ● cette version est toujours cohérente (cohérence interne) ● la cohérence est maintenue durant tout l’accès au fichier Intérêt pour les performances ● pas de relectures périodiques à faire après l'open() ● pas de modification à propager avant close() Implémentation facilitée par Pastis (snapshots) ● la lecture de l’inode sur open() arrête le contenu du fichier ● seule l’écriture de l’inode sur close() valide les mises à jour Introduction Architecture Cohérence En cours Conclusion 20 Ecriture et résolution des conflits ■ ■ A résoudre ● résolution des conflits de mise à jour au niveau file system ● cohérence des répliques d’UCB au niveau DHT Solution ● version de fichier identifiée par V = (versionUCB, kpriv. util.) ● incrémentation de V.versionUCB avant chaque écriture de l’UCB ● un UCB est enregistré dans Past si et seulement si : Vécrite > Vstockée util. répliques Past.insert( inode ) Introduction Architecture Cohérence En cours Conclusion 21 Lecture des UCB ■ ■ Problèmes ● attaques de roll-back possibles (noeuds byzantins) ● réplication paresseuse des blocs (implémentation Past) Conséquences ● possibilité de lecture d'une version obsolète d’un UCB ● pour déterminer la dernière version : lire toutes les répliques, et retenir celle de plus grand numéro de version coût et latence très élevés util. Past.fetch (replique) répliques Past.lookupHandles(inode) Introduction Architecture Cohérence En cours Conclusion 22 Performances CTO 400 CHB read+write UCB write UCB read 350 coût : 40% Execution Time (s) 300 250 200 150 100 50 0 Phase 1 Phase 2 Phase 3 Phase 4 Phase 5 Total Benchmark Phases Introduction Architecture Cohérence En cours Conclusion 23 Modèle read-your-writes (RYW) ■ Définition idem close-to-open, sauf sur open() : la version du fichier retournée est au moins aussi récente que la dernière lue O R(1) W(2) C O R(2) util. 1 O W(3) C util. 2 Introduction Architecture Cohérence En cours Conclusion 24 Modèle RYW – Discussion ■ Domaines d’application ● fichiers non partagés avec d’autres utilisateurs ● accès ne nécessitant pas la toute dernière version du fichier Exemple : imprimer un fichier pour lire ses propres modifications ■ Intérêt pour les performances ● diminution du coût de open() : la lecture d’une réplique récente suffit ● lecture à faible coût une version plus récente que la version locale Introduction Architecture Cohérence En cours Conclusion 25 Implémentation du modèle RYW ■ Cache local : clé inode → Vréférence ■ Modification de l’appel Past lookup(key) ■ ● introduction d’un critère de recherche : V ≥ Vreférence ● arrêt de la recherche dès la réplique trouvée Gain en latence ● toutes les répliques satisfont V ≥ Vreférence (écritures simultanées) ● Pastry accède à la plus proche avec une haute probabilité (localité) util. répliques lookup() Introduction Architecture Cohérence En cours Conclusion 26 Performances RYW 400 CHB read+write UCB write UCB read 350 gain : 33% Execution Time (s) 300 250 200 150 100 50 0 Phase 1 Phase 2 Phase 3 Phase 4 Phase 5 Total Benchmark Phases Introduction Architecture Cohérence En cours Conclusion 27 Travaux en cours page 28 Cohérence stricte ■ ■ ■ Limites du système actuel ● pertes de mises à jour sur accès concurrents ● y compris pour les répertoires (open, rename, unlink) Fournir mécanisme pour cohérence stricte ● à la demande, pour les applications ● systématique, pour les répertoires Différentes implémentations ● verrouillage (valable pour fichiers et répertoires) ● atomic broadcast (valable pour les répertoires) Introduction Architecture Cohérence En cours Conclusion 29 Preuve de Pastry ■ But final : prouver la correction des mécanismes ● de lecture / écriture d’inode ● de verrouillage d’inode Past.put(UCB) Past.get(UCB) t évolution du réseau ■ Etapes préalables : établir les propriétés des couches Pastry / Past ● prouver la correction des insertions / retraits de noeuds ● majorer l’erreur de routage quand le réseau est instable ● modéliser le mécanisme de réplication paresseuse des blocs Past ● minorer l’intersection entre deux ensembles de répliques interrogées Introduction Architecture Cohérence En cours Conclusion 30 Conclusion page 31 Résumé ■ ■ Caractéristiques de Pastis ● entièrement décentralisé, scalable ● assure l’intégrité des données et la cohérence interne des fichiers ● bonnes performances (seulement 1,4 à 1,8 fois plus lent que NFS) Enseignements ● contraintes de sécurité importantes ● impact sur les performances et les modèles de cohérence implémentables Introduction Architecture Cohérence En cours Conclusion 32 Pistes d’évolutions futures ■ ■ ■ Ajout de nouveaux modèles de cohérence ● inspirés des bases de données ● ou des mémoires partagées réparties Suppression des CHB inutilisés ● ramasse-miette distribué, en fonction des fichiers ouverts ● respect des contraintes de sécurité Implémentation de la confidentialité ● de façon transparente pour les utilisateurs ● en utilisant l’encryption convergente (factorisation) Introduction Architecture Cohérence En cours Conclusion 33 Liens Pastis : http://regal.lip6.fr/projects/pastis LS3 : http://regal.lip6.fr/projects/pastis/ls3 Pastry, Past : http://freepastry.rice.edu Introduction Architecture Cohérence En cours Conclusion 34