Cluster Informatique : l’infrastructure de base du Big Data

Avec les challenges dont on fait face dans l’ère du Numérique, la meilleure stratégie pour valoriser les données massives ne consiste plus à centraliser le stockage et le traitement des données sur un serveur [aussi puissant soit-il], mais à distribuer leur stockage et à paralléliser leur traitement sur plusieurs « nœuds » d’une grappe. Ici, on profite de la baisse des coûts de PC pour construire ce qu’on appelle un cluster d’ordinateurs, qui consiste à regrouper plusieurs dizaines, voir centaines, voir milliers de PC classiques interconnectés entre eux par des câbles réseaux au moyen de commutateurs.

Cette approche de traitement de données, où plusieurs PC sont regroupés en cluster interconnectés est appelée cluster computing. Celle-ci est devenue la fondation infrastructurelle de la valorisation des données à large échelle. Dans cette chronique, nous allons expliquer en profondeur le fonctionnement d’un cluster informatique. Plus précisément, nous allons vous expliquer comment des serveurs ou des PC classiques peuvent être regroupés en grappes pour servir de support à l’exploitation massive de données.

1- De l’architecture centralisée à l’architecture distribuée

Vous devez comprendre qu’avant le Big Data, l’approche stratégique utilisée par les entreprises pour gérer leurs données consistait à centraliser le stockage et le traitement des données dans un serveur central. C’était une architecture centralisée dans laquelle l’essentiel de la charge de calcul était dévolue à un serveur très puissant, conçu sur-mesure par des spécialistes de l’industrie informatique tel que HP, Dell, ou encore EMC. Cette charge pouvait être délocalisée et partagée entre des machines clientes et le serveur, mais la majeure partie de la charge est traitée par le serveur (d’où est née l’architecture client-serveur, qui est un type d’architecture centralisée).

architecture centralisée informatique
Figure : architecture centralisée. Ici, l’essentiel de la charge de calcul est dévolue à un serveur central très puissant.

Malheureusement, avec les contraintes du Big Data, l’upsizing, qui est utilisée pour faire passer à l’échelle ce type d’architecture, n’est plus suffisante pour faire face à la croissance exponentielle du volume de données. La centralisation du stockage et du traitement des données sur un serveur central crée une pression beaucoup trop forte sur l’architecture informatique de l’entreprise, ce qui par effet de domino augmente le temps de réponse des requêtes aux clients (la latence). Cette augmentation de latence est préjudiciable dans le cadre de nombreux secteurs d’activités, nécessitant des réponses en temps quasi-réel, à l’instar de l’e-commerce, la banque de de détail, l’industrie, etc. C’est pour répondre à ces limitations que les architectures distribuées, notamment de cluster computing ont été mises sur pied.

2 – De l’architecture distribuée au cluster informatique

