Pr Dr Jean-Pépé BUANGA MAPETU 1 Notes: Systèmes parallèles et distribués/UNIKIN
INTRODUCTION
Système parallèle
Un système parallèle est un système informatique ou de traitement de données qui
exécute plusieurs tâches en même temps. Ces tâches peuvent être exécutées sur
plusieurs processeurs, cœurs de processeur ou machines différentes, ce qui permet
d'augmenter la vitesse et l'efficacité de traitement des données.
Les systèmes parallèles peuvent être utilisés dans de nombreux domaines, tels que le
calcul scientifique, l'analyse de données, la modélisation et la simulation, le rendu
graphique, les bases de données distribuées, etc. Ils sont particulièrement utiles pour
gérer de grandes quantités de données ou pour exécuter des tâches complexes qui
nécessitent une grande puissance de calcul.
Il existe différents types de systèmes parallèles, tels que les systèmes multiprocesseurs,
les systèmes à mémoire partagée, les grappes de calcul, les systèmes distribués, etc.
Chacun de ces systèmes a ses propres avantages et inconvénients, et peut être adapté à
des besoins spécifiques en termes de puissance de calcul, de disponibilité des
ressources, de répartition des charges de travail, etc.
En résumé, les systèmes parallèles sont des outils puissants pour le traitement de
données et le calcul intensif, et sont largement utilisés dans de nombreux domaines de
l'informatique et de la recherche.
Système distribué
Un système distribué est un ensemble de dispositifs informatiques connectés en
réseau qui travaillent ensemble pour atteindre un objectif commun. Les ressources,
données et tâches sont réparties entre les différents dispositifs, ce qui permet
d'améliorer la performance, la résilience et la scalabilité du système.
Les systèmes distribués sont utilisés dans de nombreux domaines, y compris les
réseaux informatiques, le cloud computing, les systèmes de gestion de bases de
données, les applications mobiles, les jeux en ligne, etc.
Ils peuvent être mis en œuvre de différentes manières, notamment en utilisant des
architectures client/serveur, des systèmes pair-à-pair, des systèmes de grappes, des
bases de données distribuées, etc. Ce type de système présente des défis uniques en
termes de gestion des ressources, de cohérence des données, de tolérance aux pannes
et de sécurité.
Système parallèle et distribué
Un système parallèle et distribué est un système informatique qui utilise plusieurs
processeurs ou ordinateurs pour exécuter des tâches en parallèle et de manière
distribuée. Dans un système parallèle, les tâches sont divisées en sous-tâches qui sont
exécutées simultanément par différents processeurs, ce qui permet d'accélérer le
temps d'exécution global. Dans un système distribué, les ressources informatiques,
Pr Dr Jean-Pépé BUANGA MAPETU 2 Notes: Systèmes parallèles et distribués/UNIKIN
telles que les processeurs, la mémoire et le stockage, sont dispersées sur un réseau et
peuvent être utilisées de manière coordonnée pour traiter des tâches de manière
collective.
Les systèmes parallèles et distribués sont largement utilisés dans les applications
nécessitant une grande puissance de calcul, tels que la modélisation scientifique, le
rendu graphique, les banques de données distribuées, le Cloud computing, etc. Ils
offrent également une meilleureh tolérance aux pannes, une plus grande élasticité et
une meilleure évolutivité que les systèmes centralisés.
Pr Dr Jean-Pépé BUANGA MAPETU 3 Notes: Systèmes parallèles et distribués/UNIKIN
CHAPITRE 1. SYSTÈMES PARALLÈLES
Au cours des dernières décennies, de nombreux systèmes informatiques parallèles
différents sont apparus sur le marché. Ils ont d'abord été vendus en tant que
superordinateurs dédiés à la résolution de problèmes scientifiques spécifiques. Les
plus connus sont peut-être les ordinateurs fabriqués par Cray et Connection Machine
Corporation. Le parallélisme s'est étendu au marché grand public et à toutes sortes
d'appareils portables.
Les diverses solutions parallèles ont progressivement évolué vers des systèmes
parallèles modernes qui présentent au moins l'un des trois types de parallélisme les
plus courants :
- Premièrement, les systèmes à mémoire partagée, c'est-à-dire les systèmes avec
plusieurs unités de traitement attachées à une seule mémoire.
- Deuxièmement, les systèmes distribués, c'est-à-dire les systèmes composés de
nombreuses unités informatiques, chacune avec sa propre unité de traitement et sa
mémoire physique, qui sont reliées par des réseaux d'interconnexion rapides.
- Troisièmement, les unités de traitement graphique utilisées comme coprocesseurs
pour résoudre des problèmes généraux à forte intensité numérique.
L'objectif principal des systèmes parallèles est d'améliorer la vitesse de traitement. Ils
sont parfois connus sous le nom de multiprocesseurs, d'ordinateurs multiples ou de
systèmes étroitement couplés. Ils font référence à l'utilisation simultanée de plusieurs
ressources informatiques qui peuvent inclure un seul ordinateur avec plusieurs
processeurs, un certain nombre d'ordinateurs connectés par un réseau pour former une
grappe de traitement parallèle ou une combinaison des deux.
1.1 Motivation de la construction de systèmes parallèles
L'augmentation considérable des performances des processeurs individuels s'explique
en grande partie par la densité toujours croissante des transistors - les commutateurs
électroniques - dans les circuits intégrés. La diminution de la taille des transistors
permet d'augmenter leur vitesse et d'accroître la vitesse globale du circuit intégré.
Toutefois, l'augmentation de la vitesse des transistors s'accompagne d'une
augmentation de leur consommation d'énergie. La majeure partie de cette puissance
est dissipée sous forme de chaleur, et lorsqu'un circuit intégré devient trop chaud, il
n'est plus fiable.
Au cours de la première décennie du XXIe siècle, les circuits intégrés refroidis par air
atteignent les limites de leur capacité à dissiper la chaleur. Il devient donc impossible
de continuer à augmenter la vitesse des circuits intégrés. Toutefois, l'augmentation de
la densité des transistors peut se poursuivre, du moins pendant un certain temps. En
outre, étant donné que l'informatique peut améliorer notre existence, il est presque
moralement impératif de continuer à augmenter la puissance de calcul.
Comment pouvons-nous alors exploiter l'augmentation continue de la densité des
transistors ? La réponse est le parallélisme. Plutôt que de construire des processeurs
monolithiques toujours plus rapides et plus complexes, l'industrie a décidé de placer
Pr Dr Jean-Pépé BUANGA MAPETU 4 Notes: Systèmes parallèles et distribués/UNIKIN
plusieurs processeurs complets, relativement simples, sur une seule puce. Ces circuits
intégrés sont appelés processeurs multicœurs, et cœur est devenu synonyme d'unité
centrale de traitement, ou CPU. Dans ce contexte, un processeur conventionnel doté
d'une seule unité centrale est souvent appelé système à un seul cœur.
1.2 Caractéristiques des systèmes parallèles
Un système parallèle peut être classé dans l'un des trois types suivants :
1. Un système multiprocesseur
2. Un système parallèle multi-ordinateurs
3. Processeurs matriciels
1.2.1 Système multiprocesseur
Un système multiprocesseur est un système parallèle dans lequel les multiples
processeurs ont un accès direct à une mémoire partagée qui forme un espace
d'adressage commun. Les systèmes de mémoire partagée offrent en général la
caractéristique souhaitée d'un espace d'adressage partagé entre les programmes qui
s'exécutent sur plusieurs CPU. Les structures de données peuvent être partagées entre
des CPUs capables de communiquer avec des opérations standard de
chargement/stockage vers la mémoire principale. En raison de cette vision commune
de la mémoire, les systèmes à mémoire partagée sont traditionnellement considérés
comme des plates-formes parallèles qui facilitent la programmation parallèle.
La technologie d'interconnexion de mémoire la plus courante est le bus. Les bus ont la
propriété souhaitable que le coût du réseau augmente linéairement avec le nombre de
processeurs p. Ce coût est généralement associé aux interfaces du bus. En outre, la
distance entre deux nœuds du réseau est constante. Les bus sont également idéaux
pour la diffusion d'informations et facilitent grandement la mise en œuvre de
protocoles de snooping pour la cohérence de la mémoire cache. Cependant, la bande
passante d'un bus est limitée, et il existe donc une limite physique au nombre de
nœuds qui peuvent être attachés à un bus sans sacrifier considérablement les
performances. Les systèmes typiques à base de bus sont limités à des dizaines de
nœuds.
Les ordinateurs parallèles à mémoire partagée varient considérablement, mais ont
généralement en commun la possibilité pour tous les processeurs d'accéder à
l'ensemble de la mémoire en tant qu'espace d'adressage global. Plusieurs processeurs
peuvent fonctionner indépendamment mais partager les mêmes ressources de
mémoire. Les modifications d'un emplacement mémoire effectuées par un processeur
sont visibles par tous les autres processeurs. Les machines à mémoire partagée
peuvent être divisées en deux catégories principales en fonction des temps d'accès à la
mémoire : UMA et NUMA.
Pr Dr Jean-Pépé BUANGA MAPETU 5 Notes: Systèmes parallèles et distribués/UNIKIN
(a)
(b)
Figure 1.1 : Deux architectures standard pour les systèmes parallèles. (a) Système
multiprocesseur à accès uniforme à la mémoire (UMA). (b) Système multiprocesseur
à accès mémoire non uniforme (NUMA).
i) Accès uniforme à la mémoire (UMA, Uniform Memory Access)
UMA est un système où tous les processeurs accèdent à la mémoire principale avec la
même latence, c'est-à-dire que chaque processeur peut accéder à n'importe quelle
donnée en mémoire avec la même vitesse. Cela signifie que la mémoire est partagée
de manière uniforme entre tous les processeurs, ce qui peut conduire à des conflits
d'accès si de nombreux processeurs tentent d'accéder à la mémoire en même temps.
Pr Dr Jean-Pépé BUANGA MAPETU 6 Notes: Systèmes parallèles et distribués/UNIKIN
En d’autres termes, tous les processeurs partagent la mémoire physique de manière
centralisée avec un temps d'accès égal à tous les mots de la mémoire. Chaque
processeur peut disposer d'une mémoire cache privée. La même règle s'applique aux
périphériques. Lorsque tous les processeurs ont le même accès à tous les
périphériques, le système est appelé multiprocesseur symétrique. Lorsque seul un ou
quelques processeurs peuvent accéder aux périphériques, le système est appelé
multiprocesseur asymétrique. Lorsqu'un processeur veut accéder à un emplacement de
mémoire, il vérifie si le bus est libre, puis il envoie la demande au module d'interface
mémoire et attend que les données demandées soient disponibles sur le bus.
Les processeurs multicœurs sont de petits systèmes multiprocesseurs UMA, où le
premier cache partagé est en fait le canal de communication.
ii) Accès non uniforme à la mémoire (NUMA, Non-uniform Memory Access)
NUMA est un système où l'accès à la mémoire n'est pas uniforme, car chaque
processeur est connecté à un sous-ensemble de la mémoire. Cela signifie que les
temps d'accès à la mémoire peuvent varier en fonction de l'emplacement physique du
processeur par rapport à la mémoire. Cependant, cela permet également de réduire les
conflits d'accès à la mémoire, car chaque processeur peut accéder à sa propre mémoire
locale plus rapidement.
Dans le modèle multiprocesseur NUMA, la mémoire partagée est physiquement
répartie entre tous les processeurs, appelés mémoires locales. La collection de toutes
les mémoires locales forme un espace d'adressage global auquel tous les processeurs
peuvent accéder. Les systèmes NUMA partagent également les processeurs et l'espace
d'adressage, mais chaque processeur dispose d'une mémoire locale, visible par tous les
autres processeurs. Dans les systèmes NUMA, l'accès aux blocs locaux de mémoire
est plus rapide que l'accès aux blocs de mémoire distants.
1.2.2 Un système parallèle multi-ordinateurs
Un système parallèle multi-ordinateurs fait référence à un ensemble d'ordinateurs
interconnectés qui coopèrent pour résoudre des problèmes complexes en divisant la
charge de travail entre eux. Ces systèmes sont souvent utilisés pour des applications
nécessitant une grande puissance de calcul, telles que la modélisation météorologique,
l'analyse de données massives ou la simulation scientifique. Chaque ordinateur
travaille simultanément sur une partie du problème, ce qui permet d'accélérer
considérablement le traitement des données. Ces systèmes parallèles sont conçus pour
être hautement évolutifs, ce qui signifie qu'ils peuvent facilement être étendus en
ajoutant de nouveaux ordinateurs pour augmenter la puissance de calcul disponible.
Il s'agit d'un système parallèle dans lequel les multiples processeurs n'ont pas d'accès
direct à une mémoire partagée. La mémoire des multiples processeurs peut ou non
former un espace d'adressage commun.
Dans un système parallèle multi-ordinateurs, la gestion de la mémoire peut varier en
fonction de l'architecture choisie, soit avec mémoire partagée, soit avec mémoire
Pr Dr Jean-Pépé BUANGA MAPETU 7 Notes: Systèmes parallèles et distribués/UNIKIN
distribuée.
Dans un système parallèle multi-ordinateurs avec une mémoire partagée, chaque
processeur peut accéder à la même zone de mémoire, ce qui facilite le partage des
données entre les processeurs. Les processeurs peuvent communiquer entre eux en
accédant directement à la mémoire partagée, ce qui peut accélérer les opérations de
lecture et d'écriture sur les données partagées. Cependant, la gestion de la cohérence
des données dans la mémoire partagée peut être complexe et nécessiter des
mécanismes de synchronisation pour éviter les conflits.
Dans un système parallèle multi-ordinateurs avec une mémoire distribuée, chaque
processeur dispose de sa propre mémoire distincte et il y a donc des contraintes
supplémentaires pour assurer la cohérence des données entre les différents
processeurs. Les processeurs doivent utiliser des mécanismes de communication
explicite, tels que l'envoi de messages, pour échanger des données entre eux. Bien que
cela puisse introduire un surcoût en termes de latence et d'overhead de
communication, cela permet une meilleure modularité et évite les problèmes de
cohérence de la mémoire partagée.
1.2.3 Processeurs matriciels
Les processeurs matriciels sont conçus pour effectuer des opérations sur des tableaux
de données ou des matrices de manière parallèle, ce qui les rend extrêmement
efficaces pour des tâches telles que le traitement d'images, la simulation numérique ou
d'autres calculs intensifs. Les processeurs matriciels sont optimisés pour effectuer des
opérations sur des matrices, telles que l'addition, la soustraction, la multiplication, la
transposition, l'inversion et d'autres opérations nécessaires pour le traitement des
données. Ils sont souvent utilisés dans des contextes scientifiques et de recherche,
ainsi que dans les applications nécessitant une manipulation rapide de données
multidimensionnelles.
Il s'agit d'une classe de processeurs qui exécutent une instruction à la fois dans un
tableau ou une table de données en même temps plutôt que sur des éléments de
données individuels sur une horloge commune. Ils sont également connus sous le nom
de processeurs vectoriels. Un processeur vectoriel met en œuvre le jeu d'instructions
dans lequel chaque instruction est exécutée sur tous les éléments de données associés,
puis passe à l'autre instruction. Les éléments de cette classe sont incapables de
fonctionner de manière autonome et doivent être pilotés par l'unité de contrôle.
Certains processeurs matriciels intègrent des unités spécialisées telles que des unités
de calcul vectoriel et des unités de traitement du signal numérique pour optimiser les
performances lors du traitement de données matricielles.
1.3 Terminologie générale du parallélisme
1. Supercalculateur / Calcul à haute performance (HPC) : Utilisation des
ordinateurs les plus rapides et les plus grands du monde pour résoudre de grands
problèmes.
Pr Dr Jean-Pépé BUANGA MAPETU 8 Notes: Systèmes parallèles et distribués/UNIKIN
2. Nœud : Un "ordinateur dans une boîte" autonome. Il est généralement composé de
plusieurs CPU/processeurs/cœurs. Les nœuds sont mis en réseau pour former un
superordinateur.
3. CPU / Socket / Processeur / Core : Cela varie en fonction de la personne à qui l'on
s'adresse. Dans le passé, un CPU (Central Processing Unit) était un composant
d'exécution unique pour un ordinateur. Ensuite, plusieurs unités centrales de
traitement ont été incorporées dans un nœud. Ensuite, les unités centrales de
traitement individuelles ont été subdivisées en plusieurs "cœurs", chacun étant une
unité d'exécution unique. Les unités centrales à cœurs multiples sont parfois appelées
"sockets" - en fonction du fournisseur. Le résultat est un nœud avec plusieurs unités
centrales, chacune contenant plusieurs cœurs. La nomenclature est parfois confuse.
5. Pipeline : Décomposition d'une tâche en étapes exécutées par différentes unités de
traitement, avec des entrées en flux continu, à la manière d'une chaîne de montage ;
un type d'informatique parallèle.
6. Mémoire partagée : D'un point de vue strictement matériel, décrit une architecture
informatique dans laquelle tous les processeurs ont un accès direct (généralement par
bus) à une mémoire physique commune. Du point de vue de la programmation, il
s'agit d'un modèle dans lequel les tâches parallèles ont toutes la même "image" de la
mémoire et peuvent directement adresser et accéder aux mêmes emplacements
logiques de la mémoire, quel que soit l'endroit où la mémoire physique se trouve
réellement.
7. Multiprocesseur symétrique (SMP) : Architecture matérielle dans laquelle
plusieurs processeurs partagent un espace d'adressage unique et l'accès à toutes les
ressources ; informatique à mémoire partagée.
8. Mémoire distribuée : Dans le matériel, se réfère à l'accès à la mémoire basé sur le
réseau pour la mémoire physique qui n'est pas commune. En tant que modèle de
programmation, les tâches ne peuvent logiquement "voir" que la mémoire locale de la
machine et doivent utiliser des communications pour accéder à la mémoire sur
d'autres machines où d'autres tâches sont en cours d'exécution.
9. Communications : Les tâches parallèles ont généralement besoin d'échanger des
données. Il existe plusieurs façons d'y parvenir, notamment par le biais d'un bus de
mémoire partagée ou d'un réseau, mais l'échange de données est communément
appelé communication, quelle que soit la méthode employée.
10. Synchronisation : La coordination de tâches parallèles en temps réel, très souvent
associée aux communications. Souvent mise en œuvre par l'établissement d'un point
de synchronisation au sein d'une application où une tâche ne peut être poursuivie tant
qu'une ou plusieurs autres tâches n'ont pas atteint le même point ou un point
logiquement équivalent. La synchronisation implique généralement l'attente d'au
moins une tâche et peut donc entraîner une augmentation du temps d'exécution de
l'horloge d'une application parallèle.
Pr Dr Jean-Pépé BUANGA MAPETU 9 Notes: Systèmes parallèles et distribués/UNIKIN
11. Vitesse (speedup) observée : Accélération observée d'un code qui a été parallélisé,
définie comme suit :
wall-clock time of serial execution
-----------------------------------
wall-clock time of parallel execution
L'un des indicateurs les plus simples et les plus utilisés pour évaluer la performance
d'un programme parallèle.
1.4 Architecture des processeurs et tendances technologiques
Les puces processeurs sont les composants clés des ordinateurs. Les tendances
observées pour les puces de processeur au cours des dernières années permettent
d'estimer les développements futurs. Les puces processeurs sont constituées de
transistors. Le nombre de transistors contenus dans une puce de processeur peut être
utilisé comme une estimation approximative de sa complexité et de ses performances.
La loi de Moore est une observation empirique selon laquelle le nombre de transistors
d'une puce de processeur typique double tous les 18 à 24 mois. Cette observation a été
faite pour la première fois par Gordon Moore en 1965 et est valable depuis plus de 40
ans. Le nombre croissant de transistors peut être utilisé pour des améliorations
architecturales telles que des unités fonctionnelles supplémentaires, des caches plus
nombreux et plus grands, et davantage de registres. Une puce de processeur typique
pour les ordinateurs de bureau de 2009 se compose de 400 à 800 millions de
transistors.
L'augmentation du nombre de transistors s'accompagne depuis longtemps d'une
augmentation de la vitesse d'horloge. L'augmentation de la vitesse d'horloge entraîne
une accélération de la vitesse de calcul du processeur. La vitesse d'horloge a souvent
été utilisée comme principale caractéristique de la performance d'un système
informatique. Dans le passé, l'augmentation de la vitesse d'horloge et du nombre de
transistors a conduit à une augmentation moyenne des performances des processeurs
de 55 % (opérations sur les nombres entiers) et de 75 % (opérations sur les nombres à
virgule flottante), respectivement.
Elle peut être mesurée par des programmes de référence spécifiques qui ont été
sélectionnés dans différents domaines d'application afin d'obtenir une mesure
représentative des performances des systèmes informatiques. Souvent, les critères
SPEC (System Performance and Evaluation Cooperative) sont utilisés pour mesurer
les performances en nombres entiers et en virgule flottante des systèmes
informatiques, voir [Link]. L'augmentation moyenne des performances des
processeurs dépasse l'augmentation de la vitesse d'horloge. Cela indique que
l'augmentation du nombre de transistors a conduit à des améliorations architecturales
qui réduisent le temps moyen d'exécution d'une instruction.
Dans ce qui suit, nous donnons un bref aperçu de ces améliorations architecturales.
On peut observer quatre phases de tendances dans la conception des microprocesseurs,
qui sont principalement motivées par l'utilisation interne du parallélisme :
Pr Dr Jean-Pépé BUANGA MAPETU 10 Notes: Systèmes parallèles et distribués/UNIKIN
1. Parallélisme au niveau des bits : Jusqu'en 1986 environ, la taille des mots utilisés
par les processeurs pour les opérations a augmenté progressivement de 4 à 32 bits.
Cette tendance s'est ralentie et s'est achevée avec l'adoption des opérations sur 64 bits
à partir des années 1990. Cette évolution a été motivée par la demande d'amélioration
de la précision de la virgule flottante et d'un espace d'adressage plus grand. La
tendance s'est arrêtée à une taille de mot de 64 bits, car cela donne une précision
suffisante pour les nombres à virgule flottante et couvre un espace d'adressage
suffisamment grand de 264 octets.
2. Parallélisme par pipelining : L'idée du pipelining au niveau des instructions est un
chevauchement de l'exécution de plusieurs instructions. L'exécution de chaque
instruction est divisée en plusieurs étapes qui sont exécutées l'une après l'autre par des
unités matérielles dédiées (étapes du pipeline). Un découpage typique peut se traduire
par les étapes suivantes :
(a) extraction : extraction de l'instruction suivante à exécuter à partir de la
mémoire ;
(b) décodage : décodage de l'instruction extraite à l'étape a) ;
(c) exécuter : charger les opérandes spécifiés et exécuter l'instruction ;
(d) write-back : écrire le résultat dans le registre cible.
Un pipeline d'instructions est comparable à une chaîne de montage dans l'industrie
automobile. L'avantage est que les différentes étapes du pipeline peuvent fonctionner
en parallèle, s'il n'y a pas de dépendances de contrôle ou de données entre les
instructions à exécuter, voir la figure 1.2 pour une illustration. Pour éviter les temps
d'attente, l'exécution des différentes étapes du pipeline doit prendre à peu près le
même temps. Ce temps détermine le temps de cycle du processeur. S'il n'y a pas de
dépendances entre les instructions, à chaque cycle d'horloge, l'exécution d'une
instruction est terminée et l'exécution d'une autre instruction commence. Le nombre
d'instructions terminées par unité de temps est défini comme le débit du pipeline.
Ainsi, en l'absence de dépendances, le débit est d'une instruction par cycle d'horloge.
Fig. 1.2 Exécution superposée de quatre instructions indépendantes par pipelining.
L'exécution de chaque instruction est divisée en quatre étapes : recherche (F),
décodage (D), exécution (E) et réécriture (W).
En l'absence de dépendances, toutes les étapes du pipeline fonctionnent en parallèle.
Le nombre d'étages du pipeline détermine donc le degré de parallélisme que peut
Pr Dr Jean-Pépé BUANGA MAPETU 11 Notes: Systèmes parallèles et distribués/UNIKIN
atteindre un calcul en pipeline. Le nombre d'étages du pipeline utilisé dans la pratique
dépend de l'instruction spécifique et de sa capacité à être divisée en étages. Le nombre
habituel d'étages du pipeline se situe entre 2 et 26 étages. Les processeurs qui utilisent
le pipeline pour exécuter les instructions sont appelés processeurs ILP (instruction-
level parallelism). Les processeurs dotés d'un nombre relativement élevé d'étages de
pipeline sont parfois appelés "superpipelinés". Bien que le degré de parallélisme
disponible augmente avec le nombre d'étages du pipeline, ce nombre ne peut pas être
augmenté arbitrairement, car il n'est pas possible de diviser l'exécution de l'instruction
en un très grand nombre d'étapes de taille égale. En outre, les dépendances de données
empêchent souvent une utilisation totalement parallèle des étages.
3. Parallélisme par unités fonctionnelles multiples : De nombreux processeurs sont
des processeurs à émissions multiples. Ils utilisent des unités fonctionnelles multiples
et indépendantes telles que les ALU (unités arithmétiques logiques), les FPU (unités à
virgule flottante), les unités de chargement/stockage ou les unités de branchement.
Ces unités peuvent travailler en parallèle, c'est-à-dire que différentes instructions
indépendantes peuvent être exécutées en parallèle par différentes unités fonctionnelles.
Ainsi, le taux d'exécution moyen des instructions peut être augmenté. Les processeurs
à émissions multiples peuvent être distingués en processeurs superscalaires et en
processeurs VLIW (very long instruction word), voir pour un traitement plus détaillé.
Le nombre d'unités fonctionnelles pouvant être utilisées efficacement est limité en
raison des dépendances de données entre instructions voisines. Pour les processeurs
superscalaires, ces dépendances sont déterminées dynamiquement par le matériel au
moment de l'exécution, et les instructions décodées sont distribuées aux unités
d'instruction à l'aide d'un ordonnancement dynamique par le matériel. Cela peut
accroître considérablement la complexité du circuit. En outre, des simulations ont
montré que les processeurs superscalaires comportant jusqu'à quatre unités
fonctionnelles offrent un avantage substantiel par rapport à une seule unité
fonctionnelle. Mais l'utilisation d'un nombre encore plus élevé d'unités fonctionnelles
n'apporte qu'un faible gain supplémentaire en raison des dépendances entre les
instructions et du branchement du flux de contrôle.
4. Parallélisme au niveau du processus ou du fil conducteur : Les trois techniques
décrites jusqu'à présent supposent un flux de contrôle séquentiel unique fourni par le
compilateur et qui détermine l'ordre d'exécution s'il existe des dépendances entre les
instructions. Pour le programmeur, cela présente l'avantage de pouvoir utiliser un
langage de programmation séquentiel, ce qui conduit néanmoins à une exécution
parallèle des instructions.
Cependant, le degré de parallélisme obtenu par le pipelining et les unités
fonctionnelles multiples est limité. Cette limite a déjà été atteinte depuis un certain
temps pour les processeurs typiques. Cependant, la loi de Moore permet de disposer
d'un nombre croissant de transistors par puce de processeur. Cela peut être utilisé pour
intégrer des caches plus importants sur la puce. Mais la taille des caches ne peut pas
non plus être augmentée arbitrairement, car des caches plus grands entraînent un
temps d'accès plus long.
Une autre façon d'utiliser le nombre croissant de transistors sur une puce consiste à
Pr Dr Jean-Pépé BUANGA MAPETU 12 Notes: Systèmes parallèles et distribués/UNIKIN
intégrer plusieurs cœurs de processeurs indépendants sur une seule puce. Cette
approche est utilisée pour les processeurs d'ordinateurs de bureau depuis 2005. Les
puces qui en résultent sont appelées processeurs multicœurs. Chacun des cœurs d'un
processeur multicœur doit obtenir un flux de contrôle distinct, c'est-à-dire que des
techniques de programmation parallèle doivent être utilisées. Les cœurs d'une puce de
processeur accèdent à la même mémoire et peuvent même partager des caches. Par
conséquent, les accès à la mémoire des cœurs doivent être coordonnés.
1.5 Modèles multiprocesseurs
Un modèle multiprocesseur est un modèle de calcul parallèle qui s'appuie sur le
modèle RAM de calcul, c'est-à-dire qu'il généralise le modèle RAM. Comment cela se
fait-il ? Il s'avère que la généralisation peut se faire de trois manières essentiellement
différentes, ce qui donne lieu à trois modèles multiprocesseurs différents. Chacun des
trois modèles possède un certain nombre p (>2) d'unités de traitement, mais les
modèles diffèrent dans l'organisation de leurs mémoires et dans la manière dont les
unités de traitement accèdent aux mémoires.
Les modèles sont appelés:
(1) Machine à accès aléatoire parallèle (PRAM, Parallel Random Access Machine),
(2) Machine à mémoire locale (LMM, Local Memory Machine) et
(3) Machine à mémoire modulaire (MMM, Modular Memory Machine).
1.5.1 La machine à accès aléatoire parallèle
La machine parallèle à accès aléatoire, en abrégé modèle PRAM, comporte p unités
de traitement qui sont toutes connectées à une mémoire partagée commune non
limitée (figure 1.3). Chaque unité de traitement peut, en une seule étape, accéder à
n'importe quel emplacement (mot) de la mémoire partagée en émettant une requête de
mémoire directement à la mémoire partagée.
Fig. 1.3 Le modèle PRAM de calcul parallèle : p unités de traitement partagent une
mémoire non limitée. Chaque unité de traitement peut accéder en une seule étape à
n'importe quel emplacement de la mémoire.
Le modèle PRAM de calcul parallèle est idéalisé à plusieurs égards. Tout d'abord, il
Pr Dr Jean-Pépé BUANGA MAPETU 13 Notes: Systèmes parallèles et distribués/UNIKIN
n'y a pas de limite au nombre p d'unités de traitement, si ce n'est que p est fini. Ensuite,
l'hypothèse selon laquelle une unité de traitement peut accéder à n'importe quel
emplacement de la mémoire partagée en une seule étape est également idéalisée.
Enfin, pour les mots de la mémoire partagée, on suppose seulement qu'ils sont de la
même taille ; sinon, ils peuvent être de taille finie arbitraire.
Il convient de noter que dans ce modèle, il n'y a pas de réseau d'interconnexion pour
le transfert des demandes de mémoire et des données dans les deux sens entre les
unités de traitement et la mémoire partagée.
Toutefois, l'hypothèse selon laquelle toute unité de traitement peut accéder à n'importe
quel emplacement de mémoire en une seule étape n'est pas réaliste. Pour comprendre
pourquoi, supposons que les unités de traitement Pi et Pj émettent simultanément des
instructions Ii et Ij qui visent toutes deux à accéder (en lecture ou en écriture) au
même emplacement de mémoire L (voir figure 1.4).
Fig. 1.4 Dangers de l'accès simultané à un emplacement. Deux unités de traitement
émettent simultanément des instructions dont chacune doit accéder au même
emplacement L
Même si un accès physique réellement simultané à L avait été possible, un tel accès
aurait pu entraîner un contenu imprévisible de L. Imaginez ce que serait le contenu de
L après y avoir écrit simultanément 3 et 5. Il est donc raisonnable de supposer que,
finalement, les accès réels de Ii et Ij à L sont, d'une manière ou d'une autre, sérialisés
(séquencés) à la volée par le matériel, de sorte que Ii et Ij accèdent physiquement à L
l'un après l'autre.
Si Pi et Pj veulent lire simultanément dans L, les instructions Ii et Ij liront toutes deux
le même contenu de L, quelle que soit leur sérialisation, et les deux unités de
traitement recevront donc le même contenu de L, comme prévu. Toutefois, si l'une des
unités de traitement veut lire dans L et que l'autre veut simultanément écrire dans L,
les données reçues par l'unité de traitement qui lit dépendront du fait que l'instruction
de lecture a été sérialisée avant ou après l'instruction d'écriture. En outre, si Pi et Pj
tentent simultanément d'écrire dans L, le contenu de L dépendra de la façon dont Ii et
Ij ont été sérialisés, c'est-à-dire lequel de Ii et Ij a été le dernier à écrire physiquement
dans L.
En résumé, l'accès simultané à un même emplacement peut aboutir à des données
Pr Dr Jean-Pépé BUANGA MAPETU 14 Notes: Systèmes parallèles et distribués/UNIKIN
imprévisibles dans les unités de traitement accédées ainsi que dans l'emplacement
accédé.
1.5.2 La machine à mémoire locale
Le modèle LMM comporte p unités de traitement, chacune disposant de sa propre
mémoire locale (figure 1.5). Les unités de traitement sont connectées à un réseau
d'interconnexion commun. Chaque unité de traitement peut accéder directement à sa
propre mémoire locale. En revanche, elle ne peut accéder à une mémoire non locale
(c'est-à-dire la mémoire locale d'une autre unité de traitement) qu'en envoyant une
demande de mémoire via le réseau d'interconnexion.
Fig. 1.5 Le modèle LMM de calcul parallèle comporte p unités de traitement, chacune
disposant d'une mémoire locale. Chaque unité de traitement accède directement à sa
mémoire locale et peut accéder à la mémoire locale d'autres unités de traitement via le
réseau d'interconnexion.
L'hypothèse est que toutes les opérations locales, y compris l'accès à la mémoire
locale, prennent un temps unitaire. En revanche, le temps nécessaire pour accéder à
une mémoire non locale dépend:
(1) de la capacité du réseau d'interconnexion et,
(2) du schéma des accès coïncidents à la mémoire non locale d'autres unités de
traitement, car ces accès peuvent encombrer le réseau d'interconnexion.
1.5.3 La machine à modules de mémoire
Le modèle MMM (figure 1.6) se compose de p unités de traitement et de m modules
de mémoire, chacun d'eux étant accessible à toute unité de traitement via un réseau
d'interconnexion commun. Il n'y a pas de mémoire locale pour les unités de traitement.
Une unité de traitement peut accéder au module de mémoire en envoyant une
demande de mémoire via le réseau d'interconnexion.
Pr Dr Jean-Pépé BUANGA MAPETU 15 Notes: Systèmes parallèles et distribués/UNIKIN
Fig. 1.6 Le modèle MMM de calcul parallèle comporte p unités de traitement et m
modules de mémoire. Chaque unité de traitement peut accéder à n'importe quel
module de mémoire via le réseau d'interconnexion. Il n'y a pas de mémoire locale
pour les unités de traitement
On suppose que les unités de traitement et les modules de mémoire sont disposés de
telle sorte que, lorsqu'il n'y a pas d'accès coïncidents, le temps nécessaire à une unité
de traitement pour accéder à un module de mémoire est à peu près uniforme.
Cependant, lorsqu'il y a des accès coïncidents, le temps d'accès dépend:
(1) de la capacité du réseau d'interconnexion et,
(2) du schéma des accès coïncidents à la mémoire.
1.6 Taxonomie de Flynn des architectures parallèles
La taxonomie de Flynn est une classification des architectures informatiques proposée
par Michael J. Flynn en 1966.
Les ordinateurs parallèles sont utilisés depuis de nombreuses années et de nombreuses
alternatives architecturales ont été proposées et utilisées. Pour une étude plus détaillée,
il est utile de procéder à une classification en fonction des caractéristiques importantes
d'un ordinateur parallèle. Un modèle simple pour une telle classification est donné par
la taxonomie de Flynn. Cette taxonomie caractérise les ordinateurs parallèles en
fonction du contrôle global et des flux de données et de contrôle qui en résultent.
Les quatre classifications définies par Flynn sont basées sur le nombre de flux
d'instructions (ou de contrôle) et de données simultanés disponibles dans l'architecture
(voir figure 1.7) :
(1) Instruction unique, flux de données unique (SISD, Single Instruction, Single Data
stream). Il y a un élément de traitement qui a accès à un seul programme et à un seul
stockage de données. À chaque étape, l'élément de traitement charge une instruction et
les données correspondantes et exécute l'instruction. Le résultat est stocké dans la
mémoire de données. Le SISD est donc l'ordinateur séquentiel conventionnel selon le
modèle de von Neumann. Il s'agit d'un ordinateur séquentiel qui n'exploite aucun
parallélisme dans les flux d'instructions ou de données. Une seule unité de contrôle
(UC) récupère un seul flux d'instructions (IS) dans la mémoire. L'unité de contrôle
génère ensuite les signaux de commande appropriés pour ordonner à un seul élément
Pr Dr Jean-Pépé BUANGA MAPETU 16 Notes: Systèmes parallèles et distribués/UNIKIN
de traitement (PE) d'opérer sur un seul flux de données (DS), c'est-à-dire une
opération à la fois. Les exemples d'architecture SISD sont les machines traditionnelles
à uniprocesseur telles que les PC (les PC actuels ont plusieurs processeurs) ou les
anciens ordinateurs centraux.
(2) Instruction unique, flux de données multiples (SIMD, Single Instruction, Multiple
Data streams). Il y a plusieurs éléments de traitement, chacun ayant un accès privé à
une mémoire de données (partagée ou distribuée). Mais il n'y a qu'une seule mémoire
de programme à partir de laquelle un processeur de contrôle spécial récupère et
distribue les instructions. À chaque étape, chaque élément de traitement obtient du
processeur de contrôle la même instruction et charge un élément de données distinct
par le biais de son accès privé aux données sur lesquelles l'instruction est exécutée.
Ainsi, l'instruction est appliquée en parallèle et de manière synchrone par tous les
éléments de traitement à différents éléments de données. Pour les applications
présentant un degré important de parallélisme des données, l'approche SIMD peut être
très efficace. C'est le cas, par exemple, des applications multimédias ou des
algorithmes d'infographie permettant de générer des vues tridimensionnelles réalistes
d'environnements générés par ordinateur. Un ordinateur qui exploite plusieurs flux de
données par rapport à un seul flux d'instructions pour effectuer des opérations qui
peuvent être naturellement parallélisées. Par exemple, un processeur matriciel ou un
processeur graphique.
(3) Instruction multiple, flux de données unique (MISD, Multiple Instruction, Single
Data stream). Il existe plusieurs éléments de traitement dont chacun dispose d'une
mémoire de programme privée, mais il n'y a qu'un seul accès commun à une mémoire
de données globale unique. À chaque étape, chaque élément de traitement obtient le
même élément de données de la mémoire de données et charge une instruction de sa
mémoire de programme privée. Ces instructions, éventuellement différentes, sont
ensuite exécutées en parallèle par les éléments de traitement en utilisant l'élément de
données obtenu précédemment (identique) comme opérande. Ce modèle d'exécution
est très restrictif et aucun ordinateur parallèle commercial de ce type n'a jamais été
construit. Plusieurs instructions opèrent sur un seul flux de données. Architecture peu
courante, généralement utilisée pour la tolérance aux pannes. Des systèmes
hétérogènes fonctionnent sur le même flux de données et doivent se mettre d'accord
sur le résultat. L'ordinateur de contrôle de vol de la navette spatiale en est un exemple.
(4) Flux d'instructions et de données multiples (MIMD, Multiple Instruction, Multiple
Data streams). Il existe plusieurs éléments de traitement, dont chacun dispose d'un
accès séparé aux instructions et aux données d'un programme (partagé ou distribué) et
d'une mémoire de données. À chaque étape, chaque élément de traitement charge une
instruction et un élément de données distincts, applique l'instruction à l'élément de
données et stocke un résultat éventuel dans la mémoire de données. Les éléments de
traitement travaillent de manière asynchrone les uns par rapport aux autres. Les
processeurs multicœurs ou les systèmes en grappes sont des exemples du modèle
MIMD. Plusieurs processeurs autonomes exécutent simultanément des instructions
différentes sur des données différentes. Les systèmes distribués sont généralement
reconnus comme des architectures MIMD ; ils exploitent soit un espace mémoire
Pr Dr Jean-Pépé BUANGA MAPETU 17 Notes: Systèmes parallèles et distribués/UNIKIN
partagé unique, soit un espace mémoire distribué.
Figure 1.7 : Taxonomie de Flynn
1.7 L'impact de la communication dans un réseau d'interconnexion
Nous avons vu que les modèles LMM et MMM utilisent explicitement des réseaux
d'interconnexion pour transmettre les demandes de mémoire aux mémoires non
locales (voir les figures 1.5 et 1.6).
Depuis l'aube de l'informatique parallèle, la principale caractéristique d'un système
parallèle a été le type d'unité centrale de traitement (CPU) et le réseau
d'interconnexion. Cette situation est en train de changer. Des expériences récentes ont
montré que les temps d'exécution de la plupart des applications parallèles réelles
dépendent de plus en plus du temps de communication plutôt que du temps de calcul.
Ainsi, à mesure que le nombre d'unités de traitement ou d'ordinateurs coopérants
augmente, la performance des réseaux d'interconnexion devient plus importante que la
performance de l'unité de traitement. Plus précisément, le réseau d'interconnexion a
un impact considérable sur l'efficacité et l'évolutivité d'un ordinateur parallèle dans la
plupart des applications parallèles réelles. En d'autres termes, les performances
élevées d'un réseau d'interconnexion peuvent en fin de compte se traduire par des
accélérations plus importantes, parce qu'un tel réseau d'interconnexion peut raccourcir
le temps d'exécution parallèle global et augmenter le nombre d'unités de traitement
qui peuvent être exploitées efficacement.
Pr Dr Jean-Pépé BUANGA MAPETU 18 Notes: Systèmes parallèles et distribués/UNIKIN
La performance d'un réseau d'interconnexion dépend de plusieurs facteurs. Trois des
plus importants sont le routage, les algorithmes de contrôle de flux et la topologie du
réseau. Le routage est le processus de sélection d'un chemin pour le trafic dans un
réseau d'interconnexion ; le contrôle de flux est le processus de gestion du taux de
transmission des données entre deux nœuds pour éviter qu'un expéditeur rapide ne
submerge un récepteur lent ; et la topologie du réseau est la disposition des différents
éléments, tels que les nœuds de communication et les canaux, d'un réseau
d'interconnexion.
1.8 Organisation de la mémoire des ordinateurs parallèles
Presque tous les ordinateurs parallèles à usage général sont basés sur le modèle
MIMD. Une autre classification des ordinateurs MIMD peut être effectuée en fonction
de l'organisation de leur mémoire. Deux aspects peuvent être distingués :
l'organisation physique de la mémoire et le point de vue du programmeur sur la
mémoire. En ce qui concerne l'organisation physique, on peut distinguer les
ordinateurs à mémoire physiquement partagée (également appelés multiprocesseurs)
et les ordinateurs à mémoire physiquement distribuée (également appelés multi-
ordinateurs) (voir la figure 1.8 pour une illustration). Mais il existe également de
nombreuses organisations hybrides, qui fournissent par exemple une mémoire
virtuellement partagée au-dessus d'une mémoire physiquement distribuée.
Fig. 1.8 Formes d'organisation de la mémoire des ordinateurs MIMD
1.8.1 Ordinateurs à mémoire distribuée
Les ordinateurs dotés d'une mémoire physiquement distribuée sont également appelés
machines à mémoire distribuée (DMM, Distributed Memory Machines). Ils se
composent d'un certain nombre d'éléments de traitement (appelés nœuds) et d'un
réseau d'interconnexion qui relie les nœuds et prend en charge le transfert de données
entre les nœuds. Un nœud est une unité indépendante, composée d'un processeur,
d'une mémoire locale et, parfois, d'éléments périphériques (voir la figure 1.9 (a) pour
une illustration).
Pr Dr Jean-Pépé BUANGA MAPETU 19 Notes: Systèmes parallèles et distribués/UNIKIN
Fig. 1.9 Illustration d'ordinateurs à mémoire distribuée : (a) structure abstraite, (b)
ordinateur à mémoire distribuée et hypercube comme structure d'interconnexion.
Les données du programme sont stockées dans la mémoire locale d'un ou de plusieurs
nœuds. Toute la mémoire locale est privée et seul le processeur local peut y accéder
directement. Lorsqu'un processeur a besoin de données provenant de la mémoire
locale d'autres nœuds pour effectuer des calculs locaux, le passage de messages doit
se faire via le réseau d'interconnexion. Par conséquent, les machines à mémoire
distribuée sont étroitement liées au modèle de programmation par passage de
messages, qui est basé sur la communication entre des processus séquentiels
coopératifs.
Pour effectuer le passage de messages (message-passing), deux processus PA et PB
sur différents nœuds A et B émettent des opérations d'envoi et de réception
correspondantes. Lorsque PB a besoin de données provenant de la mémoire locale du
nœud A, PA effectue une opération d'envoi contenant les données destinées au
processus de destination PB. PB effectue une opération de réception spécifiant un
tampon de réception pour stocker les données du processus source PA à partir duquel
les données sont attendues.
1.8.2 Ordinateurs à mémoire partagée
Les ordinateurs dotés d'une mémoire physique partagée sont également appelés
machines à mémoire partagée (SMM) ; la mémoire partagée est également appelée
mémoire globale. Les machines à mémoire partagée se composent d'un certain
nombre de processeurs ou de cœurs, d'une mémoire physique partagée (mémoire
globale) et d'un réseau d'interconnexion pour relier les processeurs à la mémoire. La
mémoire partagée peut être mise en œuvre sous la forme d'un ensemble de modules
de mémoire. Les données peuvent être échangées entre les processeurs via la mémoire
globale en lisant ou en écrivant des variables partagées.
Pr Dr Jean-Pépé BUANGA MAPETU 20 Notes: Systèmes parallèles et distribués/UNIKIN
Les cœurs d'un processeur multicœurs sont un exemple de SMM. Physiquement, la
mémoire globale se compose généralement de modules de mémoire distincts
fournissant un espace d'adressage commun auquel tous les processeurs peuvent
accéder (voir illustration à la figure 1.10).
Fig. 1.10 Illustration d'un ordinateur à mémoire partagée : (a) vue abstraite et (b) mise
en œuvre de la mémoire partagée avec des modules de mémoire.
Un modèle de programmation naturel pour les SMM est l'utilisation de variables
partagées auxquelles tous les processeurs peuvent accéder. La communication et la
coopération entre les processeurs sont organisées par l'écriture et la lecture de
variables partagées qui sont stockées dans la mémoire globale. L'accès simultané à
des variables partagées par plusieurs processeurs doit être évité, car des conditions de
course aux effets imprévisibles peuvent se produire.
L'existence d'une mémoire globale est un avantage significatif, puisque la
communication via des variables partagées est aisée et qu'aucune réplication de
données n'est nécessaire, comme c'est parfois le cas pour les DMM. Mais
techniquement, la réalisation des SMM nécessite un effort plus important, notamment
parce que le réseau d'interconnexion doit fournir un accès rapide à la mémoire globale
pour chaque processeur. Cela peut être assuré pour un petit nombre de processeurs,
mais il est difficile de passer à une échelle supérieure à quelques dizaines de
processeurs. Les multiprocesseurs symétriques (SMP) constituent une variante
particulière des SMM.
Chaque processeur multicœurs avec plusieurs cœurs est un système SMP. Les SMP
n'ont généralement qu'un petit nombre de processeurs, car le bus central fournit une
largeur de bande constante qui est partagée par tous les processeurs. Lorsque trop de
processeurs sont connectés, de plus en plus de collisions d'accès peuvent se produire,
ce qui augmente le temps d'accès effectif à la mémoire. Le nombre maximal de
processeurs utilisés dans les SMP à bus se situe généralement entre 32 et 64.
Les programmes parallèles pour les SMP sont souvent basés sur l'exécution de threads.
Un thread est un flux de contrôle distinct qui partage des données avec d'autres
threads via un espace d'adressage global. On peut distinguer les threads du noyau qui
sont gérés par le système d'exploitation et les threads de l'utilisateur qui sont
explicitement générés et contrôlés par le programme parallèle. Les threads du noyau
sont mappés par le système d'exploitation sur les processeurs pour l'exécution. Les
threads utilisateur sont gérés par l'environnement de programmation spécifique utilisé
et sont mis en correspondance avec les threads du noyau pour l'exécution.
Les algorithmes de mappage ainsi que le nombre exact de processeurs peuvent être
cachés à l'utilisateur par le système d'exploitation. Les processeurs sont entièrement
Pr Dr Jean-Pépé BUANGA MAPETU 21 Notes: Systèmes parallèles et distribués/UNIKIN
contrôlés par le système d'exploitation. Le système d'exploitation peut également
lancer plusieurs programmes séquentiels de plusieurs utilisateurs sur différents
processeurs, lorsqu’aucun programme parallèle n'est disponible. Les systèmes SMP de
petite taille sont souvent utilisés comme serveurs, en raison de leur rentabilité.
1.8.3 Réduction des temps d'accès à la mémoire
Le temps d'accès à la mémoire a une grande influence sur les performances du
programme. Ceci peut également être observé pour les systèmes informatiques avec
un espace d'adressage partagé. Le développement technologique, avec une réduction
constante de la taille des caractéristiques VLSI (Very Large Scale Integration), a
permis d'améliorer considérablement les performances des processeurs.
Le temps d'accès à la mémoire ne suit pas le rythme de l'amélioration des
performances du processeur, et l'écart entre le temps de cycle du processeur et le
temps d'accès à la mémoire ne cesse de se creuser. Une organisation appropriée de
l'accès à la mémoire devient de plus en plus importante pour obtenir de bonnes
performances au niveau du programme. Ceci est également vrai pour les programmes
parallèles, en particulier si un espace d'adressage partagé est utilisé. La réduction de la
latence moyenne observée par un processeur lors de l'accès à la mémoire peut
augmenter de manière significative les performances du programme qui en résulte.
Deux approches importantes ont été envisagées pour réduire la latence moyenne
d'accès à la mémoire : la simulation de processeurs virtuels par chaque processeur
physique (multithreading) et l'utilisation de caches locaux pour stocker les valeurs de
données auxquelles on accède souvent.
1.9 Caractéristiques de performance
Les performances d'un système dépendent de la technologie du matériel, des
caractéristiques architecturales, de la gestion efficace des ressources, de la conception
d'algorithmes, des structures de données, de l’efficacité du langage, des compétences
du programmeur, de la technologie des compilateurs.
Les performances d'un système informatique décrivent la rapidité avec laquelle un
système donné peut exécuter un ou plusieurs programmes, comme le délai d'exécution.
Le délai d'exécution (Turnaround) dépend de:
i. Accès au disque et à la mémoire
ii. Entrées et sorties
iii. Temps de compilation
iv. Temps de calcul
La performance idéale d'un système informatique signifie une adéquation parfaite
entre la capacité de la machine et le comportement du programme. La capacité de la
machine peut être améliorée en utilisant une meilleure technologie matérielle et une
gestion efficace des ressources. Mais en ce qui concerne le comportement du
programme, il dépend du code utilisé, du compilateur utilisé et d'autres conditions
d'exécution.
Pr Dr Jean-Pépé BUANGA MAPETU 22 Notes: Systèmes parallèles et distribués/UNIKIN
Les performances d'une machine peuvent également varier d'un programme à l'autre.
Comme il y a trop de programmes et qu'il n'est pas pratique de tester la vitesse d'une
unité centrale sur chacun d'entre eux, des critères de référence ont été mis au point.
Les architectes informatiques ont mis au point toute une série de mesures pour décrire
les performances de l'ordinateur.
i. Fréquence d'horloge et CPI / IPC : Le temps CPU utilisé par un programme est
considéré, et le temps CPU de l'utilisateur est le facteur le plus important. L'unité
centrale est pilotée par une horloge dont le temps de cycle est constant (généralement
mesuré en nanosecondes) et qui contrôle le rythme des opérations internes de l'unité
centrale. L'horloge a généralement un temps de cycle constant (t en nanosecondes).
L'inverse du temps de cycle est la fréquence de l'horloge (f = 1/τ, mesurée en
mégahertz). Un temps de cycle d'horloge plus court, ou un plus grand nombre de
cycles par seconde, signifie que davantage d'opérations peuvent être effectuées par
unité de temps. La taille du programme est déterminée par le nombre d'instructions (Ic,
instruction count). La taille d'un programme est déterminée par son nombre
d'instructions, Ic, le nombre d'instructions machine à exécuter par le programme.
L'exécution d'instructions machine différentes nécessite un nombre différent de cycles
d'horloge. Le CPI (cycle per instruction) est donc un paramètre important.
ii. MIPS : Millions d'instructions par seconde, calculés en divisant le nombre
d'instructions exécutées dans un programme en cours d'exécution par le temps
nécessaire à l'exécution du programme. Le taux de MIPS est directement
proportionnel à la fréquence d'horloge et inversement proportionnel à l'IPC.
iii. MFLOPS (prononcé "megaflops") signifie "millions d'opérations en virgule
flottante par seconde". Ce chiffre est souvent utilisé comme "limite inférieure". Si l'on
sait à l'avance combien d'opérations un programme doit effectuer, on peut diviser le
nombre d'opérations par le temps d'exécution pour obtenir une valeur en MFLOPS.
Par exemple, l'algorithme standard de multiplication de matrices n*n nécessite 2n3 - n
opérations (n2 produits intérieurs, avec n multiplications et n-1 additions dans chaque
produit). Supposons que vous calculiez le produit de deux matrices 100 *100 en 0,35
seconde. L'ordinateur réalise alors (2(100)3 - 100)/0,35 = 5 714 000 ops/sec = 5,714
MFLOPS
iv. Débit (Throughput rate) : Un autre facteur important sur lequel les performances
du système sont mesurées est le débit du système qui est essentiellement le nombre de
programmes qu'un système peut exécuter par unité de temps Ws. En
multiprogrammation, le débit du système est souvent inférieur au débit de l'unité
centrale Wp, défini comme suit
Wp = f/(Ic * CPI)
L'unité de Wp est le nombre de programmes par seconde.
v. Vitesse ou débit (Speed or Throughput) (W/Tn) - taux d'exécution sur un système
à n processeurs, mesuré en FLOPs/unité de temps ou instructions/unité de temps.
vi. Speedup (Sn = T1/Tn) - vitesse d'exécution sur une machine réelle à n processeurs
par rapport à la vitesse asymptotique.
vii. Efficacité (Efficiency) (En = Sn/n) - fraction de la vitesse maximale théorique
atteinte par n processeurs.
Pr Dr Jean-Pépé BUANGA MAPETU 23 Notes: Systèmes parallèles et distribués/UNIKIN
viii. Degré de parallélisme (DOP, Degree of Parallelism) - pour une partie donnée
de la charge de travail, le nombre de processeurs qui peuvent être occupés à partager
cette partie du calcul de manière égale. Nous supposons que si k processeurs
travaillent ensemble sur une charge de travail, celle-ci est exécutée k fois plus
rapidement qu'une exécution séquentielle.
ix. Évolutivité (Scalability) - Attributs d'un système informatique qui permettent
d'en augmenter ou d'en réduire la taille de manière gracieuse et linéaire, de traiter des
charges de travail plus petites ou plus grandes, ou d'obtenir des diminutions ou des
augmentations proportionnelles de la vitesse d'une application donnée. Les
applications exécutées sur une machine évolutive peuvent ne pas bien évoluer. Une
bonne évolutivité exige que l'algorithme et la machine aient les bonnes propriétés. Il
existe donc en général cinq facteurs de performance (Ic, p, m, k, t) qui sont influencés
par quatre attributs du système :
(1) Architecture du jeu d'instructions (affecte Ic et p)
(2) Technologie du compilateur (affecte Ic, p et m)
(3) Implémentation et contrôle de l'unité centrale (affecte p *t ) Cache et hiérarchie de
(4) la mémoire (affecte la latence d'accès à la mémoire, k 't)
(4) Le temps total de l'unité centrale peut servir de base à l'estimation du taux
d'exécution d'un processeur.
1.9 Champ d'application du calcul parallèle
Le calcul parallèle a eu un impact considérable sur une variété de domaines allant des
simulations informatiques pour les applications scientifiques et d'ingénierie aux
applications commerciales dans l'exploration des données et le traitement des
transactions. Les avantages du parallélisme en termes de coûts, associés aux
exigences de performance des applications, constituent des arguments convaincants
en faveur du calcul parallèle. Nous présentons un petit échantillon des diverses
applications de l'informatique parallèle.
1.9.1 Applications en ingénierie et en conception
Le calcul parallèle a traditionnellement été utilisé avec beaucoup de succès dans la
conception des profils aérodynamiques (optimisation de la portance, de la traînée, de
la stabilité), des moteurs à combustion interne (optimisation de la distribution de la
charge, de la combustion), des circuits à grande vitesse (dispositions pour les retards
et les effets capacitifs et inductifs) et des structures (optimisation de l'intégrité
structurelle, des paramètres de conception, du coût, etc. Plus récemment, la
conception de systèmes microélectromécaniques et nanoélectromécaniques (MEMS et
NEMS) a fait l'objet d'une attention particulière. Alors que la plupart des applications
en ingénierie et en conception posent des problèmes d'échelles spatiales et temporelles
multiples et de phénomènes physiques couplés, ces problèmes sont particulièrement
aigus dans le cas de la conception des MEMS/NEMS.
D'autres applications dans le domaine de l'ingénierie et de la conception se
Pr Dr Jean-Pépé BUANGA MAPETU 24 Notes: Systèmes parallèles et distribués/UNIKIN
concentrent sur l'optimisation d'une variété de processus. Les ordinateurs parallèles
ont été utilisés pour résoudre une variété de problèmes d'optimisation discrets et
continus. Des algorithmes tels que Simplex, la méthode du point intérieur pour
l'optimisation linéaire et Branch and bound, et la programmation génétique pour
l'optimisation discrète ont été efficacement parallélisés et sont fréquemment utilisés.
1.9.2 Applications scientifiques
Ces dernières années ont été marquées par une révolution dans les applications de
calcul scientifique à haute performance. Le séquençage du génome humain par
l'International Human Genome Sequencing Consortium et Celera, Inc. a ouvert de
nouvelles frontières passionnantes à la bio-informatique. La caractérisation
fonctionnelle et structurelle des gènes et des protéines promet de comprendre et
d'influencer fondamentalement les processus biologiques. L'analyse des séquences
biologiques en vue de mettre au point de nouveaux médicaments et de nouveaux
traitements pour les maladies et les états pathologiques nécessite des algorithmes
novateurs ainsi qu'une puissance de calcul à grande échelle. En effet, certaines des
technologies de calcul parallèle les plus récentes sont spécifiquement destinées à des
applications en bio-informatique.
Les progrès de la physique et de la chimie computationnelles se sont concentrés sur la
compréhension de processus allant des phénomènes quantiques aux structures
macromoléculaires. Elles ont permis de concevoir de nouveaux matériaux, de
comprendre les voies chimiques et d'améliorer l'efficacité des processus.
Les applications en astrophysique ont exploré l'évolution des galaxies, les processus
thermonucléaires et l'analyse d'ensembles de données extrêmement volumineux
provenant de télescopes. La modélisation météorologique, la prospection minière, la
prévision des inondations, etc, s'appuient fortement sur les ordinateurs parallèles et
ont un impact très important sur la vie quotidienne. La bio-informatique et
l'astrophysique présentent également certains des problèmes les plus difficiles à
résoudre en ce qui concerne l'analyse d'ensembles de données extrêmement
volumineux. Les bases de données de protéines et de gènes (telles que PDB,
SwissProt, ENTREZ et NDB) ainsi que les ensembles de données d'étude du ciel (tels
que les Sloan Digital Sky Surveys) représentent certains des plus grands ensembles de
données scientifiques. L'analyse efficace de ces ensembles de données nécessite une
puissance de calcul considérable et constitue la clé de découvertes scientifiques
importantes.
1.9.3 Applications commerciales
Avec l'utilisation généralisée du web et du contenu statique et dynamique associé,
l'accent est mis de plus en plus sur des serveurs rentables capables de fournir des
performances évolutives. Des plates-formes parallèles allant des multiprocesseurs aux
grappes Linux sont fréquemment utilisées comme serveurs web et de base de données.
Par exemple, les jours de gros volumes, les grandes maisons de courtage de Wall
Pr Dr Jean-Pépé BUANGA MAPETU 25 Notes: Systèmes parallèles et distribués/UNIKIN
Street gèrent des centaines de milliers de sessions d'utilisateurs simultanées et des
millions d'ordres.
La disponibilité de données transactionnelles à grande échelle a également suscité un
intérêt considérable pour l'exploration et l'analyse des données afin d'optimiser les
décisions commerciales et marketing. Le volume et la distribution géographique de
ces données exigent l'utilisation d'algorithmes parallèles efficaces pour des problèmes
tels que l'extraction de règles d'association, le regroupement, la classification et
l'analyse de séries temporelles.
1.9.4 Applications dans les systèmes informatiques
À mesure que les systèmes informatiques deviennent plus omniprésents et que les
calculs se répandent sur le réseau, les questions de traitement parallèle s'intègrent dans
une variété d'applications.
Dans le domaine de la sécurité informatique, la détection des intrusions est un défi
majeur. Dans le cas de la détection des intrusions dans les réseaux, les données sont
collectées sur des sites distribués et doivent être analysées rapidement pour signaler
une intrusion. L'impossibilité de collecter ces données dans un lieu central pour les
analyser nécessite des algorithmes parallèles et distribués efficaces. Dans le domaine
de la cryptographie, certaines des applications les plus spectaculaires de
l'informatique parallèle basée sur l'internet se sont concentrées sur la factorisation
d'entiers extrêmement grands.
Les systèmes embarqués s'appuient de plus en plus sur des algorithmes de contrôle
distribués pour accomplir toute une série de tâches. Une automobile moderne est
composée de dizaines de processeurs qui communiquent pour effectuer des tâches
complexes afin d'optimiser la maniabilité et les performances. Dans ces systèmes, les
algorithmes parallèles et distribués traditionnels pour la sélection du leader,
l'ensemble indépendant maximal, etc. sont fréquemment utilisés.
Alors que l'informatique parallèle s'est traditionnellement limitée à des plates-formes
dotées d'éléments de calcul et de réseau qui se comportent bien et dans lesquelles les
défauts et les erreurs ne jouent pas un rôle important, il existe des leçons précieuses
qui s'étendent aux calculs effectués dans des environnements ad hoc, mobiles ou
défectueux.
Pr Dr Jean-Pépé BUANGA MAPETU 26 Notes: Systèmes parallèles et distribués/UNIKIN
CHAPITRE 2. INTRODUCTION AUX SYSTÈMES DISTRIBUÉS
2.1 Fondamentaux des systèmes distribués
L'avènement des ordinateurs a été motivé par la nécessité d'effectuer rapidement des
calculs et des traitements de données complexes. Les premières solutions ont été
basées sur un modèle appelé « systèmes centralisés », dans lequel un seul ordinateur
avec un ou plusieurs processeurs traite toutes les demandes entrantes. Cependant, des
raisons telles que le coût, la fiabilité et la nature distincte des divisions qui composent
les organisations utilisant les systèmes rendent ce modèle moins attractif. Un autre
modèle, appelé « systèmes distribués », résout ces problèmes. Au lieu d'avoir un seul
ordinateur puissant, les systèmes distribués emploient plusieurs ordinateurs
communiquant entre eux via un réseau commun. La nature indépendante, distribuée et
parfois hétérogène de ces ordinateurs sous-tend également l'importance d'avoir un
logiciel de système distribué pour fournir une vue commune des systèmes.
2.1.1 Définition
Un système distribué est un ensemble d'ordinateurs indépendants qui apparaît à ses
utilisateurs comme un système unique et cohérent. Cette définition fait référence à
deux éléments caractéristiques des systèmes distribués. Le premier est qu'un système
distribué est un ensemble d'éléments informatiques capables de se comporter
indépendamment les uns des autres. Un élément informatique, que nous appellerons
généralement un nœud, peut être un dispositif matériel ou un processus logiciel. Un
deuxième élément est que les utilisateurs (qu'il s'agisse de personnes ou d'applications)
pensent qu'ils ont affaire à un système unique. Cela signifie que, d'une manière ou
d'une autre, les nœuds autonomes doivent collaborer. La manière d'établir cette
collaboration est au cœur du développement des systèmes distribués. Notez que nous
ne faisons aucune hypothèse concernant le type de nœuds. En principe, même au sein
d'un système unique, il peut s'agir d'ordinateurs centraux très performants ou de petits
appareils dans des réseaux de capteurs. De même, nous ne faisons aucune hypothèse
sur la manière dont les nœuds sont interconnectés.
Un système distribué est un ensemble d'ordinateurs autonomes reliés par un réseau et
équipés d'un logiciel de système distribué. Le logiciel de système distribué permet aux
ordinateurs de coordonner leurs activités et de partager les ressources du système. Ce
logiciel donne l'illusion d'un environnement unique et intégré bien qu'il soit en fait
mis en œuvre par plusieurs ordinateurs à différents endroits.
L'idée de systèmes distribués représente un système allant d'applications séparées,
dispersées géographiquement, coopérant les unes avec les autres, à une application
unique formée par la coopération de systèmes dispersés géographiquement mais
relativement indépendants.
Un système distribué est normalement disponible en permanence, même si certaines
parties peuvent être temporairement hors service. Les utilisateurs et les applications
ne doivent pas s'apercevoir que des pièces sont remplacées ou réparées, ou que de
Pr Dr Jean-Pépé BUANGA MAPETU 27 Notes: Systèmes parallèles et distribués/UNIKIN
nouvelles pièces sont ajoutées pour servir davantage d'utilisateurs ou d'applications.
Les systèmes distribués doivent également être relativement faciles à étendre ou à
mettre à l'échelle.
La figure 2.1 montre quatre ordinateurs en réseau et trois applications, dont
l'application B est répartie sur les ordinateurs 2 et 3. Chaque application dispose de la
même interface. Le système distribué permet aux composants d'une même application
distribuée de communiquer entre eux, mais aussi à des applications différentes de
communiquer. En même temps, il cache, aussi bien que possible et raisonnablement,
les différences de matériel et de systèmes d'exploitation à chaque application.
Figure 2.1 Un système distribué organisé comme un intergiciel. La couche
d'intergiciel s'étend sur plusieurs machines et offre à chaque application la même
interface. Le logiciel utilisé par ce système est divisé en plusieurs composants, chacun
résidant sur un site différent.
L'architecture fondamentale d'un système distribué est composée des éléments
architecturaux, suivant: entités communicantes, paradigmes de communication, types
de communication, rôles et responsabilités, et emplacement des entités.
2.1.2 Enjeux
1. Les systèmes distribués diffèrent des logiciels traditionnels parce que les
composants sont dispersés sur un réseau.
2. Modes d'utilisation très variables : les éléments constitutifs des systèmes sont
Pr Dr Jean-Pépé BUANGA MAPETU 28 Notes: Systèmes parallèles et distribués/UNIKIN
soumis à de fortes variations de la charge de travail - par exemple, certaines pages
web sont consultées plusieurs millions de fois par jour. Certaines parties d'un système
peuvent être déconnectées ou mal connectées à certains moments - par exemple,
lorsque des ordinateurs mobiles sont inclus dans un système. Certaines applications
ont des exigences particulières en matière de largeur de bande de communication
élevée et de faible latence - par exemple, les applications multimédias.
3. Large éventail d'environnements système : Un système distribué doit s'adapter à des
matériels, des systèmes d'exploitation et des réseaux hétérogènes. Les réseaux
peuvent avoir des performances très différentes - les réseaux sans fil fonctionnent à
une fraction de la vitesse des réseaux locaux. Des systèmes d'échelles très différentes,
allant de quelques dizaines d'ordinateurs à des millions d'ordinateurs, doivent être pris
en charge.
4. Problèmes internes : Horloges non synchronisées, mises à jour de données
contradictoires et défaillances matérielles et logicielles impliquant les différents
composants du système.
5. Menaces externes : Attaques contre l'intégrité et le secret des données, attaques par
déni de service. Un modèle physique est une représentation des éléments matériels
sous-jacents d'un système distribué qui fait abstraction des détails spécifiques des
technologies informatiques et de réseau utilisées.
6. Le fait de ne pas tenir compte de cette dispersion au moment de la conception est à
l'origine de tant de systèmes inutilement complexes et d'erreurs qui doivent être
corrigées par la suite. Peter Deutsch, qui travaillait alors chez Sun Microsystems, a
formulé ces erreurs sous la forme des fausses hypothèses suivantes, que tout le monde
fait lorsqu'il développe une application distribuée pour la première fois :
(1) Le réseau est fiable.
(2) Le réseau est sûr.
(3) Le réseau est homogène.
(4) La topologie ne change pas.
(5) La latence est nulle.
(6) La bande passante est infinie.
(7) Le coût de transport est nul.
(8) Il y a un administrateur.
2.1.3 Exemples de systèmes distribués
Voici quelques exemples de systèmes distribués et d'applications de l'informatique
distribuée :
(1) réseaux de télécommunications : réseaux téléphoniques et réseaux cellulaires,
réseaux informatiques tels que l'internet, réseaux de capteurs sans fil, algorithmes de
routage.
(2) applications de réseau: World wide web et réseaux peer-to-peer, jeux en ligne
massivement multijoueurs et communautés de réalité virtuelle, bases de données
distribuées et systèmes de gestion de bases de données distribuées, systèmes de
fichiers en réseau, systèmes distribués de traitement de l'information tels que les
Pr Dr Jean-Pépé BUANGA MAPETU 29 Notes: Systèmes parallèles et distribués/UNIKIN
systèmes bancaires et les systèmes de réservation des compagnies aériennes.
(3) contrôle des processus en temps réel: systèmes de contrôle des avions, systèmes de
contrôle industriel.
(4) calcul parallèle: calcul scientifique, y compris le calcul en grappe et le calcul en
grille et divers projets de calcul bénévole.
2.2 Entités communicantes
Les entités qui communiquent dans un système distribué peuvent être distinguées
comme suit:
(1) Objets: objets physiques et objets logiques, tels que ressources, nœuds, processus,
fichier, base de données, périphériques d'E / S, etc.), avec des algorithmes (procédures
ou méthodes) qui opèrent sur ces objets. Un gestionnaire d'objets est alors un
ensemble d'opérations effectuées sur ces objets. Les objets distribués sont devenus un
domaine d'étude majeur dans les systèmes distribués.
(2) Composants: le composant représente une collection d'objets ou une unité de
logiciel qui encapsule une fonction ou une caractéristique du système. Des exemples
de composants peuvent être des processus, des tuyaux et des filtres. Contrairement
aux objets, les composants spécifient non seulement leurs interfaces (fournies) mais
également les hypothèses qu'ils émettent en termes d'autres composants / interfaces
qui doivent être présents pour qu'un composant remplisse sa fonction, comme le
middleware basé sur les composants qui fournit souvent un support supplémentaire
pour la clé des domaines tels que le déploiement et la prise en charge de la
programmation côté serveur.
(3) Services Web: les services Web sont étroitement liés aux objets et aux composants,
se comportant comme des connecteurs. Un connecteur est un mécanisme de
communication qui permet la coopération et la coordination entre les composants.
Alors que les objets et les composants sont souvent utilisés au sein d'une organisation
pour développer des applications étroitement couplées, les services Web sont
généralement considérés comme des services complets à part entière qui peuvent être
combinés pour obtenir des services à valeur ajoutée, dépassant souvent les frontières
organisationnelles et permettant ainsi une intégration d'entreprise à entreprise.
2.3 Paradigmes de communication
Cette section s'intéresse à la manière dont les entités communiquent dans un système
distribué et considère trois types de paradigme de communication qui sont les
suivants :
Communication interprocessus ;
Invocation à distance ;
Communication indirecte.
Pr Dr Jean-Pépé BUANGA MAPETU 30 Notes: Systèmes parallèles et distribués/UNIKIN
2.3.1 La communication interprocessus
La communication interprocessus fait référence à la prise en charge de niveau
relativement bas de la communication entre les processus dans les systèmes distribués,
y compris les primitives de transmission de messages, l'accès direct à l'API offerte par
les protocoles Internet (programmation de socket) et la prise en charge de la
communication multicast.
2.3.2 L’invocation à distance
L’invocation à distante représente le paradigme de communication le plus courant
dans les systèmes distribués, couvrant une gamme de techniques basées sur un
échange bidirectionnel entre des entités communicantes dans un système distribué et
aboutissant à l'appel d'une opération, d'une procédure ou d'un procédé à distance.
(1) Protocoles de demande-réponse (Request-replyprotocols): les protocoles de
demande-réponse (Request-reply) sont en fait un modèle imposé à un service de
transmission de messages sous-jacent pour prendre en charge le système client-
serveur. En particulier, de tels protocoles impliquent généralement un échange par
paires de messages du client au serveur, puis du serveur au client, le premier message
contenant un codage de l'opération à exécuter au niveau du serveur et également un
tableau d'octets contenant les arguments associés et le deuxième message contenant
les résultats de l'opération, à nouveau codé sous forme de tableau d'octets. Ce
paradigme est plutôt primitif et seulement vraiment utilisé dans les systèmes
embarqués où la performance est primordiale. L'approche est également utilisée dans
le protocole HTTP. De plus, les systèmes distribués choisiront d'utiliser les appels de
procédure à distance ou l'invocation de méthode à distance, mais notez que les deux
approches sont soutenues par une demande sous-jacente d’échanges de réponses.
(2) Appels de procédure à distance : Le concept d'appel de procédure à distance (RPC,
RemoteProcedure Call), initialement attribué à Birrell et Nelson [1984], représente
une avancée intellectuelle majeure dans l'informatique distribuée. Dans RPC, les
procédures des processus sur les ordinateurs distants peuvent être appelées comme s'il
s'agissait de procédures dans l'espace d'adressage local. Le système RPC sous-jacent
masque alors des aspects importants de la distribution, y compris le codage et le
décodage des paramètres et des résultats, le passage des messages et la préservation
de la sémantique requise pour l'appel de procédure. Cette approche directement et
élégamment prend en charge le système client-serveur avec des serveurs offrant un
ensemble d'opérations via une interface de service et des clients appelant ces
opérations directement comme si elles étaient disponibles localement. Les systèmes
RPC offrent donc (au minimum) une transparence d'accès et de localisation.
(3) Invocation de méthode à distance (RemoteMethod Invocation): l'invocation de
méthode à distance (RMI) ressemble fortement aux appels de procédure à distance,
mais dans un monde d'objets distribués. Avec cette approche, un objet appelant peut
appeler une méthode dans un objet distant. Comme avec RPC, les détails sous-jacents
sont généralement cachés à l'utilisateur. Les implémentations RMI peuvent cependant
Pr Dr Jean-Pépé BUANGA MAPETU 31 Notes: Systèmes parallèles et distribués/UNIKIN
aller plus loin en prenant en charge l'identité d'objet et la capacité associée à passer
des identificateurs d'objet en tant que paramètres dans les appels distants.
2.3.3 Communication indirecte
L'ensemble de techniques ci-dessus ont toutes une chose en commun: la
communication représente une relation bidirectionnelle entre un émetteur et un
récepteur, les émetteurs dirigeant explicitement les messages / appels vers les
récepteurs associés. Les récepteurs sont également généralement conscients de
l'identité des émetteurs et, dans la plupart des cas, les deux parties doivent exister en
même temps. En revanche, un certain nombre de techniques sont apparues dans
lesquelles la communication est indirecte, via une troisième entité, permettant un fort
degré de découplage entre les émetteurs et les récepteurs. En particulier:
Les émetteurs n'ont pas besoin de savoir à qui ils envoient (découplage en espace,
space uncoupling).
Les expéditeurs et les destinataires n'ont pas besoin d'exister en même temps
(découplage temporel, time uncoupling).
Les techniques clés de la communication indirecte comprennent:
(1) Communication de groupe: la communication de groupe est un paradigme de
communication multipartite prenant en charge la communication un-à-plusieurs. La
communication de groupe repose sur l'abstraction d'un groupe qui est représenté dans
le système par un identifiant de groupe.
(2) Systèmes de publication-abonnement: de nombreux systèmes, tels que l'exemple
du commerce financier, peuvent être classés comme des systèmes de diffusion
d'informations dans lesquels un grand nombre de producteurs (ou d'éditeurs)
distribuent des informations d'intérêt (événements) à un nombre tout aussi important
de consommateurs (ou abonnés). Il serait compliqué et inefficace d'employer l'un des
paradigmes de communication de base discutés ci-dessus à cette fin et, par conséquent,
des systèmes de publication-abonnement (parfois également appelés systèmes basés
sur des événements distribués) sont apparus pour répondre à ce besoin important. Les
systèmes de publication-abonnement partagent la caractéristique cruciale de fournir
un service intermédiaire qui garantit efficacement que les informations générées par
les producteurs sont acheminées vers les consommateurs qui le souhaitent.
(3) Files d'attente de messages: alors que les systèmes de publication-abonnement
offrent un style de communication un-à-plusieurs, les files d'attente de messages
offrent un service point à point par lequel les processus producteurs peuvent envoyer
des messages à une file d'attente spécifiée et les processus consommateurs peuvent
recevoir des messages du file d'attente ou être averti de l'arrivée de nouveaux
messages dans la file d'attente. Les files d'attente offrent donc une indirection entre les
processus producteur et consommateur.
(4) Espaces de tuple: les espaces de tuple offrent un autre service de communication
indirecte en prenant en charge un modèle dans lequel les processus peuvent placer des
éléments arbitraires de données structurées, appelés tuples, dans un espace de tuple
persistant et d'autres processus peuvent lire ou supprimer ces tuples de l'espace de
Pr Dr Jean-Pépé BUANGA MAPETU 32 Notes: Systèmes parallèles et distribués/UNIKIN
tuple. en spécifiant des modèles d'intérêt. Étant donné que l'espace de tuple est
persistant, les lecteurs et les redacteurs n'ont pas besoin d'exister en même temps. Ce
style de programmation, également connu sous le nom de communication générative,
a été introduit par Gelernter[1985] comme paradigme de la programmation parallèle.
Un certain nombre d'implémentations distribuées ont également été développées,
adoptant soit une implémentation de type client-serveur, soit une approche peer-to-
peer plus décentralisée.
(5) Mémoire partagée distribuée: les systèmes de mémoire partagée distribuée (DSM,
Distributed shared memory) fournissent une abstraction pour le partage de données
entre des processus qui ne partagent pas la mémoire physique. Les programmeurs se
voient néanmoins présenter une abstraction familière de la lecture ou de l'écriture de
structures de données (partagées) comme si elles se trouvaient dans leurs propres
espaces d'adresses locaux, présentant ainsi un haut niveau de transparence de
distribution. L'infrastructure sous-jacente doit garantir qu'une copie est fournie en
temps opportun et doit également traiter les problèmes liés à la synchronisation et à la
cohérence des données.
2.4 Rôles et responsabilités
Dans un système distribué, les processus ou même les objets, composants ou services,
y compris les services Web (mais par souci de simplicité, nous utilisons le terme
processus tout au long de cette section) interagissent les uns avec les autres pour
effectuer une activité utile, par exemple, pour prendre en charge une session de chat.
Ce faisant, les processus assument des rôles donnés, et ces rôles sont fondamentaux
pour établir l'architecture globale à adopter. Dans cette section, nous examinons deux
styles architecturaux issus du rôle des processus individuels: client-serveur et peer-to-
peer.
(1) Client-serveur: il s'agit de l'architecture la plus souvent citée lors de le cadre des
systèmes distribués. Elle est historiquement la plus importante et reste la plus
largement utilisée. En particulier, les processus client interagissent avec des processus
serveur individuels dans des ordinateurs hôtes potentiellement séparés afin d'accéder
aux ressources partagées qu'ils gèrent. Les serveurs peuvent à leur tour être des clients
d'autres serveurs. Par exemple, un serveur Web est souvent un client d'un serveur de
fichiers local qui gère les fichiers dans lesquels les pages Web sont stockées. Les
serveurs Web et la plupart des autres services Internet sont des clients du service DNS,
qui traduit les noms de domaine Internet en adresses réseau. Un autre exemple lié au
Web concerne les moteurs de recherche, qui permettent aux utilisateurs de rechercher
des résumés d'informations disponibles sur des pages Web des sites sur Internet. Ces
résumés sont créés par des programmes appelés robots d'exploration Web, qui
s'exécutent en arrière-plan sur un site de moteur de recherche à l'aide de requêtes
HTTP pour accéder à des serveurs Web sur Internet. Ainsi, un moteur de recherche est
à la fois un serveur et un client: il répond aux requêtes des clients du navigateur et il
exécute des robots d'exploration Web qui agissent en tant que clients d'autres serveurs
Web.
Pr Dr Jean-Pépé BUANGA MAPETU 33 Notes: Systèmes parallèles et distribués/UNIKIN
(2) Peer-to-peer: dans cette architecture, tous les processus impliqués dans une tâche
ou une activité jouent des rôles similaires, interagissant de manière coopérative en
tant que pairs sans aucune distinction entre les processus client et serveur ou les
ordinateurs sur lesquels ils s'exécutent. En termes pratiques, tous les processus
participants exécutent le même programme et offrent le même ensemble d'interfaces
les uns aux autres. Bien que le modèle client-serveur offre une approche directe et
relativement simple du partage des données et d'autres ressources, il évolue mal. La
centralisation de la fourniture et de la gestion des services qu'implique le placement
d'un service à une seule adresse ne va pas bien au-delà de la capacité de l'ordinateur
qui héberge le service et de la bande passante de ses connexions réseau.
Le but de l'architecture peer-to-peer est d'exploiter les ressources (données et matériel)
d'un grand nombre d'ordinateurs participants pour l'accomplissement d'une tâche ou
d'une activité donnée. Des applications et des systèmes peer-to-peer ont été construits
avec succès pour permettre à des dizaines ou des centaines de milliers d'ordinateurs de
fournir un accès aux données et à d'autres ressources qu'ils stockent et gèrent
collectivement. Les applications sont composées d'un grand nombre de processus
homologues s'exécutant sur des ordinateurs séparés et le modèle de communication
entre eux dépend entièrement des exigences de l'application. Un grand nombre
d'objets de données sont partagés, un ordinateur individuel ne contient qu'une petite
partie de la base de données d'application et les charges de stockage, de traitement et
de communication pour l'accès aux objets sont réparties sur de nombreux ordinateurs
et liaisons réseau. Chaque objet est répliqué dans plusieurs ordinateurs pour répartir
davantage la charge et fournir une résilience en cas de déconnexion d'ordinateurs
individuels (comme cela est inévitable dans les grands réseaux hétérogènes auxquels
sont destinés les systèmes peer-to-peer). La nécessité de placer des objets individuels
et de les récupérer et de maintenir des répliques parmi de nombreux ordinateurs rend
cette architecture beaucoup plus complexe que l’architecture client-serveur.
2.5 Emplacement des entités
La dernière question à considérer est de savoir comment des entités telles que des
objets ou des services mappent sur l'infrastructure physique distribuée sous-jacente
qui sera constituée d'un nombre potentiellement important de machines
interconnectées par un réseau de complexité arbitraire. Le placement est crucial en
termes de détermination des propriétés du système distribué, le plus évidemment en
ce qui concerne les performances mais aussi d'autres aspects, tels que la fiabilité et la
sécurité.
La question de savoir où placer un client ou un serveur donné en termes de machines
et de processus dans les machines est une question de conception minutieuse. Le
placement doit prendre en compte les modèles de communication entre les entités, la
fiabilité des machines données et leur chargement actuel, la qualité de la
communication entre les différentes machines, etc. Le placement doit être déterminé
avec une solide connaissance des applications, et il existe peu de directives
universelles pour obtenir une solution optimale. Par conséquent, cette section peut
Pr Dr Jean-Pépé BUANGA MAPETU 34 Notes: Systèmes parallèles et distribués/UNIKIN
distinguer les stratégies de placement suivantes, qui peuvent modifier
considérablement les caractéristiques d'une conception donnée:
(1) Mappage des services sur plusieurs serveurs: les services peuvent être mis en
œuvre sous la forme de plusieurs processus serveur dans des ordinateurs hôtes
distincts interagissant si nécessaire pour fournir un service aux processus clients. Les
serveurs peuvent partitionner l'ensemble des objets sur lesquels le service est basé et
distribuer ces objets entre eux, ou ils peuvent en conserver des copies répliquées sur
plusieurs hôtes. Par exemple, le Web fournit un exemple courant de données
partitionnées dans lesquelles chaque serveur Web gère son propre ensemble de
ressources. Un utilisateur peut utiliser un navigateur pour accéder à une ressource sur
l'un des serveurs.
(2) Mise en cache: un cache stocke les objets de données récemment utilisés qui est
plus proche d'un client ou d'un ensemble particulier de clients que les objets eux-
mêmes. Lorsqu'un nouvel objet est reçu d'un serveur, il est ajouté au magasin de cache
local, en remplaçant certains objets existants si nécessaire. Lorsqu'un objet est requis
par un processus client, le service de mise en cache vérifie d'abord le cache et fournit
l'objet à partir de là si une copie à jour est disponible. Sinon, une copie à jour est
récupérée. Les caches peuvent être co-localisés avec chaque client ou ils peuvent être
situés dans un serveur proxy qui peut être partagé par plusieurs clients. Par exemple,
les navigateurs Web conservent un cache des pages Web récemment visitées et
d’autres ressources Web dans le système de fichiers local du client, à l’aide d’une
requête HTTP spéciale pour vérifier auprès du serveur d’origine que les pages mises
en cache sont à jour avant de les afficher. En outre, les serveurs proxy Web
fournissent un cache partagé de ressources Web pour les ordinateurs clients d'un site
ou sur plusieurs sites. Le but des serveurs proxy est d'augmenter la disponibilité et les
performances du service en réduisant la charge sur le réseau étendu et les serveurs
Web. Les serveurs proxy peuvent assumer d'autres rôles; par exemple, ils peuvent être
utilisés pour accéder à des serveurs Web distants via un pare-feu.
(3) Code mobile: les applets sont un exemple bien connu et largement utilisé de code
mobile - l'utilisateur exécutant un navigateur sélectionne un lien vers une applet dont
le code est stocké sur un serveur Web; le code est téléchargé dans le navigateur et y
fonctionne. Un avantage d'exécuter le code téléchargé localement est qu'il peut donner
une bonne réponse interactive car il ne souffre pas des retards ou de la variabilité de la
bande passante associés à la communication réseau. Le code mobile est une menace
de sécurité potentielle pour les ressources locales de l'ordinateur de destination. Par
conséquent, les navigateurs donnent aux applets un accès limité aux ressources locales.
(4) Agents mobiles: un agent mobile est un programme en cours d'exécution
(comprenant à la fois du code et des données) qui se déplace d'un ordinateur à un
autre dans un réseau effectuant une tâche pour le compte de quelqu'un, telle que la
collecte d'informations, puis renvoyant éventuellement les résultats. Un agent mobile
peut faire de nombreuses invocations aux ressources locales sur chaque site qu'il
visite - par exemple, accéder à des entrées de base de données individuelles. Si nous
comparons cette architecture avec un client statique effectuant des appels distants vers
certaines ressources, transférant éventuellement de grandes quantités de données, il y
Pr Dr Jean-Pépé BUANGA MAPETU 35 Notes: Systèmes parallèles et distribués/UNIKIN
a une réduction du coût et du temps de communication grâce au remplacement des
appels distants par des appels locaux. Les agents mobiles peuvent être utilisés pour
installer et maintenir des logiciels sur les ordinateurs d’une organisation ou pour
comparer les prix des produits d’un certain nombre de fournisseurs en visitant le site
de chaque fournisseur et en effectuant une série d’opérations sur la base de données.
Les agents mobiles (comme le code mobile) représentent une menace potentielle pour
la sécurité des ressources des ordinateurs qu'ils visitent. L'environnement recevant un
agent mobile doit décider quelles ressources locales il doit être autorisé à utiliser, en
fonction de l'identité de l'utilisateur au nom duquel l'agent agit - leur identité doit être
incluse de manière sécurisée avec le code et les données de l'agent mobile. En outre,
les agents mobiles peuvent eux-mêmes être vulnérables - ils peuvent ne pas être en
mesure d'accomplir leur tâche s'ils se voient refuser l'accès aux informations dont ils
ont besoin. Les tâches effectuées par les agents mobiles peuvent être effectuées par
d'autres moyens. Par exemple, les robots d'exploration Web qui doivent accéder aux
ressources des serveurs Web sur Internet fonctionnent avec succès en effectuant des
appels à distance aux processus serveur. Pour ces raisons, l'applicabilité des agents
mobiles peut être limitée.
2.6 Caractéristiques des systèmes distribués
Un système distribué a six caractéristiques importantes: (1) le partage des ressources,
(2) l'ouverture, (3) la concurrence, (4) la scalabilité (5) la tolérance aux pannes et (6)
la transparence.
(1) Partage de ressources : Les ressources fournies par un ordinateur qui est membre
d'un système distribué peuvent être partagées par des clients et d'autres membres du
système via un réseau. Afin de parvenir à un partage efficace, chaque ressource doit
être gérée par un logiciel qui fournit des interfaces qui permettent à la ressource d'être
manipulée par les clients. Les ressources d'un type particulier sont gérées par un
module logiciel appelé gestionnaire de ressources, qui effectue son travail en fonction
d'un ensemble de politiques et de méthodes de gestion.
(2) Ouverture (Openness) : L'ouverture dans les systèmes distribués est la
caractéristique qui détermine si le système est extensible de différentes manières.
Cette caractéristique est mesurée principalement par la mesure dans laquelle de
nouveaux services de partage de ressources peuvent être incorporés sans interruption
ni duplication des services existants. L'ouverture d'un système distribué peut être vue
sous deux angles: l'extensibilité matérielle et l'extensibilité logicielle.
(3) Concurrence : La concurrence est la capacité de traiter plusieurs tâches en même
temps. Un système distribué comprend plusieurs ordinateurs, chacun ayant un ou
plusieurs processeurs. L'existence de plusieurs processeurs dans l'ordinateur peut être
exploitée pour effectuer plusieurs tâches en même temps. Cette capacité est cruciale
pour améliorer les performances globales du système distribué. Par exemple, un
mainframe doit gérer les demandes de plusieurs utilisateurs, chaque utilisateur
envoyant plusieurs demandes en même temps. Sans concurrence, les performances en
souffriraient, car chaque requête doit être traitée de manière séquentielle. Le logiciel
Pr Dr Jean-Pépé BUANGA MAPETU 36 Notes: Systèmes parallèles et distribués/UNIKIN
utilisé doit s'assurer qu'un accès à la même ressource n'entre pas en conflit avec
d'autres. Tous les accès simultanés doivent être synchronisés pour éviter des
problèmes tels que la perte de mise à jour (deux accès simultanés mettent à jour les
mêmes données, mais l'une des mises à jour est perdue), la lecture sale (un accès met
à jour les données lues par un autre accès, mais le premier échoue et affecte ce
dernier), récapitulatif incorrect (un ensemble de données est mis à jour par un accès
alors que l'ensemble est traité par un autre accès), et lecture non répétable (un accès lit
deux fois les données, mais les données sont modifiées par un autre accès entre les
deux lectures) .
(4) Évolutivité : L'évolutivité dans les systèmes distribués est la caractéristique où un
système et un logiciel d'application n'ont pas besoin de changer lorsque l'échelle du
système augmente. L'évolutivité est importante car la quantité de requêtes traitées par
un système distribué a tendance à augmenter plutôt qu'à diminuer. Afin de gérer
l'augmentation, du matériel et / ou des logiciels supplémentaires sont généralement
nécessaires. Cependant, cela ne signifie pas que le fait d'ajouter plus de matériel et
plus de logiciels dans le système résoudrait le problème de l'évolutivité. En fait, un
système qui n'est pas évolutif n'utilise pas efficacement le matériel et les logiciels
supplémentaires pour traiter les demandes. C'est parce que le système n'est pas conçu
pour se développer. Un tel système atteindra éventuellement ses limites de capacité de
traitement et ses performances commenceront à se dégrader. D'un autre côté, un
système est dit évolutif s'il offre des flexibilités pour croître en taille, tout en utilisant
efficacement le matériel et les logiciels supplémentaires.
(5) Tolérance aux pannes : La tolérance aux pannes est une caractéristique dans
laquelle un système réparti fournit une gestion appropriée des erreurs qui se sont
produites dans le système. Bien que coûteux, un système doté de bons mécanismes de
tolérance aux pannes présente un degré élevé de disponibilité. La disponibilité d'un
système distribué est une mesure de la proportion de temps pendant laquelle le
système est disponible pour utilisation. Une meilleure tolérance aux pannes augmente
la disponibilité. La tolérance aux pannes est obtenue en déployant deux approches: la
redondance matérielle et la récupération logicielle. La tolérance aux pannes est
également une approche pour éviter les pannes matérielles au moyen de la duplication.
(6) Transparence : La transparence est la dissimulation de la séparation des
composants dans un système distribué de l'utilisateur et du programmeur d'application
de telle sorte que le système est perçu comme un tout plutôt que comme un ensemble
de composants indépendants. Comme un système distribué est séparé par nature, la
transparence est nécessaire pour masquer tous les détails inutiles concernant cette
séparation des utilisateurs. Il existe huit formes de transparence dans les systèmes
distribués, à savoir: la transparence d'accès, la transparence de localisation, la
transparence du réseau, la transparence de la concurrence, la transparence de la
réplication, la transparence des pannes, la transparence de la migration, la
transparence des performances et la transparence de la mise à l'échelle. La
transparence d'accès permet d'accéder aux objets d'information locaux et distants en
utilisant des opérations identiques.
La transparence de localisation permet d'accéder aux objets d'information sans
Pr Dr Jean-Pépé BUANGA MAPETU 37 Notes: Systèmes parallèles et distribués/UNIKIN
connaître leur emplacement. La combinaison de la transparence d'accès et de la
transparence de localisation est connue sous le nom de transparence du réseau. Par
exemple, considérez une adresse e-mail amazigh@[Link]. Les utilisateurs
n'ont pas besoin de connaître l'adresse physique de la machine qui doit être contactée
pour envoyer un e-mail à cette adresse, ni de savoir comment l'e-mail est réellement
envoyé. Ainsi, une adresse e-mail a à la fois une transparence d'emplacement et
d'accès, c'est-à-dire une transparence du réseau.
Les autres différents types de transparence sont les suivants :
1) La transparence de la concurrence permet à plusieurs processus de fonctionner
simultanément à l'aide d'objets d'information partagés sans interférence entre eux.
2) La transparence de la réplication permet d'utiliser plusieurs objets d'information
pour augmenter la fiabilité et les performances sans connaissance des répliques
par les utilisateurs ou les programmes d'application.
3) La transparence des pannes masque les erreurs et permet aux utilisateurs et aux
programmes d'application de terminer leurs tâches même en cas de panne
matérielle ou logicielle.
4) La transparence de la migration permet de déplacer des objets d'information dans
un système sans affecter le fonctionnement des utilisateurs ou des programmes
d'application.
5) La transparence des performances permet à un système distribué d'être
reconfiguré pour améliorer les performances lorsque la charge fluctue.
6) La transparence de mise à l'échelle permet au système et à l'application de
s'étendre sans changer la structure du système et les algorithmes d'application.
2.7 Exemples des systèmes distribués
Le but de cette section est de fournir des exemples motivants de systèmes distribués
contemporains illustrant à la fois le rôle omniprésent des systèmes distribués et la
grande diversité des applications associées. Examinons quelques exemples
spécifiques de systèmes distribués pour illustrer davantage la diversité et même la
complexité de la fourniture de systèmes distribués aujourd'hui, comme suit.
Finance et commerce : La croissance du commerce électronique, illustrée par des
sociétés telles qu'Amazon et eBay, et les technologies de paiement sous-jacentes telles
que PayPal; l'émergence associée de la banque et du commerce en ligne ainsi que des
systèmes complexes de diffusion d'informations pour les marchés financiers.
Soins de santé : La croissance de l'informatique de la santé en tant que discipline,
l'accent étant mis sur les dossiers électroniques des patients en ligne et les questions
connexes de confidentialité; le rôle croissant de la télémédecine dans le soutien du
diagnostic à distance ou des services plus avancés tels que la chirurgie à distance (y
compris le travail collaboratif entre les équipes de soins); l'application croissante de la
technologie des réseaux et des systèmes embarqués dans la vie assistée, par exemple
pour surveiller les personnes âgées à leur domicile.
Éducation : L'émergence de l'apprentissage en ligne via, par exemple, des outils basés
Pr Dr Jean-Pépé BUANGA MAPETU 38 Notes: Systèmes parallèles et distribués/UNIKIN
sur le Web tels que les environnements d'apprentissage virtuels; soutien associé à
l'apprentissage à distance; soutien à l'apprentissage collaboratif ou communautaire.
Gestion de l'environnement : Utilisation de la technologie des capteurs (en réseau)
pour surveiller et gérer l'environnement naturel, par exemple pour fournir une alerte
précoce en cas de catastrophes naturelles telles que les tremblements de terre, les
inondations ou les tsunamis et pour coordonner les interventions d'urgence; la collecte
et l'analyse des paramètres environnementaux mondiaux pour mieux comprendre les
phénomènes naturels complexes tels que le changement climatique.
La société de l’information : La croissance du World Wide Web en tant que
dépositaire d’informations et de connaissances; le développement de moteurs de
recherche Web tels que Google et Yahoo pour effectuer des recherches dans ce vaste
référentiel; l'émergence de bibliothèques numériques et la numérisation à grande
échelle de sources d'information héritées telles que les livres (par exemple, Google
Books); l'importance croissante du contenu généré par les utilisateurs via des sites tels
que YouTube, Wikipédia et Flickr; l'émergence des réseaux sociaux via des services
tels que Facebook et MySpace.
2.8 Avantages et inconvénients
La tendance des systèmes distribués est motivée par les avantages potentiels qu'ils
pourraient apporter. Ces avantages sont:
(1) Partage: capacité qui permet aux systèmes qui le composent d'utiliser les
ressources de l'autre. Ce partage a lieu sur un réseau informatique connecté à chaque
système, en utilisant un protocole commun qui régit les communications entre les
systèmes. Le réseau et le protocole sont respectivement le moyen de communication
commun et le protocole commun qui facilitent le partage. Internet est un bon exemple
de système distribué. Chaque ordinateur qui souhaite utiliser et / ou partager des
ressources doit être connecté au réseau et comprendre TCP / IP.
(2) Extensibilité: capacité qui permet d'ajouter de nouveaux systèmes en tant que
membres du système global. Il est souvent impossible de prévoir toutes les ressources
qui seront jamais fournies. Cela influence également la capacité à déterminer le
niveau de puissance de traitement que les machines hôtes doivent avoir. Un système
distribué peut finir par fournir des ressources inutilisées sur des machines dont
l'utilisation est insuffisante. Une telle perte de temps et d'argent est résolue en donnant
la liberté d'ajouter des ressources partagées uniquement lorsqu'elles sont vraiment
nécessaires.
(3) Autonomie locale: un système distribué est responsable de la gestion de ses
ressources. En d’autres termes, cela donne à ses systèmes une autonomie locale de
leurs ressources. Chaque système peut appliquer des politiques, des paramètres ou des
contrôles d'accès locaux à ces ressources et services. Cela rend les systèmes distribués
idéaux pour les organisations dont la structure se compose d'entités indépendantes
situées à différents endroits. Par exemple, les sociétés multinationales peuvent avoir
leurs systèmes dispersés dans différents endroits, chacun gérant les affaires d'une
succursale particulière.
Pr Dr Jean-Pépé BUANGA MAPETU 39 Notes: Systèmes parallèles et distribués/UNIKIN
(4) Amélioration des performances: à mesure que le nombre de clients accédant à une
ressource augmente, le temps de réponse commence à se dégrader. Les méthodes
classiques de maintien du temps de réponse, par exemple la mise à niveau de la
machine hôte, peuvent être utilisées pour compenser cet effet. Ceci est encore
amélioré avec des techniques telles que la réplication, qui permet de copier les mêmes
ressources, et l'équilibrage de charge, qui distribue les demandes d'accès entre ces
copies. De plus, le nombre d'ordinateurs dans un système distribué profite au système,
en termes de puissance de traitement. En effet, la puissance de traitement combinée de
plusieurs ordinateurs fournit beaucoup plus de puissance de traitement qu'un système
centralisé. La limite à laquelle un seul ordinateur peut être installé avec plusieurs
processeurs interdit une augmentation sans fin de sa puissance de traitement.
(5) Amélioration de la fiabilité et de la disponibilité: les perturbations d'un système
distribué n'empêchent pas le système dans son ensemble de fournir ses ressources.
Certaines ressources peuvent ne pas être disponibles, mais d'autres sont toujours
accessibles. En effet, ces ressources sont réparties sur plusieurs ordinateurs où chaque
ressource est gérée par un ordinateur. Si ces ressources sont répliquées, la perturbation
peut avoir un impact minimal sur le système. En effet, les demandes peuvent être
détournées vers d'autres copies des ressources cibles.
(6) Réductions potentielles des coûts: Le premier avantage des systèmes distribués par
rapport aux systèmes centralisés est la rentabilité. Le moyen le plus rentable d'obtenir
un meilleur rapport prix / performances consiste à exploiter un grand nombre de
processeurs pour traiter les demandes. Une autre réduction potentielle des coûts se
produit lorsqu'un système distribué est utilisé pour gérer le traitement des demandes
partagées par plusieurs organisations.
Toutes ces organisations pourraient contribuer aux coûts d'installation et de
maintenance. Cela réduit les coûts par organisation par rapport à la configuration et à
la maintenance du système de manière indépendante.
Outre ces avantages, un système distribué présente les inconvénients suivants:
Dépendance au réseau: étant donné que tous les ordinateurs d'un système distribué
s'appuient sur un réseau pour communiquer entre eux, des problèmes sur le réseau
perturberaient les activités du système dans son ensemble. Cela est vrai en particulier
pour les problèmes physiques tels que les câbles réseau cassés, les routeurs, les ponts,
etc.
(1) Complexités: Un logiciel système distribué n'est pas facile à développer. Il doit
être capable de traiter les erreurs pouvant survenir à partir de tous les ordinateurs
composant le système distribué. Il doit également être capable de manipuler les
ressources des ordinateurs avec un large éventail d'hétérogénéités.
(2) Sécurité: un système distribué permet à ses ordinateurs de collaborer et de partager
des ressources plus facilement. Cependant, cette commodité d'accès pourrait être un
problème si aucun mécanisme de sécurité approprié n'est mis en place. Les ressources
privées seraient exposées à un plus large éventail de pirates potentiels, avec des accès
non autorisés lancés à partir de tous les ordinateurs connectés au système. En fait, un
système centralisé est généralement plus sécurisé qu'un système distribué.
Pr Dr Jean-Pépé BUANGA MAPETU 40 Notes: Systèmes parallèles et distribués/UNIKIN
2.9 Types de systèmes distribués
Les différents types de systèmes distribués à étudier sont les suivants: Systèmes
informatiques distribués, Systèmes d'information distribués et Systèmes embarqués
distribués.
2.9.1 Systèmes informatiques distribués
Une classe importante de systèmes distribués est celle utilisée pour les tâches de
calcul à haute performance.
Une distinction entre deux sous-groupes dans l'informatique en grappe, le matériel
sous-jacent consiste en une collection de stations de travail ou de PC similaires,
étroitement connectés au moyen d'un réseau local à grande vitesse, chaque nœud
exécute le même système d'exploitation.
La situation est tout à fait différente dans le cas de l'informatique en grille. Ce sous-
groupe se compose de systèmes distribués qui sont souvent construits comme une
fédération de systèmes informatiques, où chaque système peut relever d'un domaine
administratif différent et peut être très différent en ce qui concerne le matériel, les
logiciels et la technologie de réseau déployée.
(1) Cluster. Un cluster est un type de système parallèle et distribué, qui consiste en
un ensemble d'ordinateurs autonomes interconnectés fonctionnant ensemble comme
une seule ressource informatique intégrée. L'objectif principal du cluster est de fournir
aux applications des performances, une disponibilité, un équilibrage de charge et une
tolérance aux pannes supérieurs à ceux disponibles sur une seule machine. Une
caractéristique importante de l'informatique en cluster est que les nœuds du cluster
sont homogènes. Autrement dit, les nœuds utilisent le même matériel et le même
logiciel. Le cluster est physiquement situé sur un site unique et appartient à une seule
organisation. Dans la quasi-totalité des cas, il est utilisé pour la programmation
parallèle, dans laquelle un programme unique (à forte intensité de calcul) est exécuté
en parallèle sur plusieurs machines. Une partie importante de cet intergiciel est
constituée par les bibliothèques pour l'exécution de programmes parallèles. Nombre
de ces bibliothèques ne fournissent effectivement que des facilités de communication
avancées basées sur les messages, mais ne sont pas capables de gérer les processus
défectueux, la sécurité, etc.
(2) Grille de calcul (Grid computing). Une grille de calcul (Grid Computing) est une
architecture informatique dans laquelle les calculs peuvent être fractionnés et les
données peuvent être traitées en parallèle géographiquement sur un réseau distribué
d'ordinateurs en fonction de leur disponibilité, capacité, performances, coût et
exigences de qualité de service des utilisateurs. Les grilles sont généralement utilisées
pour résoudre des problèmes de calcul complexes qui nécessitent beaucoup de calculs
et ne nécessitent que de petites quantités de données pour chaque nœud de traitement.
Dans l'informatique en grille, les serveurs, le stockage et les réseaux sont combinés
pour former de puissants nœuds de ressources informatiques qui peuvent être
provisionnés dynamiquement selon les besoins. Les ressources du réseau sont des
Pr Dr Jean-Pépé BUANGA MAPETU 41 Notes: Systèmes parallèles et distribués/UNIKIN
ressources de partenaires ou de collaborateurs qui peuvent être partagées entre eux.
Les utilisateurs de l'informatique en grille sont les partenaires du réseau. En général,
les ressources de chaque partenaire constitueraient un cluster. L'objectif de
l'informatique en grille est de partager les ressources entre les collaborateurs.
(3) Cloud computing. Un Cloud computing est un type de système parallèle et
distribué constitué d'un ensemble de ressources interconnectées et virtualisées qui
sont provisionnées dynamiquement et présentées comme une ou plusieurs ressources
informatiques unifiées basées sur des accords de niveau de service établis par
négociation entre le fournisseur de services et les consommateurs. Avec la technologie
de cloud computing, les utilisateurs utilisent une variété d'appareils, y compris des PC,
des ordinateurs portables, des smartphones et des PDA pour accéder aux programmes,
au stockage et aux plates-formes de développement d'applications sur Internet, via les
services proposés par les fournisseurs de cloud computing. Les avantages de la
technologie de cloud computing comprennent des économies de coûts, une haute
disponibilité et une évolutivité facile.
2.9.2 Systèmes d'information distribués
Une autre catégorie importante de systèmes distribués se trouve dans les organisations
qui ont été confrontées à une multitude d'applications en réseau, mais pour lesquelles
l'interopérabilité s'est avérée être une expérience pénible. Bon nombre des solutions
intergicielles existantes sont le résultat d'une infrastructure dans laquelle il était plus
facile d'intégrer des applications dans un système d'information à l'échelle de
l'entreprise. Au fur et à mesure que les applications sont devenues plus sophistiquées
et ont été progressivement séparées en composants indépendants, il est apparu
clairement que l'intégration devait également se faire en permettant aux applications
de communiquer directement les unes avec les autres.
(1) Systèmes de traitement des transactions. Dans la pratique, les opérations sur
une base de données sont généralement effectuées sous la forme de transactions. La
programmation à l'aide de transactions nécessite des primitives spéciales qui doivent
être fournies soit par le système distribué sous-jacent, soit par le système d'exécution
du langage. Exemples typiques de primitives de transaction. La liste exacte des
primitives dépend des types d'objets utilisés dans la transaction. Dans un système de
messagerie, il peut y avoir des primitives pour envoyer, recevoir et transmettre du
courrier. Dans un système de comptabilité, elles peuvent être très différentes. READ
et WRITE sont toutefois des exemples typiques. Les déclarations ordinaires, les
appels de procédure, etc. sont également autorisés à l'intérieur d'une transaction.
(2) Intégration des applications d'entreprise. Plus les applications étaient
découplées des bases de données sur lesquelles elles étaient construites, plus il
devenait évident que des facilités étaient nécessaires pour intégrer les applications
indépendamment de leurs bases de données. En particulier, les composants
d'application devraient pouvoir communiquer directement entre eux et non pas
simplement au moyen du comportement de demande/réponse pris en charge par les
systèmes de traitement des transactions. Ce besoin de communication inter-
Pr Dr Jean-Pépé BUANGA MAPETU 42 Notes: Systèmes parallèles et distribués/UNIKIN
applications a donné naissance à de nombreux modèles de communication différents.
L'idée principale était que les applications existantes puissent échanger directement
des informations.
2.9.3 Systèmes pervasifs
Les systèmes distribués examinés jusqu'à présent se caractérisent essentiellement par
leur stabilité : les nœuds sont fixes et disposent d'une connexion plus ou moins
permanente et de qualité à un réseau. Dans une certaine mesure, cette stabilité est
réalisée par les différentes techniques permettant d'obtenir la transparence de la
distribution. Par exemple, il existe de nombreuses façons de créer l'illusion que les
composants ne tombent qu'occasionnellement en panne. De même, il existe toutes
sortes de moyens de dissimuler l'emplacement réel d'un nœud sur le réseau, ce qui
permet aux utilisateurs et aux applications de croire que les nœuds ne bougent pas.
Toutefois, les choses ont changé depuis l'introduction des dispositifs informatiques
mobiles et intégrés, qui ont donné naissance à ce que l'on appelle généralement les
systèmes omniprésents.
Comme leur nom l'indique, les systèmes pervasifs sont destinés à se fondre
naturellement dans notre environnement. Il s'agit naturellement de systèmes distribués.
Ce qui les rend unique par rapport aux systèmes informatiques et d'information décrits
jusqu'à présent, c'est que la séparation entre les utilisateurs et les composants du
système est beaucoup plus floue. Il n'y a souvent pas d'interface unique dédiée, telle
qu'une combinaison écran/clavier. Au lieu de cela, un système omniprésent est
souvent équipé de nombreux capteurs qui détectent divers aspects du comportement
de l'utilisateur. De même, il peut comporter une myriade d'actionneurs qui fournissent
des informations et un retour d'information, souvent même dans le but d'orienter le
comportement.
Pr Dr Jean-Pépé BUANGA MAPETU 43 Notes: Systèmes parallèles et distribués/UNIKIN
CHAPITRE 3. COMMUNICATION INTERPROCESSUS
La communication interprocessus est au cœur de l'informatique distribuée. Les
processus utilisateurs s'exécutent sur des machines hôtes qui sont connectées les unes
aux autres par l'intermédiaire d'un réseau, et le réseau transporte des signaux qui se
propagent d'un processus à l'autre. Ces signaux représentent des données.
La communication interprocessus est divisée en deux parties :
1) La mise en réseau : Il s'agit de la manière dont les processus communiquent entre
eux via les différentes couches de protocole. Les aspects importants de la mise en
réseau sont le routage, le contrôle des erreurs, le contrôle du flux,
l'authentification, etc. Il s'agit de la vue interne.
2) Vue de l'utilisateur : Les processus utilisateurs ont une vue abstraite de haut
niveau du moyen de communication interprocessus. Il s'agit de la vue externe. Un
utilisateur moyen ne se préoccupe pas de la manière dont la communication a lieu.
Les processus peuvent communiquer par l'intermédiaire d'un réseau local,
d'Internet ou d'une combinaison de ces moyens, ou par l'intermédiaire d'un espace
d'adressage partagé (virtuel), une abstraction créée sur un substrat de passage de
messages pour faciliter la programmation. La plupart des systèmes distribués
fonctionnels utilisent le modèle client-serveur. Quelques systèmes adoptent
également le modèle P2P de communication interprocessus, où il n'y a pas de
différence entre les serveurs et les clients. Les interfaces utilisateur reposent sur
les outils de programmation dont dispose un client pour communiquer avec un
serveur ou un pair pour communiquer avec un autre pair. Certains outils sont
généraux, tandis que d'autres sont propriétaires.
3.1 Processus et threads
Un processus est l'exécution d'un programme. Le système d'exploitation prend en
charge plusieurs processus sur un processeur, de sorte que plusieurs processus
logiques (LPs) peuvent s'exécuter sur le même processeur physique. Les threads sont
des processus légers. Comme un processus, chaque thread conserve un flux de
contrôle distinct, mais les threads partagent un espace d'adressage commun. Les
threads multiples améliorent la transparence de la mise en œuvre des clients et des
serveurs, ainsi que les performances globales. Dans un serveur multithread, lorsqu'un
thread est bloqué sur un événement, d'autres threads exécutent les opérations non liées
en attente. Dans les processeurs multicœurs, chaque cœur peut prendre en charge un
ou plusieurs threads. Les processeurs multicœurs d'aujourd'hui ont de 4 à 16 cœurs (et
ce nombre est appelé à augmenter), de sorte que ces processeurs peuvent prendre en
charge un grand nombre de threads.
3.2 Modèle client-serveur
Le modèle client-serveur est un modèle largement accepté pour la conception de
systèmes distribués. Les processus clients demandent un service et les processus
Pr Dr Jean-Pépé BUANGA MAPETU 44 Notes: Systèmes parallèles et distribués/UNIKIN
serveurs fournissent le service souhaité. Un exemple simple de communication client-
serveur est le service de noms de domaine (DNS) : les clients demandent les adresses
réseau des noms de domaine Internet et le DNS renvoie les adresses aux clients. Un
autre exemple est celui d'un moteur de recherche comme Google. Lorsqu'un client
soumet une requête concernant un document, le moteur de recherche consulte ses
serveurs et renvoie des pointeurs vers les pages web susceptibles de contenir des
informations sur ce document.
Il convient de noter que la désignation des clients et des serveurs n'est pas unique et
qu'un serveur peut être le client d'un autre serveur.
3.3 Les intergiciels
Les systèmes distribués complexes présentent des degrés importants d'hétérogénéité.
Les processus, les processeurs et les objets peuvent être dispersés n'importe où dans
un réseau. Pour simplifier la tâche de développement de logiciels, les utilisateurs ne
doivent pas se préoccuper de l'emplacement de ces entités ou du type de machines sur
lesquelles elles se trouvent. Les développeurs ne devraient pas avoir à se préoccuper
de l'intégration d'applications logicielles d'entreprise développées à des moments
différents, par des fournisseurs différents, ou même communiquant via des protocoles
différents. La couche logicielle qui simplifie la tâche consistant à relier des sous-
systèmes complexes entre eux ou à connecter des composants logiciels s'appelle
l'intergiciel. Il s'agit d'une extension des services offerts par le système d'exploitation
et se situe logiquement entre la couche application et la couche système d'exploitation
des différentes machines (figure 3.1).
Figure 3.1 Comprendre les intergiciels.
Avec la croissance rapide des applications distribuées, les services d'intergiciels sont
l'un des services qui se développent le plus rapidement. Il existe de nombreux services
Pr Dr Jean-Pépé BUANGA MAPETU 45 Notes: Systèmes parallèles et distribués/UNIKIN
dans cette catégorie. Certains services d'intergiciels importants traitent des questions
suivantes :
1. Comment un processus peut-il localiser un autre processus ou objet nommé
n'importe où sur Internet ?
2. Comment un processus envoie-t-il des requêtes à plusieurs bases de données
distribuées n'importe où sur Internet ?
3. Comment isoler les programmes d'application des différences entre les langages de
programmation et les protocoles de communication ?
4. Comment la sécurité de la communication est-elle garantie sans aucune
connaissance de la fiabilité des systèmes d'exploitation aux deux extrémités ?
5. Comment un appareil mobile personnel (comme le smartphone d'un patient) peut-il
passer au réseau 3G/4G pendant un voyage, puis à Bluetooth lorsqu'il se rapproche
d'un PC équipé de Bluetooth à la maison ?
3.3 Appel de procédure à distance
Considérons un serveur fournissant des services à un ensemble de clients:
(1) Dans un cadre trivial, lorsque les clients et le serveur sont des processus distincts
résidant sur la même machine, la communication n'utilise rien de plus qu'un appel
système. À titre d'exemple, supposons qu'un serveur alloue de la mémoire à un certain
nombre de processus simultanés. Le client peut utiliser deux procédures : allocate et
free. La procédure allocate(m) alloue m blocs de mémoire au client appelant en
renvoyant un pointeur sur un bloc libre de la mémoire. La procédure free(addr, m)
libère m blocs de mémoire de l'adresse désignée addr. Étant sur la même machine, la
mise en œuvre est simple.
(2) Dans un système distribué, il n'est pas garanti (et en fait, il est peu probable) que
les clients et les serveurs fonctionnent sur la même machine. Les appels de procédure
peuvent franchir les limites des machines et des domaines. Cela rend la mise en œuvre
de l'appel de procédure beaucoup plus complexe. Un appel de procédure à distance
(RPC) est un appel de procédure qui aide un client à communiquer avec un serveur
fonctionnant sur une machine différente qui peut appartenir à un réseau différent et à
un domaine administratif différent. La prise en charge de la mémoire partagée a
disparu. Toute implémentation de RPC doit prendre en compte le passage des
paramètres d'appel du client à la machine serveur et le retour de la réponse à la
machine client.
Le client qui appelle une procédure à distance se bloque jusqu'à ce qu'il reçoive le
résultat (ou un message signalant la fin de l'appel) du serveur. Notez que les clients et
les serveurs ont des espaces d'adressage différents. Pour aggraver les choses, les
pannes ne sont pas exclues. Pour assurer la transparence, l'appel du client est redirigé
vers une procédure d'attente du client dans son système d'exploitation local.
La fonction d'attente fournit l'interface d'appel de procédure locale à la fonction
distante. Tout d'abord, le stub client (1) rassemble les paramètres de l'appel dans un
message et (2) envoie le message au serveur. Ensuite, le client se bloque lui-même. La
tâche consistant à rassembler les paramètres de l'appel dans un message est appelée
Pr Dr Jean-Pépé BUANGA MAPETU 46 Notes: Systèmes parallèles et distribués/UNIKIN
"parameter marshaling" (mise en forme des paramètres).
Du côté du serveur, un stub de serveur gère le message. Son rôle est complémentaire
de celui du stub client. Le stub serveur décompresse d'abord les paramètres de l'appel
(c'est ce qu'on appelle l'unmarshaling) et appelle ensuite la procédure locale. Le
résultat est marshallé et renvoyé à la machine du client. Le stub client décompresse
les paramètres et renvoie le résultat au client (figure 3.2).
Figure 3.2 Un RPC.
3.4 Invocation des méthodes à distance
L'invocation de méthodes à distance (RMI) est une généralisation de RPC dans un
environnement orienté objet. L'objet réside sur la machine du serveur qui est
différente de celle du client. Il s'agit d'un objet distant. Un objet pour lequel l'instance
des données qui lui sont associées est répartie sur plusieurs machines est appelé objet
distribué. Un exemple d'objet distribué est un objet répliqué sur deux machines ou
plus.
Un objet distant est un cas particulier d'objet distribué dans lequel les données
associées sont disponibles sur une machine distante.
Pour se rendre compte de la portée de RMI (par rapport à RPC), rappelons la mise en
œuvre d'un RPC utilisant des sockets. Ainsi, l'état actuel de l'objet distant est copié et
transmis du serveur au client, les mises à jour nécessaires sont effectuées et l'état
modifié de l'objet est renvoyé au serveur. Si plusieurs clients tentent d'accéder
simultanément à l'objet distant et de le mettre à jour en invoquant des méthodes de
Pr Dr Jean-Pépé BUANGA MAPETU 47 Notes: Systèmes parallèles et distribués/UNIKIN
cette manière, les mises à jour effectuées par un client peuvent ne pas se refléter dans
les mises à jour effectuées par un autre client, à moins que ces mises à jour ne soient
sérialisées. En outre, la propagation de multiples copies de l'objet distant entre le
serveur et les différents clients consommera une grande partie de la bande passante du
réseau.
RMI résout ces problèmes de manière transparente. Les différentes classes du
paquetage [Link] permettent aux clients d'accéder à des objets résidant sur des hôtes
distants, comme s'il s'agissait d'une référence, au lieu d'une valeur. Une fois qu'un
client obtient une référence à un objet distant, il peut invoquer les méthodes de ces
objets distants comme s'ils existaient localement. Toutes les modifications apportées à
l'objet par le biais de la référence à l'objet distant sont reflétées sur le serveur et sont
disponibles pour les autres clients. Le client n'a pas besoin de savoir où se trouve le
serveur contenant l'objet distant ; il invoque seulement une méthode par
l'intermédiaire d'une interface appelée proxy. Le proxy est un stub client responsable
du marshaling des paramètres d'invocation et du unmarshaling des résultats du serveur
(figure 3.3). Du côté du serveur, un stub de serveur appelé squelette dématérialise les
invocations du client, invoque la méthode souhaitée et restitue les résultats au client.
Pour chaque client, il existe un proxy distinct, qui est un objet distinct dans l'espace
d'adressage du client.
Figure 3.3 Schéma d'invocation d'objets à distance.
3.5 Messages
La plupart des applications distribuées sont mises en œuvre en utilisant le passage de
messages. La couche de messagerie est logiquement située juste au-dessus de la
couche TCP/IP ou UDP/IP, mais en dessous de la couche d'application. La mise en
œuvre de sockets au niveau de la couche TCP ou UDP permet aux processus de
s'adresser les uns aux autres à l'aide d'adresses de socket spécifiques.
Pr Dr Jean-Pépé BUANGA MAPETU 48 Notes: Systèmes parallèles et distribués/UNIKIN
3.5.1 Messages transitoires et persistants
Les messages peuvent être transitoires ou persistants. Dans le cas d'une
communication transitoire, un message est perdu à moins que le destinataire ne soit
actif au moment de la livraison du message et ne le récupère pendant la durée de vie
de l'application. Un exemple est la communication interprocessus via des tampons de
messages dans un multiprocesseur à mémoire partagée.
Dans la communication persistante, les messages ne sont pas perdus, mais
sauvegardés dans une mémoire tampon en vue d'une éventuelle récupération
ultérieure. Les destinataires finissent par recevoir les messages, même s'ils étaient
passifs au moment de la remise du message. La communication par courrier
électronique en est un exemple. Les messages sont envoyés de la source à la
destination via une séquence de routeurs, chacun d'entre eux gérant une file d'attente
de messages.
3.5.2 Flux
Prenons l'exemple de l'envoi d'un clip vidéo d'un utilisateur à un autre. Un tel clip
vidéo est un flux d'images.
En général, les flux sont des séquences d'éléments de données. La communication à
l'aide de flux nécessite l'établissement d'une connexion entre l'expéditeur et le
destinataire. Dans les flux destinés aux applications multimédias, la qualité de service
est basée sur la relation temporelle (comme le nombre d'images par seconde ou le
délai de propagation) entre les éléments du flux, et sa mise en œuvre dépend de la
largeur de bande disponible sur le réseau, de l'espace tampon dans les routeurs et de la
vitesse de traitement des machines finales. L'un des moyens de garantir la qualité de
service consiste à réserver les ressources appropriées avant le début de la
communication. RSVP est un protocole de niveau transport permettant de réserver des
ressources au niveau des routeurs.
3.6 Services Web
Les services web offrent une manière différente d'utiliser l'internet pour une variété
d'applications basées sur des machines communiquant entre elles par le biais du
WWW. Il est possible de concevoir une application sur une machine en utilisant les
données du site web hébergé par une autre machine.
Par exemple, un utilisateur peut mettre en œuvre un service sur son smartphone en
utilisant le site web d'un service de transport urbain pour obtenir des informations sur
les derniers horaires de bus et programmer une alarme pour rappeler l'heure de départ
du bus à un arrêt particulier. Un autre utilisateur peut concevoir une application en
tirant des données du site web d'un restaurant populaire, de sorte qu'il recevra un
message texte chaque fois que son plat préféré pour le dîner figurera au menu. Les
services web sont une forme d'intergiciel qui aide à intégrer les applications. Ils
Pr Dr Jean-Pépé BUANGA MAPETU 49 Notes: Systèmes parallèles et distribués/UNIKIN
facilitent la communication entre les applications.
Aujourd'hui, la plupart des services web sont basés sur le langage XML, largement
utilisé pour la communication de données entre plates-formes, notamment le
protocole d'accès simple aux objets (SOAP), le langage de description des services
web (WSDL) et la spécification universelle de description, de découverte et
d'intégration (UDDI), ainsi que les services web Java.
(1) Le WSDL décrit l'interface publique du service web. Il s'agit d'une description de
service basée sur XML qui décrit comment un client doit communiquer en utilisant le
service web. Il s'agit notamment des liaisons de protocole et des formats de message
nécessaires pour interagir avec les services web répertoriés dans son annuaire. Un
client peut savoir quelles fonctions sont disponibles sur le service web et utiliser
SOAP pour appeler la fonction.
(2) SOAP permet d'envoyer un message unidirectionnel contenant des données
structurées d'un processus à un autre en utilisant n'importe quel protocole de transport
comme TCP, HTTP ou SMTP. L'échange de messages est terminé lorsque le
destinataire envoie une réponse à l'expéditeur. On peut utiliser une API Java pour une
implémentation RPC basée sur XML en utilisant SOAP pour effectuer des RPC sur
l'application serveur. Un moyen standard de faire correspondre les appels RPC aux
messages SOAP permet à l'infrastructure de traduire automatiquement les invocations
de méthodes et les messages SOAP au moment de l'exécution, sans avoir à redéfinir le
code autour de la plate-forme de services web.
(3) XML est pratiquement une norme omniprésente. L'attention se porte désormais sur
le niveau suivant de normes dérivées de XML-UDDI, WSDL et SOAP. La croissance
rapide des services web permettant d'accéder aux informations stockées dans diverses
bases de données suscite des inquiétudes quant à la protection de la vie privée.
3.7 Notification d’événements
Les systèmes de notification d'événements permettent d'établir une forme de
communication asynchrone entre des objets distribués sur des plates-formes
hétérogènes et ont de nombreuses applications. Les intergiciels de type "publish-
subscribe" en sont un exemple. Prenons l'exemple des tarifs aériens qui sont
régulièrement publiés par les différentes compagnies aériennes sur le WWW. Vous
prévoyez de passer des vacances à Hawaï et vous souhaiterez peut-être être informé
d'un événement lorsque le prix d'un vol aller-retour entre l'aéroport le plus proche et
Hawaï passe sous la barre des 400 dollars. Cet exemple illustre la nature de la
communication par publication et par abonnement.
Ici, vous êtes l'abonné de l'événement. Ni les éditeurs ni les abonnés ne sont tenus de
connaître quoi que ce soit les uns des autres, mais la communication est possible
grâce à un accord de courtage. Ces systèmes de notification d'événements sont
similaires aux interruptions ou aux exceptions dans un environnement centralisé. Par
définition, ils sont asynchrones.
Voici quelques autres exemples. Une maison intelligente peut envoyer un appel
téléphonique à son propriétaire en déplacement lorsque la porte du garage est ouverte,
Pr Dr Jean-Pépé BUANGA MAPETU 50 Notes: Systèmes parallèles et distribués/UNIKIN
qu'un robinet coule ou qu'il y a une panne de courant. Dans un environnement de
travail collaboratif, les processus peuvent reprendre la phase suivante du travail,
lorsque tout le monde a terminé la phase actuelle du travail - cela peut être notifié en
tant qu'événements. Dans une unité de soins intensifs d'un établissement médical, les
médecins peuvent définir les événements pour lesquels ils ont besoin d'être notifiés.
Les détenteurs d'actions peuvent vouloir être avertis lorsque le prix de leur action
préférée augmente de plus de 5 %. Une passagère d'une compagnie aérienne aimerait
être informée par une application sur son smartphone en cas de changement d'heure
de son vol de correspondance.
Apache River (à l'origine Jini développé par Sun microsystems) fournit un service de
notification d'événements pour les plateformes basées sur Java. Il permet aux abonnés
d'une machine virtuelle Java (JVM) de recevoir des notifications d'événements
intéressants provenant d'une autre JVM. Les composants essentiels sont les suivants
1. Une interface de génération d'événements, où les utilisateurs peuvent enregistrer
leurs événements d'intérêt.
2. Une interface d'écoute d'événements à distance qui fournit une notification aux
abonnés en invoquant la méthode notify. Chaque notification est une instance de la
classe d'événement à distance. Elle est transmise en tant qu'argument à la méthode
notify.
3. Les agents tiers jouent le rôle d'observateurs et aident à coordonner la diffusion
d'événements similaires à un groupe d'abonnés.
Le système d'exploitation iOS d'Apple, qui fonctionne sur les iPhones et les iPads,
utilise le service de notification push pour envoyer des notifications d'événements aux
utilisateurs par le biais d'un court message texte ou d'un octet sonore.
3.8 Virtualisation : INFORMATIQUE EN NUAGE
L'informatique en nuage (Cloud Computing) est un environnement dans lequel vos
données et/ou vos programmes ne sont pas stockés ou gérés par votre propre machine,
mais par un tiers : le nuage, qui offre ce service. Vous pouvez accéder à vos données
ou aux résultats de vos calculs par l'intermédiaire d'un navigateur qui fait partie de
tout système informatique. L'informatique en nuage est la convergence de plusieurs
technologies, comme l'informatique distribuée, l'informatique en grappe et les
services web.
Toutes les applications web sont désormais incluses dans l'informatique en nuage.
Beaucoup d'entre nous utilisent Google mail ou Yahoo mail pour stocker et consulter
leurs messages électroniques. Ces courriels sont stockés sur les serveurs gérés par les
entreprises respectives. Google Doc permet aux utilisateurs de télécharger, de
modifier et de récupérer des documents sur les serveurs de données de Google à des
fins de partage. YouTube héberge des millions de vidéos téléchargées par les
utilisateurs et nous permet de stocker et de partager nos vidéos avec d'autres sans frais.
Nombre d'entre nous utilisent régulièrement Flickr et Picasa pour télécharger et
partager des millions de photographies numériques personnelles. Les sites de réseaux
sociaux tels que Facebook permettent à leurs membres de publier des photos et des
Pr Dr Jean-Pépé BUANGA MAPETU 51 Notes: Systèmes parallèles et distribués/UNIKIN
vidéos qui sont stockées sur les serveurs du site.
3.8.1 Classification des services Cloud
Certaines plateformes Cloud offrent un mélange de développement propriétaire et de
paquets d'applications, tandis que d'autres sont simplement des services facturés. Pour
faire la distinction entre ces différentes formes, les services Cloud ont été classés en
logiciel-service (SaaS), plateforme-service (PaaS) et infrastructure-service (IaaS),
respectivement :
(1) SaaS (Software as a Service) : C'est le service le plus basique. Pensez à Google
Docs. La création d'un compte Google est gratuite. Une fois que vous avez un compte,
il vous suffit de vous connecter à [Link]/docs pour avoir instantanément accès à
un puissant traitement de texte, à une application de feuille de calcul et à un créateur
de présentations. Google met tous ces services à votre disposition et vous pouvez tout
gérer à partir du navigateur web sans rien installer d'autre sur votre machine. Dropbox,
[Link], etc. sont des applications qualifiées de SaaS et les services de base
sont gratuits.
(2) PaaS (Platform as a Service) : PaaS facilite le développement d'une application
qui fonctionnera dans un environnement cloud spécifique. Il est possible d'utiliser
l'infrastructure et les outils disponibles dans un environnement établi. Cela permet
également au développeur de mettre rapidement son application à la disposition d'un
large public. Par exemple, sur la plateforme Facebook, les développeurs peuvent
écrire de nouvelles applications et les mettre à la disposition des autres utilisateurs de
cette plateforme. Google Apps fournit des API et des fonctionnalités qui permettent
aux développeurs de créer des applications web en tirant parti de ses différents
services tels que les cartes et le calendrier. Ces services sont très pratiques pour
développer des applications web légères.
(3) IaaS (Infrastructure as a Service) : Il s'agit de la plateforme en nuage la plus
complète. Elle est principalement utilisée par les développeurs à temps plein, les
grandes entreprises ou les utilisateurs occasionnels qui ont des compétences en
informatique mais ne disposent pas de l'infrastructure nécessaire. Alors que SaaS
permet d'utiliser des applications en nuage et que PaaS vous permet de développer des
applications, IaaS vous fournit une infrastructure pour développer, exécuter et stocker
vos applications dans des environnements en nuage. L'avantage de l'IaaS est que les
développeurs disposent d'une capacité de stockage et d'une puissance de calcul
pratiquement illimitées, sans avoir de matériel physique sur place. Amazon EC2 est
un excellent exemple d'IaaS.
Avec la croissance de l'informatique en nuage, le nombre de centres de données (Data
Center) augmente également à un rythme rapide. Chaque centre de données est équipé
de milliers de processeurs dont la vitesse de calcul collective atteint le pétaflop, d'un
stockage virtuellement illimité et d'un réseau à grande vitesse. Nombre de ces centres
de données sont gérés automatiquement et à distance, sans la présence d'un opérateur
humain. L'énergie est un poste budgétaire important pour ces centres de données, de
même que la consommation d'eau nécessaire au refroidissement. L'énorme volume
Pr Dr Jean-Pépé BUANGA MAPETU 52 Notes: Systèmes parallèles et distribués/UNIKIN
d'eau nécessaire pour refroidir les fermes de serveurs à haute densité fait de la gestion
de l'eau une priorité croissante pour les opérateurs de centres de données. Un centre
de données de 15 MW peut utiliser jusqu'à 360 000 gal d'eau par jour.
3.8.2 MapReduce
Une caractéristique importante des systèmes distribués modernes est le grand volume
de données qu'ils sont censés traiter. Des photos et des enregistrements audio et vidéo
sont créés en permanence et transmis aux sites de réseaux sociaux. Amazon et eBay
traitent régulièrement d'énormes volumes de données provenant du monde entier. Les
moteurs de recherche Google, Yahoo et Bing traitent régulièrement d'énormes
quantités de données pour répondre aux requêtes des utilisateurs du monde entier. Les
moteurs de traitement de données massivement parallèles sont devenus indispensables
pour générer des réponses rapides dans ces scénarios. Pour traiter des volumes
massifs de données, Google a inventé MapReduce en 2004 et, en 2007, Yahoo l'a
intégré au projet open-source Hadoop, qui est essentiellement un système
d'exploitation permettant aux programmes MapReduce de s'exécuter sur des grappes
de calcul.
Les algorithmes MapReduce exploitent efficacement le parallélisme inhérent à de
nombreux problèmes à grande échelle ou à forte intensité de données. Pour concevoir
de tels algorithmes, il faut commencer par les deux opérations de base : map et reduce.
La fonction map applique une fonction spécifique à tous les éléments d'une liste, et
leur exécution est censée se dérouler en parallèle. Chaque processus ou thread se voit
attribuer une tâche de ce type. La fonction reduce est une opération d'agrégation qui
prend la sortie de l'opération map et l'agrège en un résultat final.
3.8.3 Hadoop
Dans le monde du parallélisme au niveau des grappes, les bibliothèques mettant en
œuvre l'interface de passage de messages (MPI), ou les extensions de langage comme
OpenMP pour le parallélisme à mémoire partagée, sont bien connues. Ces abstractions
logiques cachent de nombreux détails de synchronisation et de communication au
niveau du processus. Toutefois, pour une mise en œuvre harmonieuse de ces
abstractions, les développeurs doivent garder une trace de ces aspects, ainsi que de la
manière dont les ressources sont mises à la disposition des travailleurs. Cela
s'applique également à MapReduce. Apache Hadoop est une implémentation open-
source de l'infrastructure dont MapReduce a besoin.
Hadoop utilise l'architecture maître-esclave. Un nœud maître (également appelé
NameNode) reçoit le travail de l'utilisateur. Les données d'entrée sont découpées en
morceaux et stockées dans le système de fichiers distribués Hadoop (HDFS).
Physiquement, ces données sont réparties sur un grand nombre de nœuds dans le
système. Le nœud principal affecte les composants du travail (processus de
cartographie) aux différents nœuds esclaves (également appelés nœuds de données).
Chaque nœud esclave contribue au stockage local et à la puissance de calcul pour
Pr Dr Jean-Pépé BUANGA MAPETU 53 Notes: Systèmes parallèles et distribués/UNIKIN
résoudre le problème. Lorsque les nœuds esclaves ont terminé leurs tâches, ils
renvoient les résultats au maître. Ce dernier exécute le processus de réduction pour
agréger les éléments et générer le résultat. Si nécessaire, les nœuds esclaves peuvent
subdiviser la tâche et l'assigner à d'autres nœuds esclaves. Collectivement, une telle
mise en œuvre implique des milliers de nœuds de calcul et peut traiter des pétaoctets
de données. Les défaillances des nœuds de données sont automatiquement gérées dans
ce cadre. Hadoop est écrit en Java.
3.9 Agents mobiles
Un autre mode de communication entre les processus est possible grâce aux agents
mobiles. Un agent mobile est un morceau de code qui migre d'une machine à l'autre.
Le code, qui est un programme exécutable, est appelé script. En outre, les agents
transportent des valeurs de données, des arguments de procédure ou des états
intermédiaires qui doivent être transportés d'une machine à l'autre.
L'utilisation d'un langage interprétable comme Tcl facilite la prise en charge de la
communication mobile basée sur les agents sur des plates-formes hétérogènes.
Contrairement aux messages qui sont passifs, les agents sont actifs et peuvent être
considérés comme des messagers. La migration des agents est possible en suivant les
étapes suivantes
1. L'expéditeur écrit le script et appelle une procédure de soumission avec les
paramètres (nom, paramètres, cible). L'état de l'agent et les paramètres sont
rassemblés et l'agent est envoyé à la machine cible. L'expéditeur se bloque lui-même
ou poursuit une activité sans rapport sur son propre site.
2. L'agent arrive à destination, où un serveur d'agents le prend en charge. Le serveur
authentifie l'agent, dissocie ses paramètres, crée un processus ou un fil distinct et le
planifie pour l'exécution du script de l'agent.
3. Lorsque le script a terminé son exécution, le serveur met fin au processus de l'agent,
rassemble l'état de l'agent ainsi que les résultats du calcul, le cas échéant, et le
transmet à la destination suivante, qui peut être une nouvelle machine ou l'expéditeur.
Le choix de la destination suivante découle du script.
Contrairement à un RPC qui retourne toujours à l'expéditeur, les agents peuvent suivre
un itinéraire prédéfini ou prendre des décisions de routage autonomes. Ces décisions
sont utiles lorsque le processus suivant à visiter s'est arrêté et que l'agent risque d'être
piégé dans un trou noir. Les agents mobiles surmontent ainsi les limites de
l'architecture client-serveur traditionnelle.
3.10 Services de base de communication de groupe
Avec la croissance rapide des réseaux sociaux et du commerce électronique sur le web,
les activités de groupe ont considérablement augmenté ces dernières années. Voici
quelques exemples de groupes :
1) Le groupe d'étudiants diplômés d'une école secondaire au cours d'une année
donnée
Pr Dr Jean-Pépé BUANGA MAPETU 54 Notes: Systèmes parallèles et distribués/UNIKIN
2) Les amis d'une personne sur Facebook ou Twitter
3) Les clients d'un service de distribution vidéo
4) Un ensemble de serveurs répliqués formant un service hautement disponible.
Les services de communication de groupe comprennent (1) un service d'adhésion qui
maintient une liste des membres actuels en gardant une trace des personnes qui ont
rejoint le groupe et des membres qui ont quitté le groupe (ou se sont écrasés), et (2)
différents types de multidiffusion au sein du groupe.
Les membres du groupe peuvent utiliser ces multidiffusions comme primitives pour
mettre en œuvre différents types de services. Un exemple est la multidiffusion
atomique, qui garantit que, quelles que soient les défaillances, soit tous les membres
non défaillants reçoivent le message, soit personne ne le reçoit.
Un autre exemple est la multidiffusion ordonnée, où, en plus de la propriété
d'atomicité, tous les membres non défaillants doivent recevoir les messages dans un
ordre spécifique.
Pr Dr Jean-Pépé BUANGA MAPETU 55 Notes: Systèmes parallèles et distribués/UNIKIN
REFERENCES
(1) Ouvrages
(1) Roman Trobec et al.(2018), Introduction to Parallel Computing: From Algorithms
to Programming on State-of-the-Art Platforms, Springer Nature Switzerland AG.
(2) Thomas Rauber et al. (2010), Parallel Programming: For Multicore and Cluster
Systems, Springer-Verlag Berlin Heidelberg.
(3) George Coulouris (2012), Distributed systems: Concepts and Design, Fifth Edition,
Addison-Wesley.
(4) Sukumar Ghosh (2015), Distributed Systems: An Algorithmic Approach
Distributed Systems, Second Edition:Taylor & Francis Group, LLC.
(2) Article
(4) Maarten van Steen et al.(2016), A brief introduction to distributed systems,
Computing, DOI 10.1007/s00607-016-0508-7
Note de cours
(5) ANURADHA BHATIA (2015-2016), Parallel and Distributed Systems, CPC803,
Eighth Semester, Final Year Computer Engineering, Mumbai University