Dynamo: Amazon’s Highly Available Key-value Store # Bonjour à tous, vous pouvez également contribuer à ce pad : https://hackmd.io/JiYCXUWhTmSsL6WoIN3gFg?edit [Lien de l'article ici !](https://moodle.imt-atlantique.fr/pluginfile.php/55770/mod_resource/content/4/amazon-dynamo-sosp2007.pdf) * [sur ACM](https://dl.acm.org/doi/abs/10.1145/1323293.1294281) * [sur google scholar](https://scholar.google.com/scholar?hl=fr&as_sdt=0%2C5&q=Dynamo%3A+Amazon%E2%80%99s+Highly+Available+Key-value+Store&btnG=) **Nous aimerions avoir une prise de notes partagée !** Vous pouvez consulter ce document en mode visualisation (l'oeil dans le menu), en mode édition (le crayon) 2 séances prévues - d'étude d'article * une lecture préalable d'article scientifique * une analyse approfondie # Qui participe ? * Jean-Marie Gilliot * Antoine Beugnard * Sylvain Thong * Noé Loisil * Ben Mustapha Riadh * Tchadel Icard * Charly Martin Avila * Liam COURSODON * Thibaud Couchet * Zahdi Mohcine * ZHU Xinlei * Zhan NING * ZHONG Junzhang # Comment l'avez vous lu ? * NotebookLM/ChatGPT : résumé, poser des questions * Lecture longue - linéaire * Lecture de l'abstract, l'intro, et finir par la conclusion pour avoir une idée générale. # Pourquoi cet article mérite-t-il d'être lu ? * Article de référence * Amazon # Qu'en avons-nous retenu ? * Très grande disponibilité (99.9995%) plutôt que la cohérence * Beaucoup de justifications avec des exemples concrèts de cas d'utilisateurs * Approche quantitative # Quel est l’objectif de l’article ? * Prouver que notre solution est pérenne/solide, apte à être déployée en production # Quelle est la motivation de l'article ? * Acheter AWS ! $$$ * Attirer les ingénieurs/chercheurs brillants # Structure de l'article 1) Abstract (Résumé) 2) Introduction 3) Contexte/background a) Besoins utilisateurs b) Propriétés ACID c) Qualité de service 3) Related work (solutions existantes/l'état de l'art) 4) Architecture (éléments de solution) 5) Implémentation (mise en oeuvre) 6) Expériences and lessons learned (limites) 7) Conclusion # Solution générale proposée * Dynamo - base de données clé-valeur * Anneau * Passage à l'échelle * Réplication (tolérance aux fautes) * Performance (réponse rapide) * Disponibilité * Gestion des versions # Algorithmes identifiés * Consistent hashing * Gossip * Vector clocks * Sloppy quorum # Présentations... * 4.1 à 4.3 : Junzhang, Charly Martin Avila, Zhan Ning, Liam * 4.4 & 4.5 : Sylvain, Mohcine, Riadh, Xinlei (il n'y a plus de place tant pis pour vous) * 4.6 à 4.9 : Tchadel Icard, Thibaud Couchet, Yongshun JIAO, Noé Loisil en 15 minutes : présenter la partie en reliant avec les éléments de validation # Notes présentation 1 ## 4.1 Interface - get(key) - put(key, context, value) ## 4.2 Consistent hashing - Chaque noeud est responsable des noeuds qui le précèdent - La répartition de charge n'est pas uniforme - Noeuds virtuels pour mieux répartir la charge et ne pas avoir à redistribuer toutes les clés : faciliter l'ajout des noeuds ## 4.3 Réplication Deux enjeux : - Haute disponibilité - Haute durabilité Utilisation d'une liste de préférence qui stocke la liste des noeuds sur lesquels répliquer les données afin de pouvoir récupérer celle-ci en cas de panne : elle est de taille N Trois variables tunnables : - N : Cohérence - R : Performance - W : Disponibilité # Notes présentation 2 Euh ? ah ouais d'accord super sympa les gens # Notes présentation 3 ## 4.6 Gestion des erreurs/pannes temporaires Une propriété assurant le quorum telle que R+W>N n'est pas résistante à d'éventuelles pannes de certains noeuds ou de problèmes réseaux. Deux idées : - sloppy quorum : priorité aux noeuds vivants - hinted handoff : ?? ## 4.7 Gestion des pannes permanentes Le hinted handoff est pertinent dans le cas de noeud qui sont indisponibles temporairement mais celle-ci pose problème si des noeuds tombent en panne de manière permanente. Deux solutions : - Protocole anti-entropie - Utilisation d'arbres de Merkle (parents qui contiennent les condensés de leurs enfants, les feuilles contiennent les condensés des valeurs des clés individuels) ==> Racines identiques = pas de problème de synchronisation ==> Racines différentes : identification des branches divergentes, échange des clés spécifiques pour synchronisation ## 4.8.1 Ring membership - Possibilité d'ajouter/retirer des noeuds - Propagation des changements par protocole gossip - ??? ## 4.8.2 External discovery Le protocole gossip peut créer temporairement des partitions logiques dans l'anneau dynamo ==> seed nodes pour valider et synchroniser les infos ## 4.8.3 Détection de pannes Détecter effectivement les noeuds permet d'éviter des tentatives de communication inutiles et de ne pas rester bloqué sur une éventuelle interruption de service ==> Détection locale ==> Pas besoin d'une vision globale ## 4.8 Validation Résultats : - Haute disponibilité (99,9995%) - Cohérence à terme - Scalabilité et flexiblité opérationnelle ## 4.9 Ajout/Suppression d'un noeud de stockage - Il faut répondre à de multiples critères lors de l'ajout des noeuds : garantir une distribution équitable de données après ajout et rejet, simplicité de cette opération, confirmation de la complétude de l'opération. je vais pas écrire tout seul hein :angry: R+W > N?