Dans une architecture distribuée, à l’inverse de l’architecture centralisée, on profite de la baisse des coûts d’ordinateurs pour regrouper via la fibre optique ou des câbles RJ45 et plusieurs commutateurs, plusieurs dizaines, ou milliers de PC commodes . L’effet synergique qui en découle génère 4 avantages majeurs pour la valorisation des données massives :

  • La baisse de coûts : vous connaissez peut-être la fameuse loi de Moore qui stipule que le doublement du nombre de transistors des processeurs des ordinateurs  tous les 18 mois s’accompagne d’une baisse de prix de moitié. Cela s’est vérifié avec le temps et implique que le coût d’acquisition et de maintenance d’un cluster est plus faible que le coût d’acquisition d’un serveur central sur le long terme. En d’autres termes, il revient moins chère à une entreprise d’ajouter un nœud à un cluster (scalabilité horizontale) que d’ajouter des capacités supplémentaires à un serveur central (scalabilité vertical ou Upsizing) ;
  • La scalabilité horizontale. Le regroupement d’ordinateurs en architecture distribuée possède une caractéristique très intéressante sur les clusters : la scalabilité horizontale. L’ajout d’un ordinateur supplémentaire dans un cluster augmente de façon plus que proportionnelle la performance du cluster. Ce point est développé plus en détail plus bas ;
  • La haute disponibilité ou tolérance aux pannes. le regroupement d’ordinateurs en clusters permet de distribuer le traitement entre ceux-ci, ce qui offre la capacité au système de continuer à fonctionner malgré les défaillances, ce qui n’est pas le cas dans les architectures centralisées dans lesquelles la disponibilité de tout le système repose entièrement sur un point : le serveur central ( c’est d’ailleurs pourquoi on l’appelle le « single point of failure » – point de défaillance unique). Dans une architecture distribuée, en cas de panne d’un des ordinateurs, un autre prend le relais du traitement automatiquement. Idem, en cas de manque de ressources, un autre qui possède plus de ressources prend le relais ;
  • Les goulots d’étranglement dans le réseau. Dans une architecture centralisée, les opérations de transfert de données via le réseau (techniquement on parle d’I/O) qui vont vers le serveur central ou les réponses qui descendent chez les clients engendrent rapidement un goulot d’étranglement (Network Overhead) sur le réseau. Dans les architectures distribuées, les opérations sont parallélisées, et on ne possède pas un point de défaillance unique, par conséquent la charge de travail est répartie dans tout le réseau ;

La puissance de calcul qui découle du regroupement d’ordinateurs, cumulée aux effets d’échelle massifs engendrés par ces 4 avantages, font des architectures distribuées, le moteur infrastructurel parfait pour la gestion de la plupart des problèmes de calcul intensif ou des problèmes de traitement massivement parallèle.

Il faut noter qu’on distingue 2 types d’architectures distribuées : le Cluster Computing et le Grid Computing. Nous allons présenter de façon succincte chacune de ces architectures et expliquerons pourquoi elles correspondent aux exigences de traitement de données actuelles.

2-1 – Le Cluster Computing ou grappe de serveurs

Le Cluster Computing, encore appelé couramment Grappe de calcul, est une approche d’architecture distribuée dans laquelle un ensemble d’ordinateurs étroitement connectés travaillent ensemble et sont vus comme un seul ordinateur par l’utilisateur. Les ordinateurs ainsi regroupés portent le nom de grappe de calcul ou de cluster. Les ordinateurs qui constituent la grappe ou le cluster dans ce cas portent le nom de nœuds.  Les nœuds sont regroupés dans des casiers ou racks (8 à 64 nœuds par casier). Les nœuds d’un casier sont connectés entre eux à travers la fibre optique ou des réseaux LAN[1] à très haut débit, typiquement de l’ordre du Gigaoctet à la seconde. Le cluster peut être composé de plusieurs casiers de nœuds, dans ce cas les casiers sont connectés entre eux soit par un autre niveau de câble réseau ou au moyen de commutateurs[2] (Switch).

Dans cette configuration, l’évolutivité du cluster se fait simplement en ajoutant de nouveaux nœuds au cluster. Il n’y’a théoriquement pas de limites au nombre de nœuds qui peuvent être ajoutées au cluster. Par exemple, en 2011 Yahoo ! a constitué un cluster de 4000 machines. Les activités des nœuds du cluster sont planifiées et gérées par un orchestrateur de tâches, une couche logicielle située au dessus des nœuds qui permet à l’utilisateur de voir et de travailler avec le cluster comme s’il s’agissait d’un seul PC.

