Rapport d'architecture logiciel Bases de données : haute disponibilité et load balancing, quels mécanismes ? 09/11/2012 Amha Bekele Esraa Maher Ghazi Ochi Vincent Verdier Table des matières Introduction...................................................................................................................................... 1 1 La haute disponibilité..................................................................................................................... 2 1.1 Réplication............................................................................................................................. 2 1.1.1 Réplication synchrone....................................................................................................2 1.1.1.1 Réplication synchrone asymétrique........................................................................3 1.1.1.2 Réplication Synchrone symétrique..........................................................................4 1.1.2 Réplication asynchrone (Lazy replication)......................................................................4 1.1.2.1 La réplication asynchrone asymétrique...................................................................4 1.1.2.2 La réplication asynchrone symétrique.....................................................................4 1.1.3 La diffusion des modifications........................................................................................5 1.2 Failover.................................................................................................................................. 5 1.3 Cluster................................................................................................................................... 6 2 Équilibrage des charges................................................................................................................ 7 2.1 Pourquoi le Load Balancing?.................................................................................................7 2.2 Les différentes solutions du load balancing............................................................................7 2.2.1 Base de données réparties.............................................................................................8 2.2.2 Base de données fédérées.............................................................................................9 2.2.3 La fragmentation............................................................................................................ 9 2.2.4 Les algorithmes............................................................................................................ 11 2.2.4.1 Round-robin.......................................................................................................... 11 2.2.4.2 Least connection...................................................................................................12 2.2.4.3 First response.......................................................................................................12 2.2.4.4 Random................................................................................................................ 12 3 Nouvelles techniques.................................................................................................................. 13 3.1 NoSql................................................................................................................................... 13 3.2 Cache.................................................................................................................................. 15 3.3 L'importance du facteur matériel..........................................................................................15 3.4 Consistent Hashing.............................................................................................................. 16 3.4.1 Problématique.............................................................................................................. 16 3.4.2 Solution........................................................................................................................ 16 Conclusion..................................................................................................................................... 18 Sources.......................................................................................................................................... 19 Architecture logiciel 09/11/2012 Introduction Chaque jour, les besoins des entreprises en termes de stockage de données augmentent, de même les utilisateurs et le marché sont de plus en plus exigeant en termes de disponibilité. La haute disponibilité consiste à assurer un taux de disponibilité qui se rapproche des 100%. L’indisponibilité d’un système peut coûter très cher à une entreprise, comme on peut le voir cidessous. Pour assurer un taux de disponibilité convenable, les entreprises sont donc contraintes d’assurer le bon fonctionnement de toutes les couches qui composent leurs systèmes informatiques. Et les bases de données représentent un élément clé dans la composition de tous système. Par exemple, le géant Google, qui doit satisfaire plus d’un milliard de requêtes par jour, est obligé d’assurer une haute disponibilité de son système d’accès aux données. En effet, il doit être capable de trouver une information rapidement dans une volumétrie considérable. Étant donné l’importance de l'accès aux données dans tout système informatique, on peut se demander quelles sont les solutions pour assurer une disponibilité convenable au sein d’un système de gestion de bases de données. Nous verrons dans une première partie quels sont les mécanismes pour la haute disponibilité en termes de base de données. Dans une seconde partie, nous expliquerons en détail un mécanisme incontournable : l’équilibrage des charges. Et enfin on verra dans une dernière partie quelles solutions se développent pour faire face aux mécanismes dites classiques. Page 1 Architecture logiciel 09/11/2012 1 La haute disponibilité Dans cette partie, nous détaillerons les principales techniques à mettre en oeuvre pour garantir la disponibilité des bases de données. Nous verrons que ces solutions combinent souvent des aspects matériels et logiciels. 1.1 Réplication On peut définir la réplication comme la copie d’un ensemble de données. On distingue généralement un site primaire appelé maître (ou référence), d’un site secondaire appelé esclave (ou cible). Le système de gestion de base de données (SGBD) ou le réplicateur s’occupe de la mise à jour des données. Site primaire Site secondaire Types d’accès des applications Lecture/écriture Lecture Ordres Select, Delete Insert, Update, Select La réplication permet de se prémunir de plusieurs problèmes qui peuvent nuire à la haute disponibilité. En effet, un SGBD, sans réplication, entraîne une surcharge et une dégradation du temps de réponse car toutes les applications accèdent au même système. De plus l’unicité de la base de données fait qu’il y a une très faible tolérance à la panne. La principale motivation de la réplication serait donc une amélioration des performances et de la disponibilité. Une amélioration des performances, dans la mesure où on évite un goulot d’étranglement en faisant appel à une copie plus ou moins proche. Une amélioration de la disponibilité, car dans le cas où il y aurait une panne on peut se replier sur une copie. Supposons que l’on possède deux copies avec risque de panne de 3%, alors la disponibilité est de 99,91% car : Disponibilité =1- risque de panne ^ nombre de copies La mise en place d’une réplication suppose le maintien à jours des copies, même si les copies peuvent être différentes à un instant donné. On définit en général 4 grandes techniques de réplication, chacune de ses méthodes a ses avantages que ce soit en terme de coût ou d’efficacité. Selon le budget et le type d’application, le choix peut-être différent. 1.1.1 Réplication synchrone La réplication synchrone consiste à ce qu’une transaction met à jour toutes les copies des données modifiées, cette technique à l’avantage de s’effectuer en temps réel. Cependant elle engendre un coût relativement élevé et souvent les entreprises dont l’exigence en temps réel est réduite choisissent la solution asynchrone. Page 2 Architecture logiciel 09/11/2012 1.1.1.1 Réplication synchrone asymétrique La réplication synchrone asymétrique est composée d’un maitre qui accepte les écritures et d’ esclaves qui sont accédés en lecture. On utilise un mécanisme de « two phase commit ». Si ce mécanisme n’est pas mis en place, la présence de plusieurs bases fait que si une base tombe en panne, et qu’une transaction est enclenchée, le principe d’intégrité ne sera plus respecté. Le « two phase commit » consiste comme son nom l’indique en deux phases, une première dite de scrutation (ou de vote) et une deuxième de décision. Phase de scrutation Le coordinateur envoie les ordres à tous les sites et demande s’ils peuvent valider la transaction. Dans le cas où un site répond de manière négative, il quitte la branche de la transaction. Le cas échéant, il se met en attente de la phase de décision. Phase de décision Si tous les sites participants sont en mesure d’effectuer la transaction, le coordinateur leur indique qu’ils peuvent faire un COMMIT. Si un des serveurs, n’est pas en mesure d’effectuer la transaction, le coordinateur force tous les sites à faire un ROLLBACK. Page 3 Architecture logiciel 09/11/2012 1.1.1.2 Réplication Synchrone symétrique Contrairement à la réplication synchrone asymétrique il n’existe pas de table maître : chaque table possède un trigger qui se déclenche lors d’une modification. Cette façon de faire nécessite d’une part un système de verrous le temps qu’une modification se propage, et d’autre part une gestion des priorités. 1.1.2 Réplication asynchrone (Lazy replication) Plus flexible que la manière synchrone il donne la possibilité de faire les mises à jour à des intervalles de synchronisation, par exemple à des moments de faible affluence. 1.1.2.1 La réplication asynchrone asymétrique Les transactions mettent à jour une copie dite primaire ( publisher ), les mises à jour de cette copie est envoyé aux autres copies( subscribers) ultérieurement. Le problème auquel on se heurte, est qu’à un instant T, les dernières modifications ne sont pas répercuté. Mais cela fait partie du compromis pour diminuer les coûts et le temps de réponse. Une banque par exemple ne pas se permettre un tel compromis. 1.1.2.2 La réplication asynchrone symétrique Les modifications sur une table sont stockées dans une file, pour être lancé de manière ultérieure. L’exemple classique est l’ordinateur portable du commercial qui n’a pas forcément accès à un réseaux lors de son déplacement. Le soir, en rentrant chez lui, un échange est effectué dans les deux sens, de la base locale du commercial vers la base centrale et vice-versa. Ce type de réplication entraîne de forte incohérence, car il se peut qu’il y ait plusieurs versions “copie” de la base primaire. La réplication asynchrone symétrique nécessite donc un moyen de réconciliation des conflits. La règle de Thomas permet de s’assurer que les copies convergent. Cette règle consiste à estampiller (cacheter) chaque entrée , par exemple en utilisant l’heure exacte + le site concerné. Une transaction met à jour l’entrée et son estampille, l’estampille est toujours croissante. La mise à jour est appliquée si et seulement si l’estampille de la mise à jour est supérieur à celle de l’entrée. Page 4 Architecture logiciel 09/11/2012 1.1.3 La diffusion des modifications Lors de la réplication, le résultat peut être diffusé de deux manières : – Le résultat de la requête est directement envoyé, ce qui permet de ne pas faire l’opération plusieurs fois. Cependant cela nécessite que l’on s’assure que les mises à jour soient identiques sur tous les sites. – L’opération est envoyée à chaque site, et chacun effectue l’opération. Cette technique a le mérite d’être plus flexible, en revanche il y a un risque d’incohérence avec les opérations non-déterministe de type random(). 1.2 Failover Lors d'une défaillance, d'un arrêt programmé ou d'une surcharge de requêtes, le failover assure la continuité d'une ressource matériel via un système de secours tel qu'un serveur redondant. Ce basculement peut avoir lieu de façon automatique ou être déclenché par une action manuel. Au niveau des serveurs matériels, l’automatisation du basculement est généralement réalisée à l’aide d’un logiciel de surveillance de disponibilité tel que “Heartbeat” issue du projet “LinuxHA”. Ce programme permet de surveiller l’activité d’un serveur via un ou des signaux qui sont régulièrement émis par le serveur à surveiller. Ces “battements de coeur” peuvent être prévus de différentes façons : connexion par port série, connexion ethernet UDP/IP broadcast, unicast, ping... Dans le cadre de la haute disponibilité en matière de base de données, on utilise généralement la technique du failover sur des disques durs partagés par un cluster de serveurs. On peut également l'appliquer à un ensemble de base de données. Lors d'une opération de failover la base données secondaire devient alors la base de données primaire. Ce mécanisme comporte toutefois certains désavantages. En effet, le basculement provoque l'annulation de toutes les transactions en cours de traitement. Le failover doit donc plutôt être déclenché en cas de défaillance grave tel qu'une panne matériel. Page 5 Architecture logiciel 09/11/2012 1.3 Cluster Les clusters (ou grappe de serveurs en français) sont un ensemble d'ordinateurs (nœuds du cluster), connectés entre eux via un réseau local à très haute vitesse et qui fonctionnent comme s'il s'agissait d'un seul système. Ils sont principalement utilisés en calcul distribués ainsi qu'en stockage grâce aux systèmes de gestion de bases de données réparties. Il existe plusieurs configurations de clusters : Actif/Actif Dans cette configuration, tous les nœuds fonctionnent ensembles pour fournir le même service. On a l’avantage de pouvoir faire du load-balancing. De plus, on utilise un système de fichier distribué ce qui rend le basculement totalement transparent. Actif/Passif Cette approche est couramment utilisé dans le cadre du failover. Elle consiste à laisser en attente un nœud redondant pour chaque nœud du cluster afin qu'ils prennent le relais des nœuds actifs en cas de défaillance. On parle de noeuds maîtres et esclaves. Les données du noeud maître sont automatiquement répliquées sur l’esclave et ce dernier prend le rôle de maître en cas de défaillance. N+1 Un nœud supplémentaire prend le relais en cas de panne. Dans le cas d'un environnement de serveurs hétérogènes, ce nœud supplémentaire doit être capable d'assumer n'importe quel rôle. N+M Même chose que pour N+1 mais avec M serveurs. Page 6 Architecture logiciel 09/11/2012 2 Équilibrage des charges Dans cette partie, nous expliquerons les avantages et les mises en place possibles de la répartition des charges. La répartion des charges consiste à effectuer une distribution des travail à différentes machines. En fonction de la disponibilité des serveurs, mettre en place le load balancing permet de rediriger les consommateurs de services adéquatement. L’équilibrage permet d’adapter la méthode de redirection des services en suivant des algorithmes qui ont dèjà fait leurs preuves ( Round Robin, Random, Least Resources). 2.1 Pourquoi le Load Balancing? Les avantages de l’équilibrage de charge sont multiples. En effet, mettre en place ce genre de technique permet de distribuer le travail entre différents ordinateurs. Cela permet d’obtenir des dispositifs très performants. Le load balancing permet d’améliorer la qualité, la disponibilité des données et l’évolutivité d’une infrastructure. Mettre en oeuvre un équilibrage des charges permet d’augmenter la qualité des services. Ainsi, en séparant les différentes tâches à un pool de machines, le temps de réponse des services fonctionnels est plus court et la capacité à pallier la défaillance d’une ou plusieurs machines est meilleure. L’équilibrage des charges est aussi très intéressant pour une entreprise qui a un potentiel de croissance ainsi qu’un risque de charge accrue (lorsque beaucoup de ressources utilisent de nombreux services). En effet, répartir les charges augmente la scalabilité et la disponibilité des serveurs : cela permet donc de maintenir ses fonctionnalités et ses performances en cas de forte demande. La gestion de la scalabilité permet de lutter contre les pannes et l’arrêt temporaire des services. Aussi, l’évolutivité de l’architecture est renforcée avec la possibilité d’ajouter des serveurs sans interrompre le fonctionnement et la continuité des services. Le load balancing favorise une meilleure gestion des données puisque la haute disponibilité des serveurs diminue les risques de défaillance ou d’arrêts planifiés des systèmes d’exploitation qui pourraient nuire à l’accès aux données. Les données sont donc accessibles plus de temps. Les données sont mieux protégées car il y a moins de risques associés à la perte et à la non-disponibilité des données. Enfin la disponibilité des données et des serveurs rend le système plus fiable. 2.2 Les différentes solutions du load balancing Au niveau des bases de données, le but du load balancing est d’optimiser au mieux la répartition des données afin d’avoir les meilleurs performances possibles (suivant des critères de volume de données, temps de réponses, disponibilité ou fiabilité des données). Page 7 Architecture logiciel 09/11/2012 2.2.1 Base de données réparties Une base de données est gérée par un seul système de gestion de bases de données et est stockée totalement dans un unique espace physique. Par opposition, Les bases de données réparties sont stockées dans différents endroits. En effet, plusieurs unités coopèrent pour gérer les informations et les traitements sont séparés. Les objectifs sont multiples : • Limiter le transfert d'information (en nombre et en volume) en répartissant les données là où elles sont le plus utilisées • Accroître les performances par la répartition de la charge de travail sur plusieurs unités de traitement opérant en parallèle • Augmenter la fiabilité (en faisant effectuer le même traitement par plusieurs ordinateurs et en dupliquant les données sur différents sites) • La disponibilité des informations en dupliquant l’information Le principe d’une base de données répartie : Une base de données répartie est une base dont différentes parties sont stockées sur des sites, généralement géographiquement distants. Les sites sont néanmoins reliés par un réseau. Un système de bases de données réparties est normalement conçu pour gérer la concurrence, la fiabilité, l’optimisation des requêtes ou transactions sur des données gérées par les différents SGBD sur plusieurs sites. Utilisation d'une base de données répartie Le principe fondamental des bases de données réparties doit être la transparence pour l'utilisateur. Cette transparence s'exprime sous trois formes : • La transparence de localisation, les utilisateurs accèdent à la base de données normalement (en utilisant le schéma conceptuel ou des vues externes) mais ne choisissent pas le site sur lequel il souhaite recevoir les données. • Transparence de partitionnement, les utilisateurs ne doivent pas savoir que les données sont fractionnées et ne se soucie pas de la réunification. Page 8 Architecture logiciel • 09/11/2012 Transparence de duplication, lors de l’ajout ou de la modification d’une information, c’est le système qui se charge de dupliquer les données. Les problèmes de la répartition : • Complexité de la répartition puisque les données sont fragmentées, dupliquées ou éloignées. • La mise en place des schémas locaux à partir du schéma global peut être compliquée. 2.2.2 Base de données fédérées Une base de données fédérée a pour but de donner aux utilisateurs une vue unique des données présentes dans plusieurs systèmes : Objectifs : Les intérêts de fédérer une base de données peuvent être multiples. Premièrement, on améliore les performances de la base en séparant les traitements sur chaque base locale. Ensuite, l’utilisateur a une vue unique des données implémentées sur plusieurs plate-formes ou SGBD. Troisièmement, la fédération d’une base permet de faire cohabiter différents systèmes tout en leur permettant d’interagir ensemble. Les problèmes de la fédération : • Hétérogénéité sémantique (BD) et syntaxique (SGBD, communications) • Le besoin des schémas locaux pour créer un schéma global. 2.2.3 La fragmentation Le partitionnement de données permet d’améliorer les performances de la base de données en réduisant la taille des fichiers en allégeant les traitements. La Fragmentation horizontale : La fragmentation horizontale consiste à découper une table en sous-tables. On utilise alors les prédicats pour sélectionner des tuples appartenant à chaque fragment. La reconstitution de la relation initiale se fait grâce à l'union des sous-relations. Page 9 Architecture logiciel 09/11/2012 Exemple : Fragments définies par sélection : Client1 = select * from Client where ville = "Marseille" Client2 = select * from Client where ville <> "Marseille" Client Client 1 Client 2 NoCli NomCli VilleCli C1 Dupond Marseille C2 Durant Lyon C3 Duval Paris C4 Dupeye Marseille NoCli NomCli VilleCli C1 Dupond Marseille C4 Dupeye Marseille NoCli NomCli VilleCli C2 Durant Lyon C3 Duval Paris La Fragmentation verticale : C’est le découpage d'une table en sous tables par projection de colonnes. Chaque fragment est composé d’une partie de la relation initiale. La relation initiale doit donc pouvoir être recomposée par la jointure des fragments. Exemples Fragments définies par projection : Client1 = select NoCli, VilleCli from Client Client2 = select NoCli, NomCli from Client Page 10 Architecture logiciel Client 09/11/2012 NoCli NomCli VilleCli C1 Dupond Marseille C2 Durant Lyon C3 Duval Paris C4 Dupeye Marseille Client 1 Client 2 NoCli VilleCli C1 Marseille C2 Lyon C3 Paris C4 Marseille NoCli NomCli C1 Dupond C2 Durant C3 Duval C4 Dupeye 2.2.4 Les algorithmes 2.2.4.1 Round-robin La technique de répartition la plus simple et la plus couramment utilisée est celle du DNS RoundRobin, ou DNS-RR. Round-robin est un algorithme d’ordonnancement courant dans les systèmes d’exploitation. Il permet une répartition des charges équitable entre serveurs d'une ferme informatique (cluster). Chaque processus a un temps égal aux autres. Le Round-robin est souvent apparenté au tourniquet d’un parc : chaque processus passe devant le tourniquet et s’exécute en un temps fini. Principe : Les processus sont gérés dans une liste et tous les nouveaux processus sont ajoutés en fin de liste. Le processeur contrôle le temps de passage de chaque processus et ne leur permet pas de dépasser un temps fini (pour éviter les possibilités de famines). Dès qu’un processus ne fini pas son traitement mais que son temps accordé est écoulé, il arrête d'utiliser le processeur et est placé en fin de liste. Page 11 Architecture logiciel 09/11/2012 Un processus qui a terminé son travail est sorti de la liste, par conséquent le temps d'attente pour les autres processus diminue. 2.2.4.2 Least connection Principe : L’algorithme least connection fournit une connexion au serveur qui a le plus petit nombre de connexions courantes. Il fonctionne mieux dans un système où les serveurs ont des capacités similaires. Toutefois, il faut faire attention avec cette méthode car un serveur peut être considéré comme chargé (beaucoup de connexions) alors que les processus sont en attente d’une requête vers une base de données. 2.2.4.3 First response Principe : Les requêtes clients sont envoyées simultanément à tous les serveurs et le premier qui répond sera chargé de la connexion. 2.2.4.4 Random Principe Les requêtes sont envoyées à un serveur au hasard. Cette méthode n’est cependant jamais utilisée en général. Page 12 Architecture logiciel 09/11/2012 3 Nouvelles techniques Face aux limites des solutions dites “classiques” d’autres solutions se développent comme le NoSql, toutefois il ne faut pas négliger l’impact du matérielle et de l’humain dans cette recherche de haute disponibilité. 3.1 NoSql NoSql (“Not Only SQL”, en Français “Pas seulement SQL”) constitue une nouvelle approche dans les systèmes de gestion de base de données. Apparu début 2009, ce mouvement propose une alternative au “tout relationnel” qu’on trouvait partout jusqu’à présent. Le fonctionnement de ces bases s’appuie sur des concepts plus simples tel que le stockage de paires clé/valeur. Les bases NoSQL permettent donc de répondre avant tout aux besoins de performances provoqué par l’explosion du Web 2.0. En effet, leur modèle de données réduit permet de grandement optimiser les opérations de recherche et d’insertion. On peut donc supporter une charge de trafic beaucoup plus importante qu’avec les SGBDR classiques. SQL vs. NoSql Les bases de données NoSQL sont orientés colonnes : c’est-à-dire que l'on peut ajouter des colonnes à chaque enregistrement aussi facilement qu'on ajoute des lignes (par INSERT/UPDATE) dans le modèle relationnel. L’évolution d’une base NoSQL peut donc se faire aussi bien sur le nombre de colonnes que de lignes. En effet, le NoSQL est beaucoup plus rapide grâce à la façon dont on traite les colonnes variables. Par exemple, imaginons que nous avons à gérer le trafic d’un aéroport. Dans un SGBDR, la table avec la liste des vols prendrait la forme suivante : Étant donné que le nombre de passager d’un vol est variable, on ne peut pas avoir une colonne pour chacun d’entre eux. Sinon la table contiendrait de nombreuses valeurs nulles et la rapidité des recherches en seraient gravement affecté. Dans un modèle de données relationnel classique, on résoudrait le problème en créant une table de jointure entre les vols et les passages : Cette table contiendrait donc à la fois tous les vols et tous les noms de passagers. Page 13 Architecture logiciel 09/11/2012 Une ligne de table NoSQL quand à elle aurait la forme suivante : Ici, le nombre de colonnes pour chaque vol dépend du nombre de passagers. Cela permet d’accélérer la recherche d’un passager précis tout en facilitant la mise à jour des données. Cependant, l’augmentation des performances se fait au prix d’une perte de fonctionnalités. En effet, le théorème de CDP (par Eric Brewen) dit qu’il est impossible pour un cluster de garantir en même temps les trois contraintes suivantes : – Cohérence : chaque noeud possède la même vision des données – Disponibilité : toutes les requêtes reçoivent une réponse – Tolérance au partitionnement : pas de “single point of failure” D’après ce théorème, un système de calcul distribué ne peut garantir que deux de ces contraintes à un même instant T. Les SGBD NoSql ne respectent donc que partiellement les contraintes ACID. Cela leur confèrent par contre une grande tolérance aux pannes, ce qui constitue un avantage certain pour la haute disponibilité. On peut notamment évoquer le projet Apache Cassandra qui s’appuie sur les principes suivants : haute disponibilité et tolérance au partitionnement. De plus, leur fonctionnement décentralisé et hautement distribué permet d'orchestrer facilement la réparation des charges. Preuve de leur grande efficacité à manipuler de gros volumes de données, on retrouve ce type de bases dans de grands systèmes tel que Twitter, Facebook ou LinkedIn. Enfin, sauf rares exceptions (VoltDB et SQLFire par exemple), ces systèmes ne disposent pas d’un langage de requêtes structurés comparable à SQL. Exemple : Bigtable: système de bases de données distribué version Google Chaque jour, Google fait face à 2 contraintes majeures. La 1ère est la satisfaction de plus d’un milliard de requêtes par jour et la seconde est le temps de réponse qui doit être très rapide pour pour satisfaire les internautes. En effet, Les SGBDR traditionnelles ne suffisent plus pour satisfaire de tels besoins puisqu’on parle des volumétries d’ordre de Petabytes (1 Petabyte = 1024 Terabytes). La solution chez Google est d’utiliser le BigTable qui a été développé et utilisé chez Google depuis l’année 2005. C’est un système de base de données distribué à haute performance de type NoSQL. Page 14 Architecture logiciel 09/11/2012 Exemple : structure d’enregistrement de la table Webtable Cette structure sert à référencer les pages Web. L’index est constitué d’une URL inversée, la colonne ‘contents’ contient plusieurs versions du code source d’une page et les colonnes de clés (ici ‘anchor:…)’ contiennent des termes ou clés qui référencent la page. Les t? sont les horodatages. On constate que les clés ne possèdent qu’une version chacune (t9 et t8) alors que la colonne ‘content’ en contient 3 (t3,t5 et t6). Ceci permet de référencer plusieurs versions d’une même page Web. 3.2 Cache Le principe de la mémoire cache est de copier temporairement des données sur un support plus rapide afin de permettre un accès ultérieure plus rapide. Les serveurs SQL utilisent la mémoire RAM comme cache pour améliorer les temps d'accès par rapport à l'utilisation du disque dur. Cependant, les performances se dégradent vite dès que le volume de la base de données dépasse la capacité de la mémoire RAM. Il est possible d'utiliser un système de cache distribué afin de pallier ce problème. Cela permet de répartir les données sur la mémoire RAM de plusieurs serveurs au lieu d'un seul. Impensable il y a une dizaine d'années, cette solution est devenu possible en raison de la contraction des coûts la mémoire et de la généralisation des réseaux à 1Gbit/s voir 10Gbit/s. Memcached est un logiciel libre permettant de mettre en place un système de cache distribué. Il fonctionne sur le principe de stockage par clé/valeur comme une table de hash. Ce système permet par exemple à Facebook de créer un espace logique de 28 To, réparties sur plus de 800 serveurs. 3.3 L'importance du facteur matériel Nous avons vu plus haut plusieurs techniques qui permettent d’assurer une disponibilité convenable des données tout en conservant une cohérence. Toutefois la disponibilité d’un système informatique ne pas se résumé qu’aux solutions exposés plus haut. En effet, si une ressource matérielle critique tombe en panne, cela peut mettre en péril l’ensemble du système. On appel Single Point Of Failure la chute d’une ressource critique qui affecte tous le système, par exemple : le disque dur d’accès aux donnée, l’alimentation… Il convient donc d’assurer que le système est abrité dans des locaux adaptés (climatisation, groupe électrogène en cas de coupure de courant) et que les données sont sécurisés en utilisant Page 15 Architecture logiciel 09/11/2012 un matériel de stockage adapté. En effet l’utilisation d’un NAS ou d’un SAN peut s’avérer être un excellent moyen d’assurer une haute disponibilité. NAS (Network Attached Storage), il désigne un serveur de fichier autonome et indépendant des serveurs d’application, dédié au stockage, accessible à des utilisateurs autorisés. Il a l’avantage de coûter moins cher qu’un SAN. En effet comme le NAS autorise des accès provenant de serveurs multiples on peut facilement implémenter des systèmes de répartition de charge et de tolérance aux pannes. Pour sécuriser les données il utilise la technologie RAID, qui pour faire simple désigne les techniques permettant de répartir des données sur plusieurs disques. SAN (Storage Area Network), à la différence du NAS , c’est un réseau de stockage . Il possède un réseau très hauts débit (Fibre le plus souvent), un ensemble d'équipement d’interconnexion et des disques de stockage. Il a pour avantage principale de permettre le partage d'énormes quantités de données entre plusieurs ordinateurs sans affecter les performances du système, puisque il possède son propre réseau. Par ailleurs, sa capacité de stockage peut-être étendu à l’infini. Cependant, son prix d’acquisition est souvent cher et n’est pas adapté à des petites structures. 3.4 Consistent Hashing 3.4.1 Problématique Le modèle classique de répartition de charge utilise un “load balancer” (français : Équilibreur de Charge) qui distribue (aiguille) le trafic sur les serveurs disponibles en utilisant une formule statique comme le « hash ». En effet, c’est la clé de l’entrée, modulo le nombre de serveurs (N) qui permet de faire l’aiguillage. Du coup, Lorsqu’on ajoute un nouveau serveur pour faire face contre l’augmentation de trafic, on sera obligé à faire une réorganisation des données (car N a changé). Cela rend l’ajout de ressource vraiment coûteuse. 3.4.2 Solution L’algorithme Consistent Hashing ( Français : Hachage Uniforme) permet de répondre a cette problématique en se basant sur une fonction de hachage qui utilise la fonction SHA-1 (secure hash algorithm) qui dispose d'un espace bits de 2 ^ 160. Page 16 Architecture logiciel 09/11/2012 Lorsqu’un nœud rejoint le cluster, il choisit un nombre aléatoire, et ce nombre détermine les données dont il va être responsable. Avantages : • • • Réplication : un nouveau nœud choisit simplement les partitions dont il sera chargé, et une autre pile de partitions pour faire une réplique. Scalability : lorsqu’on assigne un partitionnement a un nouveau nœud, il demande aux nœuds voisins de diviser les données entre eux (équilibrage de charge). Availablity : On peut facilement ajouter ou enlever des nœuds. En effet, la réplication et le scalability permet d’assurer une meilleure disponibilité et de tolérance aux pannes. Il est a note que le consistent hashing est aujourd’hui bien implémentées dans les load-balancer web mais pas encore dans les load-balancer pour répartir les requêtes sql, memcache ou autre… Page 17 Architecture logiciel 09/11/2012 Conclusion Nous avons vu donc que de nos jours la haute disponibilité devient incontournable dans les systèmes informatiques. Même si cela présente souvent un coût considérable, les périodes d’indisponibilités font perdre beaucoup plus d’argent que l’investissement nécessaire assurer la haute disponibilité des infrastructures informatiques. De plus, des géants comme Google qui font face à l’augmentation du volume des données sont contraint de développer de nouvelles techniques de gestion de base de données. Cependant, il est évident que tout système humain est faillible. On peut certes parler de haute disponibilité mais jusqu’à qu’elle taux ? En effet, il semble impossible pour le moment de parvenir à des taux de 100% de disponibilité. Concernant l’équilibrage des charges, nous avons pu observer que ce principe s’applique aussi au domaine des bases de données. En effet, il existe des mécanismes qui permettent de bien regrouper les informations, de séparer les données pour obtenir un système de requêtage plus performant. En effet, bien organiser sa base de données permet d’avoir des informations plus disponibles et mieux situées. Depuis peu, de nouvelles techniques tentent de résoudre les problèmes qui persistent avec les technologies actuelles de haute-disponibilité et de load-balancing : NoSql, systèmes de caches distribuées, nouveaux algorithmes... Il est intéressant de noter que ces mécanismes pleins de promesses sont déjà mis en oeuvre avec succès par certains géants de l’informatique comme Facebook, Google ou encore Twitter. On peut donc penser que la haute-disponibilité et le loadbalancing continuera d’évoluer dans ce sens au cours des prochaines années. Page 18 Architecture logiciel 09/11/2012 Sources http://blog.neoxia.com/nosql-5-minutes-pour-comprendre/ http://home.nordnet.fr/~ericleleu/cours/nfe107/Haute%20Disponibilite.pdf https://fr.wikipedia.org/wiki/Serveur_de_stockage_en_r%C3%A9seau http://msdn.microsoft.com/en-us/magazine/dd942840.aspx https://www.facebook.com/note.php?note_id=39391378919 http://msdn.microsoft.com/en-us/magazine/dd942840.aspx http://en.wikipedia.org/wiki/Computer_cluster http://www.lsis.org/espinasseb/Supports/BDA-2010/BDrepartiesFederees-2010-4p.pdf http://www.learnlinux.org.za/courses/build/internals/ch04s02.html http://www.commentcamarche.net/contents/surete-fonctionnement/san.php3 http://www.dalibo.org/_media/articles/postgresql_ha.pdf http://nosql.mypopescu.com/post/870237816/google-bigtable-paper-summarized http://docs.huihoo.com/cloud-computing/Google-Cluster-Computing-Module-7-Other-GoogleTechnologies.pdf http://www.haute-disponibilite.net/2010/10/03/optimiser-la-repartition-de-charge-avec-le-consistenthashing/ http://www.paperplanes.de/2011/12/9/the-magic-of-consistent-hashing.html http://www.mikeperham.com/2009/01/14/consistent-hashing-in-memcache-client/ http://www.tomkleinpeter.com/2008/03/17/programmers-toolbox-part-3-consistent-hashing/ http://www.scriptol.fr/programmation/nosql.php http://www.inzecloud.fr/bigtable-systeme-de-bases-de-donnees-distribue-version-google/ http://jimbojw.com/wiki/index.php?title=Understanding_Hbase_and_BigTable http://ehcache.org/documentation/get-started/about-distributed-cache http://en.wikipedia.org/wiki/Distributed_cache Page 19