Les clusters de calculs
Architecture Matérielle
Architecture générale
Il n'existe pas de modèle de référence concernant l'architecture matérielle des clusters. Les constructeurs tel que IBM, Bull, ... possèdent leur propre solution issue de leur recherche. Il est donc difficile de décrire précisément une architecture. Nous allons donc essayer d'en décrire les grandes lignes.La problématique des clusters impose certaines contraintes concernant l'architecture. En effet, la répartition des calculs entre les machines doit être la moins couteuse possible. Pour répondre à ce problème deux architectures sont possibles :
- Maitre- Esclave : un serveur (appelé noeud maitre) est considéré comme maitre. Il est responsable de la répartition du travail entre les différents postes clients ainsi que de leur synchronisation. Il récupère également les erreurs et les résultats des calculs. On lui soumet les différents travaux qu’il gère à l’aide d’une file d’attente. Les postes client sont appelés noeud. Ils sont connectés au réseau et capables d’exécuter du code informatique sous l’ordre du serveur. On peut leur transmettre non seulement les données mais aussi le code à appliquer à celles-ci.
- Mononiveau : tous les noeuds ont le même rôle. Ils réalisent eux même la répartition à l'aide d'échange de messages.
Le choix d'une architecture est fortement lié à l'application de clustering utilisée même si le modèle Maitre-Esclave est le plus répandu.
Architecture détaillée
Si on regarde de plus prés, un cluster peut être représenté comme une seule machine multi-processeurs où chaque processeur possède sa propre mémoire vive. Ce modèle s'appelle modèle NUMA (Non Uniform Access Memory) .
Son principe est simple : les processeurs opérent avec la mémoire de manière indépendante et être de types et de vitesses différentes. Cela permet de faire évoluer plus facilement les clusters en permettant l'ajout de matériel de puissance et de génération différentes.
Ce modèle peut être couplé à un système de cohérence des caches. Ce système complexe permet de synchroniser les données présentes en mémoire afin de voir l'ensemble de la mémoire comme une seule unité.