A la différence de son frère le Grid Computing, tous les nœuds exécutent la même tâche, avec chaque nœud tournant sa propre instance d’un même système d’exploitation. Dans la majeure partie des cas, tous les nœuds utilisent le même système d’exploitation. Dans ce modèle, le principal problème c’est la disponibilité, c’est-à-dire la perte possible d’un nœud (par exemple la panne du disque dur d’un des nœuds du cluster) ou la panne d’un casier entier. En effet, étant donné que les données sont distribuées, la perte d’un nœud ou d’un casier entraîne la défaillance des traitements et peut-être même l’arrêt complet du cluster. La solution à ce problème prend deux formes :

  • les fichiers de données doivent être stockés de façon redondante sur plusieurs nœuds dans plusieurs casiers. Si l’on ne duplique pas les fichiers sur plusieurs nœuds, si un nœud  tombe en panne, tous ses fichiers seront indisponibles jusqu’à ce que le nœud soit changé ; Cette façon de fonctionner permet ainsi au cluster d’améliorer la disponibilité du système et son niveau de tolérance aux pannes ;
  • les calculs (traitements) doivent être divisés en tâches et parallélisés, de manière à ce que si une tâche n’est pas traitée entièrement, elle n’affecte pas les autres tâches ;

La  redondance des données sur plusieurs disques durs exige un nouveau type de Système de Fichiers, elle ne peut pas se faire avec les systèmes de fichiers classiques ; elle nécessite l’utilisation d’un “Système de Fichier Distribué” (DFS). Tandis que le découpage des traitements en plusieurs tâches, et le parallélisme de ces tâches sur un grand nombre de nœuds, exigent un changement de paradigme de programmation, c’est-à-dire un changement de façon de programmer ; il faut quitter de la pensée de la programmation séquentielle pour embrasser les principes de la programmation parallèle et distribuée.  Nous avons rédigé une très bonne chronique qui explique comment il est possible d’exécuter un modèle de programmation sur un cluster – Exécuter le mapreduce dans un cluster. La figure suivante illustre un cluster.

cluster informatique
Figure : Cluster informatique. Un cluster est constitué de plusieurs casiers et chaque casier contient entre 8 et 64 nœuds. Les nœuds et les casiers sont connectés entre eux par un Switch, un par casier et 1 pour l’ensemble des casiers

[1] LAN, Local Area Network, est  une configuration de mise en réseau des ordinateurs appartenant à un même emplacement géographique. Par exemple, les ordinateurs d’une du bâtiment d’une entreprise sont généralement connectés selon un LAN. Dans le LAN, l’interconnexion des ordinateurs se fait à l’aide d’un hub ou d’un Switch.

[2] Commutateur en français, c’est un type d’équipement réseau permettant de relier à l’aide d’un câble spécial  plusieurs ordinateurs.

grappe de serveurs
Figure : exemple de grappes de serveurs constitué de 3 casiers de 57 noeuds.

Les assembleurs d’ordinateurs tels que Dell, LENOVO, HP donnent sur leur site Web, des offres commerciales de configuration de clusters. Vous pouvez les consulter pour avoir une idée sur la façon dont les clusters sont facturés, et sur tous les composants qui sont facturés (configuration de disque dur, configuration de scalabilité, configuration réseau, configuration matérielle, migration, etc.). Nous avons trouvé un exemple complet de facturation de cluster proposé par LENOVO pour un de ses clients.

2-2 – Caractéristiques du cluster computing

Le Cluster Computing possède 3 caractéristiques particulières : la scalabilité horizontale, la tolérance aux pannes et la Haute Disponibilité.

2-2-1 – la Scalabilité horizontale 

L’avantage principal du cluster computing c’est la scalabilité. La scalabilité [horizontale] est très importante en Big Data, car les exigences techniques de valorisation de données massives ont clairement démontré qu’il est plus difficile de traiter les données en upgradant les serveurs qu’en constituant un cluster. Il faut vraiment bien comprendre cette notion de scalabilité pour comprendre l’intérêt d’un cluster informatique.

La Scalabilité est un anglicisme qui désigne la capacité qu’a un système à passer à l’échelle ou à monter en charge, c’est-à-dire sa capacité à maintenir ses fonctionnalités et ses performances en cas de forte demande. Plus simplement, la scalabilité c’est la capacité d’un système informatique à répartir les charges dans le système de façon à maintenir les fonctionnalités globales du système.  

Un cluster informatique a l’avantage d’être horizontalement scalable. Cela signifie que sa performance augmente proportionnellement à l’ajout de nouveaux noeuds/PC ou de nouveaux serveurs dans le cluster. Cela implique qu’avec un cluster, le temps de traitement des requêtes diminue ou reste constant avec la croissance de la volumétrie des données lors de l’ajout des nœuds dans le cluster. La figure suivante illustre parfaitement cela.

scalabilité linéaire du cluster informatique
Figure : l’avantage principal d’un cluster informatique repose sur sa capacité à passer à l’échelle horizontalement. Sa courbe de performance ne s’applatit pas avec la croissance du volume de données. Au contraire, elle est stabilisée par l’augmentation du nombre de noeuds dans le cluster.

2-2-2 – La tolérance aux pannes

La tolérance aux pannes est derrière la scalabilité horizontale l’une des plus importantes caractéristiques d’un cluster informatique. Pour comprendre la notion de tolérance aux pannes, il faut d’abord comprendre la notion de pannes. Un système informatique est dit défaillant lorsque son comportement n’est plus conforme à ses spécifications de fonctionnement. Plusieurs facteurs peuvent affecter le comportement d’un cluster, au point de le rendre défectueux ou de le faire tomber en panne : la panne du noeud dans le cluster, les problèmes liés à la connectivité réseau, ou encore les problèmes d’infrastructure.

La tolérance d’un cluster aux pannes ou aux défaillances c’est sa capacité à fonctionner malgré les pannes, spécialement les pannes de nœuds. Un cluster informatique est automatiquement tolérant aux pannes. Grâce à son système de fichiers partagé entre les noeuds de la grappe, les données sont découpées et redondées dans le cluster ; ce qui fait que si l’un des nœuds tombe en panne, le système passe automatiquement le relai à un autre nœud contenant la même copie des données que celle qui était traitée par le nœud défaillant, ce qui permet au système de réaliser les traitements de données jusqu’à la fin.  Dans un cluster Hadoop par exemple, c’est le HDFS qui permet au cluster d’être tolérant aux pannes.

2-2-2 – La haute disponibilité

La troisième caractéristique majeure des clusters c’est la Haute Disponibilité.  En général, un système est considéré comme disponible s’il est opérationnel et est capable de répondre aux requêtes des utilisateurs. Un cluster peut être construit de façon à ce qu’il ait un haut niveau de disponibilité. La Haute Disponibilité c’est la caractéristique d’un système qui vise à assurer d’un commun accord avec un prestataire, un niveau précis de performance opérationnelle du système, par exemple un niveau de latence, un temps d’interruption du système, etc. La haute disponibilité est indispensable dans des cas d’utilisation cruciaux tels que les hôpitaux, la bourse, l’aviation, pour ne citer que ceux-là, où une interruption ou une panne du système, n’est ce serait que d’une seconde pourrait être fatale à la vie des personnes qui l’utilise. Deux principes gouvernent  l’obtention de la haute disponibilité d’un système: l’élimination des points de défaillance unique dans le système (par redondance de l’état du système de sorte que son interruption n’entraîne pas un arrêt complet des opérations), et la détection automatique des défaillances.

Dans le cas d’un cluster, la haute disponibilité consiste à minimiser son niveau d’interruption. Cela peut se faire grâce à une approche “système de bascule” (failover-based système), dans laquelle les traitements se font dans un casier principal (le casier primaire), l’état du système y compris des traitements sont enregistrés et répliqués comme un point de contrôle (check point) dans un casier alternatif. En cas de défaillance ou d’interruption brusque du casier primaire, le traitement est déplacé vers le casier alternatif,  les traitements sont restaurés et reprennent à partir de l’image du dernier point de contrôle dans lequel ils ont été sauvegardés. Les points de contrôle enregistrent l’état du système  de manière asynchrone et périodique. Ils servent ensuite de point de restauration approximatif du système et permettent de relancer le système depuis le dernier état sauvegardé.

2-3 – le Grid computing ou grille de calcul

Le Grid Computing, encore appelé grille de calcul est la deuxième approche d’architecture distribuée après le cluster computing. Ici, les ressources d’un ensemble d’ordinateurs géographiquement distants  sont utilisées pour atteindre un objectif de traitement précis, résoudre un problème, et disparaître juste après.  Le grid se distingue de son frère le cluster informatique  dans le sens où dans une grille, chaque nœud effectue une tâche différente. Les nœuds des grilles tendent également à être plus hétérogènes en configuration et géographiquement dispersés que les nœuds dans un cluster.

Pareillement à un cluster, les activités des nœuds d’une grille sont planifiées et gérées par un orchestrateur de tâches qui planifie et assigne à chaque nœud la tâche à effectuer. Cependant à la différence d’un cluster, le système d’exploitation et le système de gestion de fichiers n’est pas forcément le même. Chaque nœud exécute son propre système d’exploitation et possède son propre système de fichiers. Une grille fonctionne plus comme un système de répartition de charge de travail (Load Balancer dans le jargon) entre les nœuds de la grille : un ensemble d’ordinateurs distincts, physiquement éloignés ou pas, connectés à un réseau commun et ayant au dessus d’eux une couche logicielle (un orchestrateur) qui répartie les ressources non-utilisées (généralement la mémoire et le processeur) des nœuds de la grille pour les affecter à un autre nœud qui en a besoin. Chaque nœud réalise un traitement différent des autres, et s’il a besoin de plus de ressources, l’orchestrateur  lui en procurera en les prenant chez les nœuds qui ne sont pas en activité.

Un exemple de cas d’utilisation du grid computing est le projet SETI@Home, un projet lancé en 1997 par l’université de Berkeley en Californie pour la recherche d’une intelligence extraterrestre. Les signaux radio reçus par le Télescope Atecibo étaient divisés en “unités de travail” de 330 Ko et distribués sur Internet aux ordinateurs à travers le monde pour le traitement. Chaque ordinateur volontaire offrait ses ressources de calcul non-utilisées au projet pour le traitement des unités de travail. A la première année de son lancement en Mai 1999, plus de 2 million de personnes dans 226 pays ont fourni autour de 280 000 années de puissance de calcul. SETI@Home a eu un total de puissance de calcul de 12 téraflops (1012 nombres d’opérations traitées par les microprocesseurs par seconde), le rendant 4 fois plus puissant que le Superordinateur américain americain Cray-2. Ainsi, grâce au grid Computing, le projet a pu utiliser la puissance non-utilisée de chaque ordinateur pour effectuer ses traitements sans acquérir un superordinateur. 

Malgré les avantages des grilles de calcul, dans les problématiques du Big Data, on tend à privilégier l’usage du cluster informatique, qui offre un plus grand niveau de contrôle sur l’écosystème technologique qu’on peut installer dessus, et ses caractéristiques facilement plus contrôlables.

Voila ! Nous sommes arrivés au terme de cette chronique. Comme vous avez pu le voir, le cluster informatique est le socle infrastructurel approprié pour la valorisation des données massives et ce, de façon complètement tolérante aux pannes. Tout ce qu’il faut pour l’utiliser c’est juste un modèle de programmation tel que le mapreduce, un système de fichier distribué et un orchestrateur de ressources (tel que YARN, MESOS ou Kubernetes) qui gèrera pour vous l’exécution parallèle, la coordination des tâches et les pannes éventuelles qui peuvent survenir dans le cluster.

Aujourd’hui, quasiment toutes les solutions de traitement de données à large échelle sont des systèmes qui s’appuient sur un cluster informatique, notamment Hadoop, Apache Spark, MySQL (avec la solution MySQL Cluster), Oracle, et même Microsoft avec sa solution SQL Server Parallel DW.

Si vous souhaitez aller plus loin dans la compréhension du cluster informatique, nous vous recommandons cet ouvrage qui vous rendra opérationnel dans le monde du Big Data.

>