Académique Documents
Professionnel Documents
Culture Documents
THÈSE
présentée et soutenue publiquement le 27 Mai 2005
pour l’obtention du
par
Gilles Klein
Composition du jury
Chapitre 1
Plan détaillé
Chapitre 2
Introduction
Chapitre 1
Technologies de partage de ressources informatiques
i
Table des matières
Chapitre 2
Méthodes de conception orientées agents
Chapitre 3
Méthodes de représentations
Chapitre 1
Pourquoi une nouvelle méthode de conception de systèmes multia-
gents ?
Chapitre 2
Notre méthode de conception de SMA et ses hypothèses d’application
ii
2.2 Domaine d’application . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
2.3 Une rapide présentation de DOGS multiagent . . . . . . . . . . . . . . 74
Chapitre 3
La phase statique de notre méthode de construction de systèmes mul-
tiagents : HAMAC
Chapitre 4
La phase de redistribution dynamique de la répartition : ASMAA
iii
Table des matières
Chapitre 5
Un modèle d’agent centré autour de la distribution des charges et des
communications
Chapitre 6
Résultats obtenus
Chapitre 1
Introduction
Chapitre 2
Quelle clientèle pour un système de partage
Chapitre 3
Description des ressources partagées
iv
3.1 Description du système physique . . . . . . . . . . . . . . . . . . . . . 133
3.1.1 Les ressources informatiques . . . . . . . . . . . . . . . . . . . . 133
3.1.2 Le réseau de communications . . . . . . . . . . . . . . . . . . . 134
3.2 Description du système logiciel . . . . . . . . . . . . . . . . . . . . . . 135
3.3 Description des prérogatives des différents agents . . . . . . . . . . . . 137
3.3.1 Le Manager de machine . . . . . . . . . . . . . . . . . . . . . . 137
3.3.2 Les agents Tâches . . . . . . . . . . . . . . . . . . . . . . . . . 138
3.3.3 Les agents Sniffers . . . . . . . . . . . . . . . . . . . . . . . . . 140
Chapitre 4
Problèmes posés par un système de partage
Chapitre 5
Description du fonctionnement de la plateforme et état d’avancement
du prototypage
v
Table des matières
Chapitre 6
Les tests et les résultats obtenus
Bibliographie 179
vi
Table des figures
1.1 Un exemple de réseau, les carrés sont des routeurs, les points des sites
informatiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
1.2 Exemples d’architectures classiques . . . . . . . . . . . . . . . . . . . . . . 19
1.3 Un exemple d’architecture hiérarchique . . . . . . . . . . . . . . . . . . . . 20
1.4 Un exemple de “super cluster” de clusters . . . . . . . . . . . . . . . . . . . 30
1.5 Architecture de Napster . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
1.6 Représentations de deux protocoles de Gnutella : l’arrivée d’un nouveau
client et une recherche de fichier . . . . . . . . . . . . . . . . . . . . . . . . 33
1.7 Extrait de l’article cité ci-dessus, une schématisation de l’architecture de
Chord . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
1.8 Un exemple de clônage faible d’un objet O de classe C . . . . . . . . . . . 47
1.9 Un exemple de migration faible d’un objet O d’une classe C . . . . . . . . 49
3.1 Exemple d’analyse des tâches réalisée en utilisant des réseaux de Petri
récursifs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
3.2 Comment distribuer les tâches en fonction du réseau de Petri . . . . . . . . 84
3.3 Exemple de distribution de tâches entre deux types d’agents . . . . . . . . 88
3.4 Un modèle de communication entre agents à base de réseaux de Petri . . . 90
vii
Table des figures
viii
Première partie
1
Chapitre 1
Plan détaillé
Introduction/justification
La croissance de la puissance des machines s’arrête lorsque les réseaux de-
viennent plus puissants que les individus.
Répartition de la puissance
La puissance de calcul n’est aujourd’hui plus le fait des superordinateurs centralisés. Il
y a 30 ans 70 % de la puissance de calcul était le fait de gros systèmes. Aujourd’hui la
multiplication des ordinateurs personnels rend la puissance de calcul de la catégorie des
superordinateurs négligeable. En fait, la majorité de la puissance de calcul actuelle est
comprise dans les cartes à puces qui sont infiniment moins puissantes que les ordinateurs
mais infiniment plus nombreuses.
La plupart des ordinateurs sont largement sous-utilisés (d’après [FPR95] et [TL89],
le taux d’occupation des processeurs oscille entre 32 et 93 %) et la plupart de ceux qui
sont poussés jusqu’à leurs limites ne le sont en fait que quelques heures par jour au plus.
Conclusion
Les deux paragraphes précédents mettent en avant un paradoxe : la puissance de calcul
du parc informatique planétaire est sous-employée et en même temps, la plupart des
3
Chapitre 1. Plan détaillé
Ainsi,
la première partie de ce travail, l’état de l’art présente l’environnement scientifique qui
enveloppe nos travaux. Il traite donc de plusieurs sujets (parfois très différents), puisqu’il
faut rendre compte des différentes avancées dans les différents domaines auxquels touche
ce travail. L’état de l’art est composé de deux parties fondamentalement distinctes :
– L’état de l’art en matière d’outils de partage et de distribution de charge, qui nous
permet d’éclairer l’environnement scientifique et l’intérêt de ce travail. Après quoi,
nous présentons l’état d’avancement des méthodes de conception de systèmes muli-
tagents.
– Le deuxième chapitre de cette partie présente l’état de l’art dans différents domaines
non pas directement liés à notre propos mais aux outils que nous utilisons pour
surmonter les différentes difficultés présentées par notre travail.
4
Comme l’un de nos buts était de construire un système de partage de ressources
entre utilisateurs, il est tout à fait logique de s’intéresser aux seuls vrais outils de
partage à grande échelle utilisés à l’heure actuelle.
2. Architectures agents Dans cette section, nous nous intéressons aux systèmes de dis-
tribution de charges utilisant des technologies agents. C’est un point intéressant
puisque les SMA sont “naturellement distribués”. Cependant, construire des “sys-
tèmes agents” distribués présente des spécificités. Pour pouvoir présenter ces outils,
nous devons nous arrêter sur les Systèmes Multiagents et sur diverses technologies
qui leurs sont associées.
– Les Agents et les SMA
Dans cette partie, nous décrivons les agents informatiques et les systèmes multia-
gents.
– Quelques applications caractéristiques des SMA
Nous présentons plusieurs visions des SMA, puisque selon les applications, un
système multiagent peut être un outil de résolution de problèmes distribué (mais
aussi un outil de résolution de problèmes distribués. . . ), une “plateforme de ren-
contres”.
– Le code et les agents mobiles
Nous présentons ensuite rapidement les technologies de code mobile, les principes
de la mobilité, le clonage faible, la mobilité faible, la mobilité forte. Après quoi,
nous présentons les applications de la mobilité aux technologies agents sous la
forme des systèmes d’agents mobiles.
– Architectures de partage basées sur les technologies agents
Nous présentons, ici, quelques utilisations des SMA dans le domaine des outils de
partage de ressource.
M
éthodes de conception orientées agents Dans ce chapitre, nous présentons les méthodes
de conception de systèmes multiagents (SMA). Cette présentation se trouve dans cette
section pour des raisons car, dans la deuxième partie, nous présentons une méthode de
conception de SMA. Cependant, son contenu s’appuie sur la présentation des technologies
agents qui se trouve dans la section Outils.
Cette section se sépare en trois sous-sections :
– La description des interactions et des communications,
– La description des différentes méthodes de conception de SMA classiques ainsi que
la mise en exergue de leurs limites,
– Les spécificités de la programmation et de l’implantation des SMA.
Méthodes de représentation
5
Chapitre 1. Plan détaillé
6
La deuxième hypothèse primordiale pour la définition d’un système de partage est la
nature des produits partagés (on ne partage pas un gâteau et un jouet de la même fa-
çon), nous devons donc décrire les ressources que nous comptons partager car c’est une
hypothèse fondamentale du fonctionnement d’une plateforme de partage.
De ces hypothèses, nous allons déduire une esquisse de l’architecture de notre système,
puis les différentes caractéristiques des différents agents que nous concevons pour remplir
les différentes tâches nécessaires au bon fonctionnement de la plateforme (qui a été conçue
en suivant un processus similaire à celui décrit dans la partie 2, même si la nature de
l’application ne rentrait pas dans les hypothèses de la partie 2).
Conclusion
Nous concluons sur l’impact du partage sur “le monde” de l’informatique et nous ouvrons
les perspectives d’unification des deux parties principales de ce document.
7
Chapitre 1. Plan détaillé
8
Chapitre 2
Introduction
9
Chapitre 2. Introduction
Dans ces conditions, il est logique de tenter de partager les ressources informatiques.
En effet, la plupart des ordinateurs (d’une société, d’une organisation ou même d’une
communauté d’utilisateurs) sont sous-utilisés à chaque instant, alors qu’un petit nombre
d’entre eux est dans le même temps surchargé. Plutôt que d’investir dans un meilleur
matériel, il serait préférable de s’associer de façon à profiter de la puissance de calcul
inutilisée des autres postes.
Les travaux des domaines associés au grid computing [FK99] ou à la programmation
de clusters [BFG+ 00] à plus ou moins grande échelle tendent vers ce but : utiliser au
mieux toutes les ressources informatiques même si elles sont distantes. Les ordinateurs
multiprocesseurs sont toujours hors de portée de la plupart des utilisateurs. Pourtant
l’informatique distribuée se démocratise : les clusters de PCs [Edi00] mettent les sys-
tèmes parallèles à la portée des petites entreprises et même de certains particuliers aux
usages spécifiques. Il faut de plus noter que certaines compagnies ont envisagé d’utiliser
la puissance des ordinateurs connectés aux réseaux de partage de fichiers P2P (peer-to-
peer) [Bor02]. Si la croissance continue de la puissance des processeurs limite l’intérêt des
ordinateurs multiprocesseurs pour la plupart des usages (ils nécessitent des applications
spécifiques pour exprimer tout leur potentiel et sont souvent à la fois encombrants et diffi-
ciles à concevoir), nous pouvons penser que le partage des ressources promet à terme que
la plupart des utilisateurs d’ordinateurs utiliseront bientôt des ressources “distantes” et
pourront accéder à la puissance de calcul de plusieurs processeurs au travers d’un réseau.
Il faudra donc, à terme que les applications même simples, destinées aux particuliers soient
conçues pour pouvoir être distribuées efficacement car cela deviendra un critère important
d’efficacité des programmes informatiques et ce quel que soit leur public.
Cependant, pour pouvoir profiter pleinement de cette manne de puissance de calcul
inutilisée, plusieurs considérations doivent être prises en compte :
– Les applications doivent être conçues de façon à pouvoir être distribuées. Il est
en effet inutile de distribuer une application séquentielle sans revoir son code. Il
faut de plus noter que même si plusieurs tâches d’une application peuvent être
exécutées en parallèle, il faut prendre en compte le coût des communications : si
deux processus physiquement distants partagent trop de ressources, il se peut que les
communications entre ces deux processus soient tellement coûteuses qu’elles freinent
l’exécution de l’application au lieu de l’accélérer.
– Il est de plus nécessaire de concevoir des systèmes informatiques qui permettent de
distribuer les processus sur les ordinateurs inutilisés tout en garantissant le respect
de l’intégrité, de la sécurité et de la confidentialité, non seulement des sites partagés
mais aussi des processus migrants. Ces “plateformes de partages” doivent de plus
prendre en compte la diversité des systèmes informatiques, avec leurs qualités et leurs
limites mais aussi la diversité des applications informatiques et de leurs besoins.
Les systèmes issus du grid computing ne répondent en général pas à toutes ces attentes.
Nous allons tenter, dans ce document, de répondre autant que faire se peut à ces différentes
attentes. Nous ne prétendons pas construire une vision universelle de la construction
d’applications réparties. Nous nous bornerons donc à tenter de donner une démarche
efficace pour construire des applications multiagents distribuées efficaces, puis en utilisant
ces mêmes agents, nous avons construit un système de partage de ressources informatiques.
D’une certaine façon, au cours de ce travail, nous allons revenir aux origines des systèmes
10
multiagents, même si ce sont des origines un peu oubliées.
Les systèmes multiagents (SMA) sont généralement considérés comme tenant du do-
maine de l’intelligence artificielle. Cependant on peut dire que ces systèmes se situent
plutôt à l’intersection entre l’intelligence artificielle, la programmation à base d’objets et
de composants et de l’informatique distribuée. Tout au long de ce mémoire nous allons
nous concentrer sur cette troisième spécificité. Plutôt que de considérer les agents comme
de l’IAD (Intelligence Artificielle Distribuée), nous nous plaçons ici, en quelque sorte, du
point de vue de l’informatique distribuée cognitive.
Au cours de ce document, nous nous intéresserons successivement :
– à la distribution physique des systèmes multiagents. Nous tenterons de construire
une méthode systématique permettant de construire un SMA distribué efficace ;
– puis nous pousserons encore plus loin vers le domaine de l’informatique distribuée
en utilisant les agents comme outils pour encapsuler des processus destinés à être
distribués sur un réseau en suivant une problématique proche de celle des systèmes
peer-to-peer, de la programmation de clusters ou du grid programming.
Ces deux problématiques sont liées : il s’agit toujours de tenter d’utiliser au mieux les
ressources informatiques distribuées qui sont caractéristiques des systèmes informatiques
d’aujourd’hui. Les buts de ce travail sont donc intimement liés à ceux des recherches dans
le domaine du grid, des clusters ou des systèmes peer-to-peer ; néanmoins, ils utilisent
des technologies caractéristiques des systèmes multiagents, du code mobile, et même à
terme de la programmation évolutionniste ou de l’apprentissage à cause de la nature
terriblement changeante des systèmes étudiés. Cependant, pour pouvoir utiliser les agents
pour distribuer des charges encapsulées dans des agents de façon à respecter les hypothèses
citées plus haut, il est nécessaire d’utiliser au mieux les caractéristiques des agents de
façon à améliorer les performances à la fois individuelles (de chaque agent) et collective
(du système en général).
L’un des principaux avantages de la “programmation agents” est l’autonomie qui ca-
ractérise théoriquement les agents. Cette autonomie devrait permettre une distribution
relativement simple d’un “programme agent” sur un système complexe. Les agents ap-
paraissent donc très adaptés à la distribution et au partage de charge sur un système
multiprocesseurs.
En réalité, répartir des agents sur un système distribué n’est pas simple, et ce, parce
que les systèmes multiagents sont aussi très dynamiques et donc assez imprévisibles. Dès
lors, la distribution de charge multiagent doit être dynamique elle aussi. Cependant les
méthodes habituelles de distribution dynamique de charge s’adaptent mal aux agents. Le
fait que chaque processeur observe sa pile et se décharge de certains processus en fonction
de son encombrement réduit considérablement l’indépendance et l’autonomie des agents.
en supposant que le système d’équilibrage de charge ne sépare pas les processus d’un
même agent (ce qui briserait son intégrité), cela revient, d’une certaine façon, à ce que
les agents soient “baladés” entre les processeurs. Dans notre cas, cela pose un problème
plus grave : cela rend très difficile de garantir l’intégrité et la confidentialité des agents
distants. Les agents devraient choisir seuls de migrer et vers quelle destination.
Il faudrait en fait que les agents aient les moyens de décider par eux-mêmes de mi-
grer selon leurs besoins et les exigences de leur hôte du moment. C’est d’autant plus
évident que, dans un système hétérogène, les services proposés par les différents ordina-
11
Chapitre 2. Introduction
teurs peuvent être très divers. Ce type d’indépendance exige un niveau d’indépendance
supérieur de la part des logiciels : la liberté de mouvement pour les agents.
Cette autonomie est très exigeante. Les agents ne doivent pas seulement être capables
de migrer par eux-mêmes mais aussi capables de décider quand migrer et quand demander
une aide locale (dans le cas où la migration permet d’obtenir une ressource spécifique).
De plus, comme l’environnement des agents (c’est-à-dire le système multiagent distribué)
sera probablement très dynamique et qu’il sera très difficile de prédire ses tendances
lors de la phase d’implémentation, les agents devront être capables de s’adapter à un
environnement perpétuellement en évolution. Cela signifie qu’ils pourraient être forcés
d’apprendre comment et quand migrer en fonction de l’état du système.
Pour être réellement capable de créer des agents qui puissent migrer au sein d’un
système distribué de façon à répartir la charge entre les différents composants de ce
système et pour accéder à certaines ressources physiquement situées de façon à remplir la
tâche qui leur a été donnée, nous devons construire des agents mobiles dotés de capacités
d’analyse, voire d’apprentissage concentrées sur la recherche d’une réponse à la question
“où vais-je aller ensuite ?”
Avant de décrire notre méthode de conception de systèmes multiagents destinés à être
physiquement répartis sur des systèmes multiprocesseurs ou de construire notre système
de distribution de charge, nous allons décrire les différentes technologies soit que nous
utilisons soit dont nous nous inspirons dans nos buts ou dans nos outils. Nous allons
donc ouvrir ce document par un chapitre consacré à différentes techniques très diverses
et parfois sans liens apparents entre elles.
– Nous aborderons pêle-mêle les technologies liées au partage et à la distribution de
charge (“load-balancing”, “clusters”, “grid computing” et les systèmes de partage de
fichiers de pair à pair (P2P)).
– La programmation évolutionniste, puisque les méthodes qui lui sont associées se-
raient, comme nous l’avons dit très adaptées au milieu en perpétuelle évolution
comme les ordinateurs.
– Les technologies agents, aussi bien les agents eux-mêmes que les systèmes multia-
gents. Il était nécessaire de s’arrêter suffisamment sur ces derniers car les agents
et les SMA sont non seulement l’outil mais aussi le sujet de notre travail (puisque
nous nous sommes intéressés aux façons de les distribuer correctement sur un sys-
tème multiprocesseur dont les communications pourraient être coûteuses (comme
les clusters ou les systèmes à plus large échelle).
– Enfin, nous devons nous arrêter sur les technologies dites de “code mobile” et plus
précisément sur les agents mobiles puisqu’il est nécessaire d’utiliser la mobilité pour
partager des ressources et distribuer des charges non définies a priori.
12
Deuxième partie
13
Chapitre 1
15
Chapitre 1. Technologies de partage de ressources informatiques
réseau fonctionnant comme une seule machine capable de calculs parallèles. Les deux so-
lutions ne sont pas fondamentalement différentes puisqu’un ordinateur multiprocesseur
n’est pas autre chose qu’un réseau de multiprocesseurs. Cependant, les architectures de
ces réseaux de processeurs sont spécifiquement conçues dans le but d’améliorer les perfor-
mances du système multiprocesseur, alors que les architectures des réseaux d’ordinateurs
se basent généralement sur une architecture IP qui a d’autres buts (se référer au chapitre
sur les couches de réseau et de transport dans [Tan03] et dans [Puj02] aux chapitres
architectures de réseau et ceux sur les réseaux TCP et les réseaux Ethernet). Nous avons
représenté un réseau routé sur la figure 1.1, on peut comprendre que l’efficacité d’une hy-
pothétique distribution de charge est secondaire devant la redondance des communications
et la volonté de minimiser les goulots d’étranglement.
Fig. 1.1 – Un exemple de réseau, les carrés sont des routeurs, les points des sites infor-
matiques
16
1.1. Architectures issues des systèmes distribuées
C’est pour cette raison que si les ordinateurs multiprocesseurs ont des architectures
très particulières (hypertoriques, hypercubiques, en étoile . . . ) beaucoup plus efficaces que
celles des réseaux d’ordinateurs qui ont en fait celles des intranets, extranets . . . servant
de base à ces systèmes informatiques distribués.
17
Chapitre 1. Technologies de partage de ressources informatiques
simplement leur arrivée. Dans le cas des ordinateurs multiprocesseurs, ces deux ques-
tions se posent peu. Les connexions entre les microprocesseurs sont telles que l’on
peut faire l’hypothèse de la sécurité du réseau et de la synchronisation des messages.
Cette hypothèse peut être dangeureuse mais elle est assez valide au vu de la qualité
des communications internes à ces machines et des distances considérées (au plus
quelques dizaines de centimètres).
– Les différentes architectures :
Nous allons présenter rapidement quelques topologies classiques des systèmes mul-
tiprocesseurs [BP97]. E. Billard et J. Pasquale calculent les distances aux seins de
ces différentes topologies pour pouvoir prendre en compte la proximité de façon à
minimiser le coût des communications par exemple. Nous allons montrer dans la
figure 1.2 un exemple de chacun des cas suivants :
– En anneau
– En étoile
– En hypertor
– En hypercube
18
1.1. Architectures issues des systèmes distribuées
segment
étoile
grid
anneau clique
19
Chapitre 1. Technologies de partage de ressources informatiques
20
1.1. Architectures issues des systèmes distribuées
Cependant, certaines différences qui peuvent sembler cosmétiques ont une importance
capitale t peuvent entraîner des divergences majeures :
– On construit l’ordonnancement des tâches sur les machines-outils pour chaque tra-
vail donné à " l’application " ensemble de machines-outils alors que l’on désire
construire un système d’ordonnancement de tâches informatique liée à l’application
en général et non pas à chacune de ses applications spécifiques. D’autant plus que
l’on ne connaît pas toujours a priori l’ensemble des sous tâches nécessaires à la
résolution de chaque utilisation de l’application distribuée,
– Les différentes tâches d’une machine-outil sont très clairement définies alors que
pour distribuer une application, il faut d’abord la couper,
– Les sous tâches d’une applications informatique doivent communiquer entre elles car
l’état de certaines d’entre elles peut influer sur celle des autres.
Ces différences sont capitales, en effet, pour connaître à coup sûr toutes les tâches d’une
application, il faut la dérouler entièrement, cela ne pose pas de problème lorsque la tâche
consiste en le déroulement complet d’un algorithme non récursif, dans d’autres cas, cela
peut tout simplement consister en l’exécution complète de la tâche, ce qui rend la distri-
bution statique impossible. De la même façon, il faut répondre à la question : comment
couper les tâches ? en effet, chaque processeur généraliste peut réaliser toutes les tâches
que font les autres et la granularité des tâches informatique est extrêmement petite. Or
comme nous le rappelons, les communications entre différentes tâches distantes ont un
coût non négligeable, il faut donc concilier le gain dû à la distribution et le coût des
communications [ESHH01].
Cependant les méthodes d’ordonnancement de tâches peuvent être très utiles si elles
sont utilisées à bon escient (par exemple pour construire un système de distribution de
charge dynamique voir plus loin).
21
Chapitre 1. Technologies de partage de ressources informatiques
[Maz01].
La distribution de charge peut être réalisée selon deux modèles différents, l’un statique
et l’autre dynamique. Dans le premier cas, chaque processus du programme s’exécute sur
une machine choisie non pas au début de son exécution mais lors de la phase d’implémen-
tation du système. Cette méthode demande une connaissance parfaite a priori du poids
et des besoins de chacun des différents processus. Ce besoin est rarement satisfait dans
le cas de programmes et d’applications complexes et il n’est jamais satisfait si le système
interagit de façon importante avec l’extérieur (utilisateurs, phénomènes physiques . . . ).
Même dans le cas où la connaissance est parfaite, les algorithmes de distribution tirés des
méthodes d’optimisation exigent des approximations qui peuvent entraîner des différences
notables de performances entre la distribution “théoriquement parfaite” et la distribution
effectivement optimale. [12] Il devient de plus très difficile d’assurer un minimum de sta-
bilité en cas de panne d’une machine puisque le système est prévu pour fonctionner en
suivant une distribution très précise.
Il est donc en général nécessaire de construire des systèmes capables de distribuer la
charge de travail dynamiquement, c’est-à-dire des systèmes qui placent les processus sur
un site quand ils apparaissent, en fonction de la charge instantanée et qui les déplacent
si la situation change. Pour obtenir ce résultat, plusieurs approches sont possibles. Ce-
pendant on considère en général la distribution de charge (dynamique comme statique)
comme un problème d’optimisation que l’on résout en utilisant les méthodes de recherche
opérationnelle.
La recherche opérationnelle et les méthodes d’optimisation offrent un grand nombre
d’algorithmes qui apportent une solution parfaite au problème de distribution statique de
charge à diverses vitesses, cependant le problème est NP-difficile, ces méthodes ne sont
donc que des heuristiques plus ou moins efficaces. La distribution dynamique de charge
peut être envisagée de différentes façons mais elle est souvent traitée comme un problème
de distribution de charge statique régulièrement réactualisée. Un serveur arrête le système,
demande à chacun des processeurs la taille de sa pile et ses priorités puis redistribue les
tâches de la meilleure façon possible. Chaque réallocation des charges est beaucoup plus
rapide qu’un calcul complet d’allocation de charge (comme dans le cas statique) car seules
les piles des processeurs sont prises en compte. Ces méthodes permettent de construire
des systèmes distribués traitant des problèmes non déterministes (ou trop complexes pour
être complètement analysés) de façon efficace car les tâches sont distribuées plus ou moins
“comme elles viennent”. La contrepartie de cette efficacité est que la distribution elle-même
consomme de la puissance de calcul et force le système à des arrêts intermittents ce qui
ralentit tout le programme d’autant plus que cette réallocation n’est pas facile à réaliser.
22
1.1. Architectures issues des systèmes distribuées
Distribution centralisée
Par définition, une distribution de charge statique est construite avant l’implémentation.
On peut donc considérer que c’est un processus centralisé puisqu’elle n’est pas construite
sur les processeurs du système distribué. Au contraire, une distribution de charge dyna-
mique peut être répartie ou centralisée. Un système de distribution de charges centralisé
comprend un hôte spécifique qui distribue et redistribue les charges sur les différents
processeurs en fonction de l’encombrement de ces derniers ou d’autres critères.
Le serveur (c’est à dire l’hôte chargé de répartir les tâches entre les différents proces-
seurs) doit avoir une connaissance correcte et régulièrement remise à jour de la charge de
chacun des processeurs. Pour cela, il devient nécessaire que les différents processeurs com-
muniquent leur état très régulièrement au serveur. Ces communications ne sont pas très
coûteuses sur un superordinateur, mais elles peuvent devenir un réel frein sur un système
plus lent (comme un extranet, par exemple), enfin elles seraient simplement impossibles
sur un système ouvert à grande échelle. De plus comme nous l’avons déjà dit, le calcul
d’une solution au problème d’optimisation associé au système partagé est un problème
NP-complet par rapport au nombre de processeurs [BF96] même si certaines heuristiques
permettent de l’accélérer. Enfin, dans un système ouvert, un serveur centralisé pose un
problème puisque son bon fonctionnement est absolument indispensable au bon fonction-
nement du système dans son ensemble. On ne peut simplement pas gérer un système de
partage à grande échelle de façon centralisée. Il faut de plus noter qu’un système centra-
lisé risque de ne pas être adapté à la gestion d’un système ouvert car chaque ordinateur
se connectant devrait commencer par s’inscrire auprès du serveur ce qui peut être très
coûteux et même entraîner la surcharge de ce dernier qui utiliserait toute sa puissance de
23
Chapitre 1. Technologies de partage de ressources informatiques
calcul pour gérer les entrées et les sorties. Il paraît donc logique d’utiliser un système de
distribution de charge réparti pour gérer un système à la fois large et ouvert.
Distribution partagée
Cependant ces systèmes sont difficiles à construire, une solution de distribution de
charge demande une connaissance globale du système. Pour construire un système distri-
bué de répartition de charge efficace, le plus simple est donc de partitionner le système
en régions et de choisir au sein de chaque région un serveur local qui gérera de façon
centralisée un système qui aura été réduit d’échelle [AG91].
Ce type de solutions ne permet pas de construire un système vraiment distribué. On
se borne ici à réduire l’échelle du système multiprocesseur pour le ramener à une taille
gérable de façon centralisée. Cette solution peut être suffisante dans certains cas d’autant
plus qu’elle a été adaptée à la gestion des systèmes ouverts [BF96]. Cependant cette
méthode présente de sévères limites :
– La connaissance de chaque serveur est limitée. Il se peut qu’il puisse communiquer
avec les autres serveurs par exemple pour permettre la distribution de charge non
pas au sein d’une seule région mais entre régions plus ou moins chargées, mais dans
ce cas il faut gérer la distribution de charge entre régions ce qui exigerait un “super
serveur” de “super région” qui gérerait la distribution au niveau global comme les
serveur de chaque région gère la gère au niveau local. On construit dès lors une
hiérarchie pyramidale à la fois complexe et coûteuse (puisqu’un grand nombre de
machines doivent gérer des problèmes complexes), peu sûre (si le serveur de plus
haut niveau a un problème tout le système s’arrête. . . ) et en général sujet à tous
les défauts des systèmes centralisés. Si par contre, les régions ne communiquent pas,
le système risque d’avoir du mal à s’adapter (certaines régions seront surchargées
alors que d’autres seront complètement vides).
– L’existence de sous régions présente aussi quelques problèmes car tous les ordinateurs
ne sont pas équivalents. Dans un système multiprocesseur hétérogène (comme le
parc informatique d’une société ou d’un laboratoire), certaines tâches doivent être
données à un certain type d’ordinateur (parce qu’ils offrent des services spécifiques
ou parce qu’elles ont des caractéristiques techniques particulières). Construire une
architecture permettant de gérer les relations interrégionales peut être difficile.
– La troisième limite de ces méthodes a déjà été entr’aperçue plus haut, elle concerne
la sécurité du système dans son ensemble. Le (ou les) serveur(s) est une cible fa-
cilement identifiable pour une attaque car ils sont nécessairement connus de tous
les hôtes et de tous les programmes. Dans le cas d’un serveur unique, si le serveur
s’arrête, l’application entière doit être arrêtée. Cependant dans le cas d’un système
régionalisé, certains serveurs pourraient s’arrêter sans que les autres s’en rendent
compte, ce qui peut engendrer des erreurs non détectées donc extrêmement dange-
reuses.
– Il est de plus facile de gêner le système, puisqu’il est centré sur les serveurs. Sur-
charger les serveurs de messages peut suffire à provoquer le “plantage” du système
dans son ensemble et ce parce que le serveur communique dans les deux sens avec
les hôtes (il reçoit leurs caractéristiques instantanées et renvoie les modifications du
24
1.1. Architectures issues des systèmes distribuées
plan). Enfin, le serveur est le seul lien entre les données partagées, donc, s’il est
corrompu, les informations réparties ne sont plus protégées.
Ces méthodes de répartition de charges sont à la fois relativement simples à implémenter et
théoriquement très efficaces, puisque le serveur centralise toutes les informations possibles
puis redistribue les charges en suivant la meilleure distribution théorique. Les algorithmes
permettant cette distribution profitent d’années de recherches en aide à la décision et
en recherche opérationnelle. Cependant, leurs évidentes faiblesses dans la gestion et la
sécurité des systèmes ouverts et à grande échelle les rendent difficiles d’utilisation sur des
systèmes scalables et ouverts répartis sur la Toile.
Définition
Les clusters [DK01] qui sont rapidement décrits dans des éditoriaux du journal “Paral-
lel Computing” [Edi00] sont des ensembles d’ordinateurs utilisés comme un seul ordinateur
capable de calcul parallèle. Il en existe de plusieurs types (en fonction des technologies
utilisées), les clusters comme ceux présentés dans [DK01] et [BFG+ 00], mais aussi les
clusters BSP [DHS00], couplés [Wat00].
25
Chapitre 1. Technologies de partage de ressources informatiques
Pour fonctionner, ces systèmes exigent de très bonnes connexions réseaux puisque les
différents processus parallèles devront communiquer par envoi de message en utilisant le
réseau qui relie les différents ordinateurs membres du cluster. Cela limite en général la
forme des clusters. En effet, comme les communications peuvent être le principal frein
des clusters, on les construit en général en reliant quelques machines avec un réseau à
haut débit (Ethernet ou FDDI). Cependant le développement des communications à haut
débit permet maintenant d’envisager des clusters constitués d’ordinateurs distants. Ce
type d’installation entraîne quelques hypothèses simplificatrices que nous nous devons de
noter.
– Les problèmes de sécurité et de tolérance aux pannes sont réduits ou différents (en
effet les ordinateurs concernés peuvent tous être observés par un utilisateur).
– Les ordinateurs sont peu nombreux, il n’y a donc pas de problème de passage à
l’échelle.
– De plus cela permet de considérer que le code à exécuter est présent partout.
– Tous les “propriétaires” des différents ordinateurs sont tous coopératifs (puisqu’ils
sont sans doute tous gérés par le même responsable).
– Les ordinateurs sont souvent homogènes (les possibilité de communications sont
maximales, envoi de pile mémoire . . . ).
Il existe deux grands types de modèles pour l’informatique partagée, les systèmes à mé-
moire partagée et les systèmes à mémoire séparée. Ces deux modèles découlent de l’ar-
chitecture des ordinateurs multiprocesseurs : soit chaque processeur a sa propre mémoire,
soit tous les processeurs partagent la mémoire. Chacun des deux modèles a ses avantages
et ses défauts. Cependant, dans l’ensemble les systèmes à mémoire partagée sont plus
rapides dans le cas où les tâches parallèles partagent beaucoup de données car les diffé-
rents processus partagent le même environnement. Dans les systèmes à mémoire séparée,
des envois de messages sont nécessaires pour que les données soient à jour. Comme les
clusters ne sont pas un multiprocesseur mais des ordinateurs reliés par un réseau, ils sont
nécessairement, sur le plan technique, des systèmes à mémoire séparée. Pourtant, cer-
taines plateformes de clustering permettent de simuler un système à mémoire partagée.
On appelle cette “mémoire” une mémoire partagée distribuée. L’implantation de systèmes
de ce type exige une grande prudence. En effet, il faut garantir la synchronisation et la
cohérence des données. Nous donnons un exemple de fonctionnement de la mémoire par-
tagée distribuée dans la section sur Linda (voir plus bas). Il faut cependant noter que
si l’existence d’une mémoire partagée simplifie la programmation des applications distri-
buées (il n’y a plus à vérifier si les messages sont corrects puisque la plateforme garantit
la cohérence et le transfert des données, on ne gagne en aucun cas la vitesse gagnée avec
un système à mémoire partagée. En effet les transferts se font toujours par le réseau donc
ils sont aussi lents que si la mémoire n’était pas partagée et même un peu plus puisque
la plateforme utilise une partie de la puissance pour simuler la mémoire partagée.
26
1.1. Architectures issues des systèmes distribuées
arrêter sur les travaux réalisés sur la gestion de l’hétérogénéité dans les clusters.
Sunderam et Geist dans [BDG+ 91, Sun94] décrivent les différents types d’hétérogé-
néité possibles :
– Différents systèmes et architectures (SIMD, MIMD, scalaires. . . )
– Différentes configurations sur des ordinateurs de même architecture (PCs diffé-
rents. . . )
– Différentes influences externes
– Différences de réseau
– Différences logicielles.
L’hétérogénéité pose des difficultés sérieuses. Les processus ne peuvent plus communi-
quer puisque les structures de données diffèrent d’un système à l’autre, les synchronisations
sont plus complexes (et donc plus lentes) puisque les ordinateurs ne vont pas à la même
vitesse. Et bien sûr, les questions de distribution de charges deviennent plus complexes
puisque les processus doivent être partagés entre des hôtes différents. Cela devient encore
plus complexe si l’on prend en compte les qualités spécifiques de chaque ordinateur. Il
faut alors répondre à la question : quel ordinateur répond le mieux aux besoins spécifiques
de chaque tâche ?
Plusieurs plateformes gèrent les systèmes hétérogènes, elles ne résolvent pas tous les
problèmes cités plus haut.
Linda
Linda a été présentée en 1993 par N. Carriero et D. Gelernter [CG89]. Ce système
est issu d’un projet de recherche de l’université de Yale. Linda est basée sur le concept
d’“espace t-uplet” lequel représente un espace abstrait dans lequel les processus coopèrent.
Linda propose une alternative aux deux solutions généralement envisagées en matière
d’informatique parallèle, le modèle à mémoire partagée et le modèle à mémoire séparée.
Linda est une plateforme destinée aux clusters, elle est donc implantée sur un système à
mémoire séparée mais elle place une couche au dessus des communications qui permet de
construire un système à “mémoire partagée distribuée”. Chaque unité de mémoire est un
bloc placé sur un ordinateur. Lorsqu’un processus utilise ce bloc, il le “retire” du t-uplet
des blocs, le modifie et le replace. Ce système garantit la synchronisation lors des appels
de données à la façon d’un sémaphore (personne ne peut accéder à un bloc utilisé puisque
son utilisateur l’a retiré du t-uplet).
Linda a été étendue par “Pirhana”. Alors que Linda ne gère que le partage du système,
Pirhana permet une certaine distribution de charge en utilisant des agents : chaque ordi-
nateur est un agent qui cherche à récupérer les tâches émises par le serveur et qui les reçoit
en fonction de ses ressources disponibles. Linda et Pirhana servent de modèle à de nom-
breuses plateformes pour l’informatique partagée. Ils servent même de modèle à certains
systèmes de partage à grande échelle, mais seulement dans le cadre de projets de recherche
car les communications de Linda sont assez lentes (d’autant que certaines d’entre elles
sont redondantes). Cependant l’amélioration des communications permet d’imaginer que
l’on puisse bientôt utiliser des systèmes proches de Linda dans des systèmes de partage à
grande échelle.
27
Chapitre 1. Technologies de partage de ressources informatiques
P4
P4 [DGMS93] est une bibliothèque de fonctions destinées à aider à la programmation de
systèmes multiprocesseurs. P4 contient les fonctions nécessaires à la gestion de systèmes
à mémoire partagée et à mémoire séparée. De plus elle introduit quelques primitives qui
nous semblent capitales comme la différenciation entre les communications bloquantes et
non bloquantes. P4 ne permet pas la constitution d’une mémoire partagée distribuée.
PVM
PVM [GAD+ 94] est un ensemble de primitives permettant l’existence d’un cluster d’or-
dinateurs complètement hétérogène pouvant être lui-même constitué de clusters hétéro-
gènes reliés par des réseaux différents (comme plusieurs systèmes connectés par Internet).
Les processus parallèles sont des composants informatiques d’un niveau de granularité
assez élevé (pour minimiser les communications). Un daemon appelé pvmd doit être lancé
sur chacun des ordinateurs partagés et ce sont ces daemons qui initialisent ensemble la
machine virtuelle.
Les programmes utilisant PVM voient le cluster comme un système parallèle très
flexible, mais les problèmes sous-jacents (comme les questions de communication) sont
transparents pour les applications. Parmi les avantages de PVM, l’un des plus notables
est qu’il n’exige aucun droit particulier pour fonctionner (n’importe quel utilisateur valide
de l’un des hôtes potentiels peut installer PVM sur sa machine). Le système dans son en-
semble peut de plus être vu comme une unique mainframe puisque chaque utilisateur peut
lancer des tâches à partir de son hôte. Le dernier avantage de PVM découle de sa trans-
parence : puisque les programmes voient le système comme un multiprocesseur à mémoire
distribuée, programmer des applications pour PVM n’est pas différent de programmer des
applications pour n’importe quel système de ce type (comme les architectures hypercubes
d’Intel). Il faut cependant noter que les communications peuvent être un réel frein pour
tous les systèmes distribués (comme PVM) donc que la granularité de la décomposition
en tâches parallèles ne doit pas être trop élevée. Il faut noter que le parallélisme de PVM
a pour granularité minimale le processus et ce même au sein d’un ordinateur multipro-
cesseur (contrairement aux ordinateurs vectoriels qui peuvent paralléliser les opérations
jusqu’au niveau des boucles). Pouvoir paralléliser les threads (processus légers) au sein
d’un ordinateur permettrait de permettre de profiter de la mémoire partagée plutôt que
de devoir faire communiquer les tâches parallèles par l’intermédiaire d’envois de messages.
PVM présente de plus quelques lacunes en matière de tolérance aux pannes. En effet,
PVM propose un système de notification qui implique qu’un administrateur surveille le
28
1.1. Architectures issues des systèmes distribuées
système et qui ne prend pas en compte de potentielles pannes graves non détectées des
hôtes. En effet, un hôte quittant la machine virtuelle permet normalement aux tâches
hébergées de notifier leur hôte d’origine ou les autres tâches mais si l’ordinateur plante,
les tâches n’ont aucune alternative.
La version actuelle de PVM peut être installée sur les Windows à noyau NT et sur la
plupart des UNIX, elle inclut les fonctions d’espace t-uplet (voir Linda), la génération et
la destruction dynamique des tâches. Il est à noter que PVM obtient des résultats très
corrects aux tests du banc d’essai de la NASA, NAS [DGMS93].
Les concepts de base de PVM ont servi de base à d’autres projets comme Harness
[MS99, MS00] qui étend le principe de la machine virtuelle à des systèmes de partage à
large échelle.
Conclusion
Les clusters sont une base des systèmes distribués modernes. En effet, ils coûtent
beaucoup moins chers que les superordinateurs et obtiennent des résultats acceptables.
Cependant, la conception des clusters a exigé des avancées technologiques intéressantes. Il
n’était pas facile de faire fonctionner plusieurs ordinateurs comme un seul. Les méthodes
et techniques caractéristiques des clusters se retrouvent aujourd’hui dans les technologies
de “grid programming”. C’est en cela que les clusters sont les plus intéressants pour nous :
ce sont les solutions développées pour la conception des clusters que l’on tente d’appliquer
à grande échelle sur les systèmes scalables. En fait, on peut même utiliser les technolo-
gies de cluster en les passant à l’échelle en construisant des “super cluster” comme celui
représenté sur la figure 1.4, c’est-à-dire des clusters de clusters. Cependant, pour fonc-
tionner correctement, il est nécessaire de modéliser finement les communications car les
réseaux locaux sont en général beaucoup plus rapides que les réseaux à large échelle, il est
donc nécessaire de distribuer les tâches en prenant en compte les communications entre
processus de façon beaucoup plus avancée [FCM03].
29
Chapitre 1. Technologies de partage de ressources informatiques
Wide
Era
Network
quelques systèmes de partage de puissance de calcul pair à pair, nous discuterons de ces
systèmes dans la section suivante.
Définition
On peut considérer que les systèmes que nous allons décrire dans la suite sont avant
tout des communautés d’utilisateurs, ce qui d’après Howard Rheingold [Rhe01] : “Les
communautés virtuelles sont des regroupements socioculturels qui émergent d’un réseau,
lorsqu’un nombre suffisant d’individus participent à ces discussions publiques, assez long-
temps et en y mettant suffisamment de cœur, pour que des réseaux de relations humaines
se tissent au sein du Cyberespace.”
On appelle système de partage “peer to peer” (P2P) un système qui permet à des
utilisateurs de partager leurs ressources directement. La plupart des systèmes P2P sont
30
1.1. Architectures issues des systèmes distribuées
des systèmes de partage de données. Les plus connus étant, outre le défunt Napster,
KAZAA, E-Donkey 2000 ou Morpheus.
Historique
Les systèmes pair à pair sont apparus avec Napster en mai 1999. Napster a aujourd’hui
disparu mais le nombre de ses héritiers est assez impressionnant. On compte Morpheus et
Kazaa, E-Donkey et Overnet. . . Ces systèmes ont tous plus ou moins le même but avec des
différences notables de fonctionnement. Certains d’entre eux utilisent “Gnutella” comme
modèle, d’autres sont légèrement différents. Nous allons décrire le fonctionnement des plus
importants.
Napster
D’une certaine façon, Napster est deux fois un précurseur. Non seulement, il a été le
premier service de partage de fichiers sur Internet mais sa disparition a poussé ses succes-
seurs à concevoir des technologies qui les mettraient à l’abri en cas de déboires du même
type. En effet cette disparition est la cause d’une bonne partie des évolutions techniques
qui caractérisent les autres systèmes. Napster était un système destiné à permettre le par-
tage de fichiers sonores (sous forme de MP3). Cette spécificité en a immédiatement fait la
cible de la RIAA (société de protection des droits sur la musique aux Etats-Unis). Napster
a disparu le 26 juillet 2000 suite à une décision juridique qui donna raison à la RIAA.
L’un des principaux défauts de Napster est la cause de cette disparition : Napster n’était
en fait seulement que très partiellement pair à pair comme on peut le voir sur la figure
1.5. En effet, chacun des fichiers partagés était indexé sur un système qui centralisait ces
informations. Les différents utilisateurs n’avaient donc qu’à se connecter à ce serveur pour
pouvoir indexer leurs propres fichiers partagés (ce qui permettait au autres utilisateurs de
les repérer) et de pouvoir trouver les fichiers désirés pour pouvoir les télécharger. Le télé-
chargement était ensuite effectivement pair à pair puisque l’utilisateur désirant un fichier
le téléchargeait directement de l’ordinateur de l’utilisateur le possédant. Cette centralisa-
tion a été la cause de la disparition de Napster. En effet, non seulement les gestionnaires
du système étaient en tort puisqu’ils connaissaient l’emplacement de fichiers illégaux et il
était facile de faire disparaître Napster, il suffisait d’éteindre le serveur central.
Afin de ne pas être pris en défaut de cette façon, les concepteurs de la seconde géné-
ration de systèmes de partage ont créé les premiers systèmes réellement “peer to peer”.
Gnutella
Gnutella [AH00, Rip01] est le système qui définit la deuxième génération de systèmes de
partage de données pair à pair. Il a été conçu par les équipes de Nullsoft, pour permettre le
partage de recettes de cuisine sur Internet. Avant que la direction d’AOL (le propriétaire
31
Chapitre 1. Technologies de partage de ressources informatiques
Client B
Client C Client A
on
ati
ex
Ind
Demande de fichier
Envoi du fichier
Serveur Napster
Adresse de A
Recherche
Client D
Client E
32
1.1. Architectures issues des systèmes distribuées
Nouveau
n
io
client 3
ex
2
nn
1
co
de
A
de
de
an
e
ss
m
De
re
Ad
Serveur
Client A
Un exemple de recherche
2 3
Client B Réseau de
1
partage
Client D
2 2
Client A
1 1 2
Client C
2
Client E
2
Client F
Retour « fichier »
Fig. 1.6 – Représentations de deux protocoles de Gnutella : l’arrivée d’un nouveau client
et une recherche de fichier
33
Chapitre 1. Technologies de partage de ressources informatiques
Kazaa
Les nouvelles moutures de Kazaa utilisent un autre protocole qui permet de corriger les
lacunes de Gnutella. Avec Kazaa, les requêtes ne sont plus transmises par “inondation” du
réseau et les nœuds ne sont pas égaux. Le principe est le suivant les meilleurs nœuds (ceux
qui retournent une réponse positive le plus souvent) sont reliés entre eux et forment une
épine dorsale (changeante puisque ces super hôtes restent des hôtes comme les autres) pour
tout le système, les autres utilisateurs sont connectés préférentiellement suivant une étoile
autour de ces hôtes. Cela permet de minimiser le nombre de messages lors des requêtes.
Enfin Kazaa permet le téléchargement multi sources. En effet, lors de la connexion à
Kazaa, chacun des fichiers partagés reçoit un identifiant (grâce à une fonction de hachage)
ce qui permet de reconnaître les fichiers identiques chez différents hôtes et de télécharger
en parallèle chez les différents hôtes (la fin du fichier chez l’un et le début chez l’autre par
exemple).
Overnet
Overnet est basé sur un concept différent du simple partage. Dans le cas d’Overnet,
les données sont “publiées” ce qui accélère énormément la recherche. Le principe est le
suivant :
– Chaque utilisateur reçoit un identifiant de 128 bits unique lors de sa connexion.
– Cet identifiant permet d’obtenir un certain anonymat des utilisateurs.
– Chacun des fichiers partagés reçoit aussi un identifiant unique de 128 bits.
– Le programme lance alors une recherche sur le réseau pour trouver l’utilisateur
dont le numéro ressemble le plus à celui donné à chacun de ses fichiers partagés et
indexe les fichiers chez les hôtes dont les numéros leurs correspondent. Cela permet
de retrouver très facilement un fichier et de réunir dans le même index toutes les
sources possibles de ce fichier.
– Pour faire une requête, il faut donc d’abord identifier le fichier. C’est-à-dire trouver
son identifiant ou un identifiant proche, en effet un identifiant proche permet de re-
trouver l’hôte qui l’indexe. On obtient ainsi rapidement un grand nombre de fichiers
semblables (c. a. d. dont l’identifiant est semblable).
Chord
Chord [SMK+ 01] est un projet du MIT qui devrait permettre d’améliorer encore les
résultats obtenus par Overnet. Ici, les identifiants sont obtenus à partir d’une table de
hachage partagée sur les hôtes lesquels sont eux aussi représentés de cette façon. Les hôtes
34
1.1. Architectures issues des systèmes distribuées
sont chaînés sur un anneau. Chaque fichier est indexé sur la machine dont l’identifiant
(produit lors du hachage) a la plus grande valeur tout en restant inférieur au sien. On peut
démontrer que l’on retrouve un fichier en log(n) messages avec n le nombre de nœuds.
Pour l’instant Chord est un prototype mais il peut permettre d’entrevoir les solutions
techniques qu’utiliseront les prochaines versions de ces systèmes. L’architecture de Chord
est représentée de façon simplifiée sur la figure 1.7.
Fig. 1.7 – Extrait de l’article cité ci-dessus, une schématisation de l’architecture de Chord
35
Chapitre 1. Technologies de partage de ressources informatiques
– Ils sont génériques : même s’ils sont plus efficaces pour retrouver certains types
de fichiers plutôt que de d’autres, ils peuvent être utilisés dans des situations très
vastes.
– Ils sont très robustes : même dans le cas des plus anciens d’entre eux, les problèmes
légaux de Napster ont assuré que l’existence de serveurs centraux était minimale.
Cela minimise les cibles potentielles pour une agression informatique contre le réseau
dans son ensemble. Les architectures ainsi développées sont très intéressantes.
– Ils sont assez anonymes : l’anonymat n’est pas garanti sur ces systèmes puisque
le téléchargement n’est souvent pas anonyme. Cependant, l’anonymat lors des re-
quêtes est un modèle intéressant puisqu’il nous paraît une condition sine qua non
du bon fonctionnement d’un système de partage de ressources entre des utilisateurs
moyennement coopératifs.
Ils ont bien sûr quelques limites évidentes. Partager des données est très différent de
partager des ressources computables. Leurs modèles pêchent donc sur les questions de
sécurité mais aussi de messages. Garder les connaissances sur le système dans son ensemble
à jour est extrêmement coûteux mais comme les transferts se font directement, les mises
à jour d’informations ne sont pas trop lourdes. Les performances du système dans son
ensemble ne sont donc pas trop diminuées. Enfin ces modèles ne répondent évidemment
pas à la question du modèle à employer pour permettre la représentation des qualités des
machines ni à celle de la forme des tâches distantes.
SETI@HOME
L’une des premières d’entre elles, SETI@HOME (Search for Extra Terrestrial Intel-
ligence AT HOME) est sans doute la plus connue. SETI@HOME est une application
de calcul répartie. Son but est d’utiliser des ordinateurs sous utilisés pour analyser des
données spatiales. Le système que nous allons décrire ici n’est pas vraiment un système
peer to peer. En effet, il y a un serveur centralisé qui distribue les calculs à réaliser sur
l’ensemble des utilisateurs. Ce programme connaît pourtant une partie des difficultés ca-
36
1.1. Architectures issues des systèmes distribuées
ractéristiques des systèmes largement distribués, comme l’hétérogénéité des hôtes et leur
instabilité. C’est de plus l’un des précurseurs des systèmes réunis généralement sous la
dénomination de “grid programming”.
SETI se présente comme un économiseur d’écran, il se lance automatiquement quand
l’ordinateur sur lequel il est installé connaît une période d’inactivité. Après quoi il se
connecte au serveur de SETI lequel lui envoie les données à analyser. L’architecture de
SETI ressemble à celle de Napster, c’est un système en étoile autour des serveurs de
l’agence. Dans ce cas les problèmes qui ont découlé de cette architecture durant l’existence
de Napster sont sans importance vu les buts de SETI.
Cette architecture présente cependant quelques graves problèmes :
– Elle est extrêmement fragile car si le serveur de SETI est inaccessible, tout le système
disparaît. Dans le cas de SETI, cela n’a pas d’importance car si le serveur de SETI
est inaccessible, l’application n’a plus de raisons d’être. Ce type d’architecture paraît
cependant bien peu robuste pour d’autres applications.
– Elle est construite pour une application spécifique et est difficilement adaptable à
d’autres cas.
GLOBUS et LEGION
Le Globus Metacomputing ToolKit [FK] est un ensemble d’outils pour la conception
de systèmes distribués. On retrouve 7 groupes de services différents, GRAM (gestion de
ressources et allocation des processus), Nexus (fonctionnalités de communications), GSI
(gestion des problèmes de sécurité, qui dans les premières versions se limitait à l’authentifi-
cation), MDS (surveillance de l’état des différents composants systèmes et des processus),
GASS (accès aux données distantes par l’intermédiaire d’interfaces séquentielles et paral-
lèles) et GEM (construction, mise en commun et utilisation des exécutables).
L’architecture choisie dans Globus est une architecture structurée de façon souple,
le système est partagé en “domaines” qui sont séparément gérés par des GRAM qui
peuvent avoir des formes diverses (l’API GRAM fournit des gestionnaires de ressources
allant du plus simple, un “fork”, jusqu’au plus complexes (Network Queuing Environment,
CONDOR, EASY-LL. . . ). Les relations entre les utilisateurs et les GRAMs se font par
l’intermédiaire de brokers. Les ressources sont décrites en utilisant un langage spécifique
appelé Ressource Specification Language (RSL). RSL est un langage possédant plusieurs
niveaux d’abstraction, ainsi, un utilisateur décrit ses besoins de façon abstraite, le broker
spécialise les descritpions des besoins, et finalement les GRAMs reçoivent une version de
très bas niveau de ces besoins. Cette dernière description permet de sélectionner facilement
une machine.
Globus permet de distribuer une application sur une grille de forme très diverse en
essayant d’utiliser au mieux chaque ressource individuelle. Globus est un système par
couches. On peut toujours accéder aux couches les plus basses quand les besoins en terme
d’efficacité rendent nécessaire une programmation optimisée au plus bas niveau, mais le
niveau de programmation est normalement assez abstrait. Globus offre des services d’un
tel niveau d’abstraction que sur de nombreux points, on peut considérer qu’ils tiennent
en fait de la plateforme de développement (Globus garantit la cohérence des données
partagées en écriture, etc.).
37
Chapitre 1. Technologies de partage de ressources informatiques
Legion [WWHG] est un système de partage d’objets à très grande échelle. C’est midd-
leware qui plaque sur un ensemble d’objets actifs communiquant par appels de méthodes
à distance l’illusion d’une unique machine virtuelle. Legion est construit autour d’une
architecture constituée de plusieurs proxys lesquels redirigent les demandes vers les hôtes
hébergeant les objets concernés. Les objets peuvent migrer mais en fait, les migrations se
font par clonage local. Comme Legion n’est pas centralisé, le système est parfaitement sca-
lable. Les objets de Legion peuvent être actifs, inactifs ou sauvegardés sur le disque. Legion
pourrait être considéré comme un système de partage de données . . . actives. [WWHG]
nous montre que les résultats obtenus par Legion dans le cas d’invocations de procédures
à distance sont excellents.
Globus et Legion sont des systèmes dont les buts sont différents. D’ailleurs, Legion
peut être construit en utilisant les méthodes Globus. Ces deux systèmes représentent
peut-être les deux solutions de partage les plus avancées aujourd’hui. Il existe cependant
d’autres solutions de partage qui peuvent être soit des projets en cours de réalisation soit
des méthodes de conception d’applications distribuées. Il est à noter que même sorties de
leur contexte, certaines caractéristiques de ces deux systèmes restent très intéressantes.
Il faut aussi noter que les API des bibliothèques du programme Globus répondent à un
grand nombre des besoins de toute application partagée.
38
1.1. Architectures issues des systèmes distribuées
On peut considérer trois types de middlewares, les “Network-enabled servers”, les “fra-
meworks” et les technologies à base de composants [D.02].
Network-enabled server
Les systèmes NES, comme Netsolve [ADSV03, HBDV03] peuvent être perçus comme
des systèmes de calcul à distance destinés à permettre de distribuer les calculs numé-
riques. Ils permettent une conception relativement simple de systèmes tout en offrant la
possibilité d’utiliser les ressources spécifiques de chaque hôte (superordinateurs, capacités
spécifiques . . . ). Ils permettent d’implanter toutes les applications classiques et scalables
et permettent d’implanter tous les types de synchronisations entre les tâches.
Framework
D’après Laforenza [D.02], on peut considérer que les “frameworks” constituent des “en-
sembles d’outils logiciels qui facilitent le développement et l’exécution d’une application”.
Ce sont donc des ensembles d’outils d’aide à la programmation d’applications “grid pro-
gramming”. Nous pourrions citer Cactus comme faisant partie de cette catégorie. Cactus
[ABD+ 01] est un ensemble comprenant une plateforme qui fonctionne sur la plupart des
systèmes informatiques, un langage de programmation orienté objets qui permet de faire
l’interface entre des fonctionnalités écrites dans la plupart des langages classiques. Cactus
permet l’utilisation de la plupart des technologies développées pour les systèmes de “grid”
(comme le Globus Metacomputing Toolkit (voir Globus), des interfaces Web et divers
outils de visualisation. . . ).
39
Chapitre 1. Technologies de partage de ressources informatiques
Conclusion
Tout au long de cette section, nous avons rencontré deux types de projets fondamen-
talement différents :
– Des systèmes de partage de données (comme Kazaa ou Napster)
– Des méthodes de conception d’applications scientifiques massivement distribuées et
des applications scientifiques distribuées.
Il existe bien sûr quelques applications industrielles, mais elles sont rares. Comme nous
l’avons rappelé pour SETI@HOME, les applications scientifiques ont des caractéristiques
40
1.2. Architectures agents
qui simplifient le problème. il faut de plus noter que ces applications distribuées ne sont
pas très souples. Même Globus ou Legion ne permettent pas réellement à des utilisa-
teurs privés ou moyennement coopératifs de partager des ressources efficacement. En effet
Legion est très rigide dans son mode de programmation et même Globus qui est le plus
souple ne permet pas de répondre aux exigences d’un réel système de partage (confidentia-
lité minimale, système complètement réparti . . . ). Il faut de plus noter qu’apparemment
aucune d’entre elles ne prend en compte la mobilité du code qui serait nécessaire pour
réaliser de la distribution de charge en temps réel.
Définitions
Comme nous l’avons précisé précédemment, il n’y a pas de définition universelle des
agents ou des systèmes multiagents, nous en avons malgré tout retenu une, celle de J.
Ferber [Fer95] :
Définition : on appelle agent une entité physique ou virtuelle
a. qui est capable d’agir dans son environnement,
b. qui peut communiquer directement avec d’autres agents,
c. qui est mue par un ensemble de tendances (sous la forme d’objectifs individuels ou
d’une fonction de satisfaction, voire de survie, qu’elle cherche à optimiser),
41
Chapitre 1. Technologies de partage de ressources informatiques
42
1.2. Architectures agents
système expert, c’est la multiplicité des agents et leurs interactions qui font la spécificité
du paradigme agents. Ferber définit ainsi système multiagents [Fer95].
Définition : on appelle système multi-agent (ou SMA), un système composé des
éléments suivants :
a. Un environnement E, c’est-à-dire un espace disposant généralement d’une métrique.
b. Un ensemble d’objets O. Ces objets sont situés, c’est-à-dire que, pour tout objet, il est
possible, à un moment donné, d’associer une position dans E. Ces objets sont passifs,
c’est-à-dire qu’ils peuvent être perçus, créés, détruits et modifiés par les agents.
c. Un ensemble A d’agents, qui sont des objets particuliers (A ⊆ O), lesquels représentent
des entités actives du système.
d. Un ensemble de relations R qui unissent des objets (et donc des agents) entre eux.
e. Un ensemble d’opérations Op permettant aux agents de A de percevoir, produire,
consommer, transformer et manipuler des objets de O.
f. Des opérateurs chargés de représenter l’application de ces opérations et la réduction
du monde à cette tentative de modification, que l’on appellera les lois de l’univers.
Cette définition est très large et notre monde peuplé d’humains entre parfaitement
dans la définition. Dans la suite, cependant, nous nous intéresserons uniquement aux SMA
informatiques. Ni les robots ni les êtres humains ne rentrent dans notre étude. Même en
réduisant notre sujet aux agents et aux SMA informatiques, le sujet reste vaste.
Les systèmes multiagents peuvent être de natures très différentes, certains d’entre
eux sont des applications informatiques complètes, d’autres sont de simples plateformes
offrant à des agents un certain nombre de services. Nous montrerons des exemples dans les
parties suivantes. Ces deux types de systèmes (et toutes les nuances qu’elles permettent)
entraînent une très grande diversité des formes des systèmes multiagents, lesquels peuvent
offrir des services (qui réunissent les relations, les objets et les opérations de la définition
précédente).
Tous pourtant doivent fournir quelques services génériques, comme les communications
entre les agents (si possible synchrones et asynchrones).
43
Chapitre 1. Technologies de partage de ressources informatiques
Ce type d’agent est nommé “réactif” car il est souvent perçu comme simplement réagis-
sant aux stimuli de son environnement sans réflexion à ce sujet. Donc des agents réactifs
placés dans un environnement constant n’agissent plus. Les agents réactifs n’étant pas
dotés de représentation interne de leur environnement, ils ne sont pas capables d’actions
complexes seuls. Leur puissance réside donc dans leur nombre. Les SMA basés sur des
agents réactifs doivent donc contenir énormément d’agents.
44
1.2. Architectures agents
niveau algorithmique. Le très haut niveau d’encapsulation des agents freine sans doute
encore plus les SMA. Pour concevoir des SMA efficaces, il est donc nécessaire de profiter
au mieux des avantages qu’offrent le parallélisme naturel et l’encapsulation caractéristique
des systèmes à agents.
Les systèmes multiagents peuvent être une solution informatique à de nombreux pro-
blèmes. Dans certains cas, les systèmes multiagents permettent de rendre la conception du
programme de résolution de certains problèmes beaucoup plus simple que d’autres para-
digmes de programmation. Les systèmes multiagents peuvent même s’avérer plus efficaces
que des méthodes classiques dans certains cas et ce parce qu’ils permettent d’approcher
les problèmes à une autre échelle (par exemple, les SMA permettent d’étudier les flux
au niveau des individus (particules ou personnes) pour lesquels les lois sont très simples
(principe fondamental de la dynamique, chocs élastiques . . . ) plutôt qu’au niveau des cou-
rants (comme dans la mécanique des fluides) où les équations différentielles deviennent
insolubles. C’est pour cette raison que les SMA ont servi pour prédire les mouvements de
foule lors de la conception du stade de France [Mus00]. Le paradigme agent offre une en-
capsulation très importante, permet de construire un niveau de sécurité au niveau le plus
faible de granularité et est naturellement adapté à la conception d’applications parallèles.
45
Chapitre 1. Technologies de partage de ressources informatiques
des jeux de rôle en ligne (c’est-à-dire les “habitants” du monde du jeu qui ne sont pas
gérés par les joueurs mais par les serveurs) pourraient être gérés par un système cen-
tral ; c’est très efficace pour permettre l’existence d’une trame scénaristique mais c’est
ingérable quand des milliers de PNJ cohabitent dans le jeu avec des milliers de joueurs.
L’utilisation d’agents pour gérer chacun des personnages permet les distribuer facilement
et facilite grandement leur gestion (ils vaquent à leurs occupations et tentent de remplir
leurs buts). Bien sûr cela ne permet pas de gérer les personnages critiques d’un scénario
mais permet la gestion des personnages secondaires. De plus, l’utilisation de ces tech-
niques permet de gérer les personnages des joueurs absents, au moins de façon minimale.
Sans cela, les personnages des joueurs absents disparaissaient corps et biens du monde du
jeu, ce qui pouvait poser quelques problèmes de cohérence. Il devient possible, avec les
SMA, de résoudre ce type de problèmes (ces techniques sont utilisées dans divers jeux (de
Neverwinter Nights à Everquest).
Cependant programmer des systèmes multiagents n’est pas simple et s’ils permettent
ou facilitent la conception de certaines applications, ils apportent quelques difficultés
supplémentaires. C’est à cause de cela que l’on trouve plusieurs méthodes de conception
de systèmes multiagents.
46
1.2. Architectures agents
Ordinateur Ordinateur
Expéditeur Message 1 : créer un Destinataire
objet
O’ O’ =vide
O (v1 = x1)
(………)
(vn = xn)
Classe Classe
C C
Ordinateur Ordinateur
Expéditeur Message 2 : contenu de Destinataire
l’objet
O’ O’ =x1….xn
O (v1 = x 1)
(……..)
(vn = xn)
Classe Classe
C C
sera sans doute pas en mémoire et qu’il faudra donc aller la chercher sur le disque.
Cette méthode peut, de plus, être difficile à implanter sur des systèmes hétérogènes
puisque les classes migrantes doivent être présentes sur la machine source et sur la machine
destination. En effet, si ces machines sont différentes, il est nécessaire d’avoir programmé
deux classes parfaitement équivalentes sur ces deux ordinateurs. Comme les deux ordina-
teurs sont différents, ces deux classes n’ont pas le même code. En fait, les deux classes
peuvent être complètement différentes, elles doivent seulement avoir les mêmes variables.
Ainsi on peut considérer que ce type de migration est plus proche de la communication
d’informations entre deux objets similaires que de la véritable migration. En contrepartie,
cette méthode peut être implantée sur un système hétérogène aussi longtemps que les
47
Chapitre 1. Technologies de partage de ressources informatiques
La mobilité faible
La mobilité faible est très similaire au clonage décrit précédemment. Ici la migration
suit les règles suivantes : l’objet migrant utilise certaines méthodes spécifiques qui peuvent,
par exemple, découler des RMI en JAVA pour créer une nouvelle instance de sa propre
classe sur l’hôte destination (même si celui-ci ne connaissait pas la classe au préalable).
Il copie ensuite son contenu dans cette nouvelle instance distante. Dans ce cas, comme
dans le précédent, il n’y a pas de réelle migration puisque l’objet n’est pas complètement
transféré (tous les calculs qui seraient toujours en cours au moment de la migration seront
perdus et devront être relancés depuis le début sur la machine destination). La mobilité
faible, contrairement au clonage décrit précédemment, exige théoriquement l’homogénéité
des machines concernées puisque du code écrit pour la machine source est transmis à la
machine destination (elles doivent donc être compatibles).
Il existe différentes variantes de la mobilité faible. Les RMI, par exemple, permettent
de créer une instance d’une classe locale sur une machine distante et permettent donc
la migration d’objets. Il faut pour cela lancer une méthode de clonage sur une machine
distante. Nous pouvons clairement penser à utiliser cette méthode comme solution pour
la résolution du problème du clonage partiel pour la distribution de charge [SSCJ98],
mais elle peut aussi permettre la “dissolution” d’un objet sur un réseau. Certaines de ses
méthodes tourneraient alors sur d’autres ordinateurs, même si cela exige des protections,
sémaphores et autres pour garantir sa cohérence.
Les limites de la mobilité faible peuvent être compensées de différentes façons : d’abord,
en utilisant un système basé sur une machine virtuelle, on peut permettre l’utilisation de
différents types d’ordinateurs aussi longtemps que la machine virtuelle existe sur chacun
d’eux. Cela ralentit le système mais est assez efficace.
Une autre solution est envisageable : chaque composant mobile pourrait avoir été
compilé pour chacun des types d’ordinateurs. Puis la machine expéditrice pourrait porter
une version de ses composants mobiles compatible avec chacune des machines du réseau.
Ainsi, elle pourrait envoyer la version adaptée au destinataire.
La mobilité faible est très similaire au clonage faible, puisqu’en pratique, on construit
sur l’ordinateur destinataire une instance de la classe de l’objet qui doit migrer, instance
qui reçoit les valeurs des variables de l’objet migrant lors de son dernier état stable. La
principale différence avec le clonage faible tient en ce que le code de la classe n’est pas à
l’origine présent sur l’ordinateur destinataire (figure 1.9).
La mobilité forte
La mobilité forte pourrait être appelée véritable mobilité car dans ce cas, le code en
exécution migre réellement. En effet, la migration est dite forte si elle ne concerne pas
le code compilé ou les données mais la pile du processeur. Dans ce cas, le programme
migrant reprend exactement à l’endroit où il s’est arrêté, les calculs partiels ne sont pas
perdus. . . La mobilité forte est la plus rapide puisqu’on ne crée pas de nouvelle instance
48
1.2. Architectures agents
Ordinateur Ordinateur
Expéditeur Destinataire
Message 1 :
initialisation de la migration
O (v1 = x1)
(………)
(vn = xn)
Classe
C
Ordinateur Ordinateur
Expéditeur Destinataire
Message 2 :
transfert du code de la classe
O (v1 = x 1)
(……..)
(vn = xn)
Classe Classe
C C
Ordinateur Ordinateur
Expéditeur Destinataire
Message 3 :
contenu de l’objet
O’ O’ =x1….xn
O (v1 = x 1)
(……..)
(vn = xn)
Classe Classe
C C
de la classe etc. mais aussi parce que les calculs partiels ne sont pas recommencés au
début. Il est très difficile d’implanter un système de mobilité forte car elle demande la
compatibilité totale entre la machine expéditeur et la machine destination mais aussi parce
que peu de langages permettent l’accès à la pile du processeur (C++ le fait mais JAVA
non, par exemple). Théoriquement, la mobilité forte est implantable sur une machine
virtuelle (puisque une machine virtuelle simulant un processeur, elle a généralement une
pile virtuelle) mais JAVA ne permettant pas l’accès à la pile, cela ne fonctionnerait pas
avec une version classique de JAVA. Cependant, une version non officielle de JAVA 1.1
permettant l’accès à la pile existe [BSDLS00a, BSDLS00b], mais cette version n’est pas
compatible avec les versions postérieures officielles de JAVA et n’est de plus pas implantée
49
Chapitre 1. Technologies de partage de ressources informatiques
sur tous les systèmes d’exploitation. Elle n’est de plus pas garantie (ni même acceptée ou
validée) par SUN, elle ne peu donc pas être utilisée dans le cadre d’un partage pair à pair
des charges de travail. Il est possible que d’autres machines virtuelles (destinées à d’autres
langages de programmation) permettant la migration forte existent mais elles présentent
un toutes le même désavantage, elles ne sont ni largement distribuées si assez ouvertes
pour être sûre. Elles risquent en plus d’être assez lentes puisqu’elles ne sont sans doute pas
optimisées. La dernière limite de la mobilité forte est le risque qu’elle représente. Ce type
de mobilité est une réelle brèche de sécurité puisque le code reçu tournera directement
sur le processeur de son nouvel hôte. Ce dernier point est le plus grave dans notre cas.
50
1.2. Architectures agents
travers de la toile des utilisateurs ? Mais aussi quels services le système doit fournir aux
agents lorsqu’ils sont placés sur un ordinateur distant ? L’OMG a répondu à certaines de
ces questions dans la définition de son standard : MASIF.
51
Chapitre 1. Technologies de partage de ressources informatiques
52
Chapitre 2
53
Chapitre 2. Méthodes de conception orientées agents
vaste sujet d’étude, ils couvrent des protocoles de communication de données, des pro-
tocoles de synchronisation (les systèmes multiagents sont des systèmes parallèles sans
vérification centrale, les agents doivent donc se synchroniser entre eux), des protocoles
de négociation . . . La FIPA définit un certains nombre de primitives (ainsi que de pro-
tocoles complets) pour permettre la plupart des communications potentielles entre les
agents [FIP98, FIP01]. Certains de ses protocoles ont été vérifiés par Hamza Mazouzi
dans sa thèse et d’autres travaux [Maz01, MEFSH02]. L’ingénierie de protocoles est une
des difficultés qui ne peuvent pas être dissociées de la conception de systèmes multiagents.
Comme les interactions entre agents sont la base de l’efficacité des SMA, la conception
des protocoles d’interaction est une étape capitale de la conception d’un SMA.
Les caractéristiques spécifiques des agents les rendent difficiles à modéliser en utilisant
les méthodes classiques (UML, MERISE . . . ). Il est assez aisé de concevoir des agents
en utilisant ces méthodes car les agents ne sont que des processus informatiques, mais
la conception de SMA exige de gérer les interactions entre les agents il existe donc des
méthodes spécifiques à la conception de systèmes multiagents. Nous allons en donner un
aperçu dans cette partie.
54
2.3. Les méthodes de conceptions de SMA “classiques” orientées agents ou rôles et leurs limites
arrangées pour coller aux besoins des agents comme dans le cas d’AUML [sita].
Les spécificités de la conception orientée agents ont été clairement décrites dans
[Jen99]. La programmation orientée rôles (de Gaia [MJK00] à Aalaadin [JO98]) proposent
de nouveaux paradigmes pour répondre à ces attentes. Cependant, même lorsqu’elle su-
bit d’assez fortes adaptations [JPS02], Gaia ne répond pas totalement au besoin de la
construction de SMA distribués efficaces car la gestion des de la distribution physique
des processus n’est en fait qu’un ajout de surface. Si l’architecture “rôles-agents” n’a pas
été construite avec la distribution des charges spécifiquement à l’esprit, l’organisation du
SMA en terme de processus peut rendre la distribution des charges très difficile et très
inefficace. Si des rôles parallèles ont été donnés au même agent, il ne sera jamais possible
de les faire tourner simultanément. De la même façon, deux agents ayant des rôles sys-
tématiquement consécutifs ne peuvent pas être séparés et distribués de façon à pouvoir
s’exécuter simultanément.
Pour toutes ces raisons, il apparaît que pour construire un SMA distribué efficace, il
faut utiliser une méthode qui s’articule autour des tâches et de leur possible parallélisation.
Il nous est apparu que les réseaux de Petri récursifs [ESA96] étaient très bien adaptés
pour résoudre ce type de problèmes, d’autant plus qu’il existe des travaux destinés à les
étendre de façon à prendre en compte les contraintes temps réel [RD85].
55
Chapitre 2. Méthodes de conception orientées agents
– Trouver “les bons agents” : Il faut ensuite distribuer ces sous tâches aux différents
agents de la meilleure façon possible.
– Trouver les bons moyens de communication : Enfin, une fois que les agents ont
été créés (au moins formellement), le concepteur doit construire les interactions.
En effet un système multiagent n’est pas seulement un ensemble d’agents paral-
lèles et indépendants, ils sont aussi couplés donc en interaction. Les supports de
ces interactions entre les agents peuvent être de types très divers, des “phéromones”
informatiques des agents “fourmis” aux communications cryptées des agents foot-
balleurs. Dans le cas où les interactions entre les agents sont assez complexes pour
nécessiter des outils de communications spécifiques, il est nécessaire pour construire
ces outils d’analyser en profondeur les choix qui peuvent s’offrir. La construction
des communications entre les différents agents doit prendre en compte le coût et les
gains d’une potentielle distribution physique du système multiagent (par exemple
sur un réseau d’ordinateurs).
Pour résoudre les deux premiers problèmes, l’une des approches (la méthode GAIA
[MJK00] ou Aalaadin citeFER98) utilise des “rôles” abstraits qui peuvent ensuite être
distribués entre les différents agents ou donnés aux mêmes agents. Ce concept est intéres-
sant mais il entraîne deux nouvelles questions : comment les rôles doivent-ils être définis ?
Et comment doivent-ils être distribués entre les agents ? Il faut pour cela éclaircir les
relations entre les rôles et les besoins du système.
La méthode GAIA ne répond pas vraiment à la première question, les auteurs consi-
dèrent que la réponse à cette question peut être laissée au bon sens des concepteurs qui
les guidera dans leur conception des rôles en suivant le modèle des sociétés humaines
familières aux concepteurs du système.
Les auteurs donnent aussi un exemple de d’organisation humaine et ajoutent que
dans les sociétés comportant de nombreux individus, un même rôle peut être donné à
plusieurs individus alors que dans les petites sociétés, on a, à l’inverse, des individus qui
remplissent plusieurs rôles. L’analogie est cependant difficile à utiliser car in est difficile de
définir ce que serait une “start-up” d’agents et quand elle serait adaptée à la solution d’un
problème. en fait, le simple fait d’utiliser des modèles de sociétés humaines pour construire
des systèmes informatiques est probablement une mauvaise solution pour résoudre des
problèmes informatiques. En effet, les sociétés humaines sont régies par un certain nombre
de règles conçues pour permettre à la société de fonctionner malgré (ou grâce à) la nature
humaine, avec ses qualités et ses défauts qui ne sont pas les mêmes que ceux des agents
logiciels. Cette tendance à vouloir copier les sociétés humaines est peut-être un héritage
du début de la recherche en intelligence artificielle, quand le but des chercheurs était de
concevoir une machine “humaine”.
La distribution des différentes sous-tâches entre les agents peut être faite de deux
façons radicalement différentes. La première solution [BLH99] consiste à distribuer les
tâches à des agents déjà existants. Cette solution est très dangereuse car, dans la plu-
part des cas, le système construit a priori est en fait inadapté au problème à résoudre.
Cette solution exige de plus l’usage d’agents extrêmement génériques puisqu’ils devront
s’adapter à tous les types de tâches. La seconde solution consiste à ne rien présumer et
à construire les agents en fonction des tâches qu’on leur assigne. De cette façon, on ne
présume rien ni du nombre, ni de la nature des agents avant d’avoir réellement décider des
56
2.4. Programmation
tâches qu’ils auraient à réaliser. Cette solution permet de construire un système spécifique
à l’application à réaliser.
En fait, la distribution des tâches peut suivre différentes règles selon le but recherché.
Considérons trois cas extrêmes (les distributions réelles devraient être des fonctions moins
caricaturales car les besoins ne sont pas les mêmes pour tous les agents.
Considérons les trois types de distribution suivants :
– On peut avoir une distribution injective : chaque agent ne reçoit pas plus d’une
tâche (mais certaines tâches peuvent être données à plusieurs agents),
– Une distribution “surjective” : (chaque tâche n’est donnée qu’une seule fois, aucune
n’est répliquée et les agents peuvent avoir plusieurs tâches),
– Bijective : chaque agent reçoit une seule tâche et aucune tâche n’est répliquée sur
plusieurs agents.
Chacune de ces distributions présente des qualités et des limites qui doivent être jugées
à l’aune des critères suivants :
– La convergence du système (la réplication risquant d’entraîner des incohérences à
terme si certaines mesures ne sont pas prises).
– La couverture du système (il faut que toutes les tâches soient réalisées).
– La tolérance aux pannes (la réplication permet de minimiser les problèmes liés aux
pannes des sites)
– L’efficacité (la parallélisation permet d’augmenter les performances, pour paralléliser
au maximum, il faut minimiser le nombre de tâches par agents pour pouvoir ensuite
distribuer physiquement les agents).
2.4 Programmation
Préalablement à la construction d’un système multiagents, il faut prendre en compte
la difficulté de la représentation du système. Les plateformes multiagents utilisées dans
l’industrie sont en général plus rigides que les plateformes universitaires (JAC contre
MadKit) mais elles offrent aussi un cadre de programmation en fixant des limites quant
aux formats et aux contenus des agents.
La sécurité et la confidentialité des agents exigent que le système soit construit sur
une plateforme qui rende difficile la décompilation du code des agents (il faut se souvenir
que cela reste de toute façon possible). Cette considération s’oppose cependant à une
autre : les agents étant complexes, si l’on veut que la construction “d’agents à la volée”
soit possible, il est absolument nécessaire que l’on puisse les programmer dans un langage
ayant un haut niveau d’abstraction.
Il y a différents choix possibles :
– Les agents étant “cognitifs”, nous pourrions utiliser un langage de programmation lo-
gique comme l’une des différentes versions de PROLOG. Cette solution présenterait
de nombreux avantages car les langages logiques ont un haut niveau d’abstraction,
ce qui leur permet d’être extrêmement concis. Certains d’entre eux sont, de plus,
“compilables” (c’est-à-dire qu’il existe un compilateur pour eux sur la plupart des or-
dinateurs). Cependant, la programmation logique n’étant pas couramment utilisée,
il est difficile d’imposer ce type de conditions.
57
Chapitre 2. Méthodes de conception orientées agents
– Les langages de script les plus communs (PERL, TCL, PYTHON, . . . ) peuvent
incarner une autre solution. S’ils ne sont pas spécifiquement conçus pour écrire
des fonctions cognitives, ils sont largement utilisés, relativement sûrs (leur code est
souvent ouvert) et la plupart d’entre eux offrent quasiment toutes les fonctions des
langages classiques (ce qui peut être un problème quant à la restriction des droits
des agents sur leurs hôtes d’accueil).
– Il existe d’autres solutions, comme par exemple, SCHEME qui est techniquement
un langage de script mais qui est surtout un langage fonctionnel, ou SMALLTALK
[Sitb] (qui est un langage orienté objet et soit-disant agent dans ses dernières ver-
sions) qui est relativement bien adapté à la programmation agent. Ces deux langages
sont d’autant plus adaptés à notre situation qu’ils sont très stables, cependant, ils
présentent une limite puisqu’ils ne sont pas utilisés en dehors de leurs communautés
respectives. Ils sont cantonnés à la recherche universitaire. Il est donc difficile de
prétendre que l’on peut créer rapidement et simplement des agents dans ces lan-
gages, puisqu’il faudra que l’utilisateur commence par les apprendre. On pourrait
aussi utiliser CLAIM [FSS03b, FSS03a, SFS03]. Si CLAIM présente le même pro-
blème que les deux langages précédents, il présente l’avantage d’être spécifiquement
orienté agents et d’être relativement simple à utiliser.
58
Chapitre 3
Méthodes de représentations
Au cours de ce document, nous avons plusieurs fois eu recours à des méthodes de re-
présentations (de préférences, de processus . . . ). La représentation des processus et celle
des préférences peuvent toutes deux s’inscrire dans le domaine plus vaste de la représen-
tation de connaissances. Dans les deux cas, nous avons utilisé des réseaux “fonctionnels”
ou des treillis de Galois pour représenter les préférences des agents en matière de sites
informatiques, réseaux de Petri colorés et récursifs pour représenter les processus d’une
application. Dans ce qui suit, nous allons devoir décrire ces différentes représentations de
connaissances.
Nous commencerons par introduire les réseaux sémantiques, puis nous décrirons les
réseaux de Petri et nous finirons avec les treillis de Galois. En effet, ils sont, d’une certaine
manière, le lien entre les différentes représentations que nous présentons au cours de ce
chapitre. D’une certaine manière, toutes les autres peuvent être considérées comme des
réseaux “plus ou moins” sémantiques.
59
Chapitre 3. Méthodes de représentations
Nous commencerons par décrire rapidement certains réseaux sémantiques basés sur la
logique du premier ordre qui permet de décrire simplement des connaissances en utilisant
des objets (concepts) et des liens typés pour construire des connaissances liant les différents
concepts.
Voici par exemple, la description d’un camion (truck). [T railerT ruck : ∀] → (P art) →
[W heel : {∗} @18]
T railerT ruck = [T ruck : λ] → (P art) → [T railer]
[[T ruck : λ] → (P art) → [T railer] : ∀] → (P art) → [W heel : {∗} @18]
(∀x : T railerT ruck)(∃s : Set)(s@18 ∧ (∀w ∈ s)(wheel(w) ∧ part(x, w))).
La représentativité des réseaux sémantiques est généralement celle de la logique du
premier ordre. Les réseaux sémantiques peuvent être étendus en changeant la nature des
“liens”, en attachant aux liens une valeur numérique, on peut construire des relations
probabilistes ou équivalentes à la logique des possibilités (fuzzy logic) , mais il aussi
possible d’utiliser ces valeurs pour mesure la “distance” entre des concepts. Dans la thèse
de Wang, les liens sont associés à une valeur “d’appartenance”, qui est une mesure de la
différence entre les descriptions des deux concepts Donner un exemple math. De cette
façon, le lien entre un chien et un chat peut avoir une valeur assez élevée (puisque ce
sont des mammifères domestiqués par les humains). On peut aussi associer à un nœud le
cardinal de l’intersection de leurs extensions (dans ce cas la valeur associée au lien entre
les concepts de chien et de chat est nulle puisqu’il n’existe aucun chien qui soit aussi un
chat). On peut citer par exemple les systèmes de représentations de connaissances à base
de réseaux sémantiques suivants :
– les graphes existentiels (Pierce 1909) et conceptuels (Sowa 1976-1984-2000) dont les
différences sont essentiellement cosmétiques sont tous deux des modèles de graphes
d’assertion, ce qui signifie qu’ils permettent de représenter une assertion logique. Ces
derniers introduisent des cadres permettant de représenter les parenthèses et donc
de pouvoir représenter la négation d’expressions complexes. Dans l’exemple suivant,
l’expression suivante est représentée. L’utilisation des cadres permet de représenter
l’implication.
– Les réseaux de Petri (décrits plus loin en profondeur) sont le principal exemple de
réseaux d’exécution mais les différents diagrammes d’UML : les statecharts et les
activity diagrams, ainsi que les automates sont d’autres types de réseaux d’exécution
(ils sont een fait très semblables aux réseaux de Petri).
– KL-ONE est un exemple de réseaux de définition.
La représentation des préférences des agents Managers (voir cette section dans la troi-
sième partie de ce mémoire) en matière de sites connus dérive de la logique des descriptions
décrites dans KL-ONE et des réseaux de neurones. Elle pourrait être construite en utili-
sant l’une ou l’autre de ces représentations, cependant de par sa nature plutôt déductive
(puisque les Managers jugent les sites qu’ils connaissent en fonction de ces réseaux.
Pour montrer un exemple de transcription en logique des prédicats d’un réseau sé-
mantique, nous allons prendre la transcription des graphes conceptuels en logique des
prédicats et nous l’illustrerons par un exemple.
60
3.2. Les réseaux de Petri et leurs extensions, les réseaux de Petri récursifs et colorés
Definition 3.1 (Réseau de Pétri récursif) Un RPN est défini comme un tuple < P, T, P re, P ost, V a
où
– P est l’ensemble des places
– T est l’ensemble des transitions telles que :
] ] ] ]
T = Telem Tabs Tend avecTabs = Tpar Texc et représente l’union disjointe
61
Chapitre 3. Méthodes de représentations
Definition 3.2 (Un RPN initialisé) Un RPN initialisé est un tuple < R, M0 , Bind >
où :
– R est le squelette de RPN
– M0 est l’état du RPN au commencement du processus représenté (c’est donc un
morphisme de P dans N .
– Bind est la fonction qui relie les variables aux objets du domaine (elle peut être
complète et donc lier toutes les variables ou partielle).
Definition 3.3 (Un état de plan) Un état de plan est un arbre T r =< S, A > où :
– S est l’ensemble des nœuds
– A est l’ensemble des arcs a ∈ A tels que :
– a =< s, s0 > si et seulement si s0 est l’enfant de s dans T r
– Un arc a est nommé par une transition appelé T rans(a) où T rans est une fonction
de A dans T avec trans(a) = t
– L’état initial T r0 est un arbre réduit à un seul nœud s tel que : M(s) = M0 avec
M0 avec M0 l’état initial.
Definition 3.4 (A transition Firing Rule) Une transition t est dite fireable d’un nœud
s ∈ S si et seulement si :
– P re(s, t) ≤ M(s)
– R(s) est totalement initialisé
– Les préconditions de la méthode associée à t sont instanciées avec Call(t) et sont
dès lors valides
Definition 3.5 Une situation est dite situation d’échec si toutes les conditions de déclen-
chement d’une transition sont satisfaites à l’exception des préconditions de la méthode
associée.
62
3.3. Les treillis de Galois
Definition 3.8 Soit T r(s) un arbre avec un nœud s comme racine. La fonction P RU NE(T r, s)
permet à l’arbre T r d’être coupé du nœud s comme suit : P rune(T r, s) 7−→ T r0 tel que
T r0 = T r\T r(s)
63
Chapitre 3. Méthodes de représentations
les liens du treillis sont l’inclusion pour les concepts (ou l’inclusion dans l’autre sens pour
les objets). En effet en considérant simplement que les concepts sont des descriptions, si
une description en inclut une autre alors tous les objets répondant au premier concept
répondent au deuxième.
64
3.3. Les treillis de Galois
l’ensemble des objets satisfaisant toutes les propriétés données par B, et soit g(∅) = I.
L’ensemble g(B) est l’ensemble des objets satisfaisant toutes les propriétés données dans
B. on pose g(∅) = I. L’ensemble g(B) est appelé extension de B.
≤ est défini par (A, f (A)) ≤ (A0 , f (A0 )) ssi A ⊆ A0 (et f (A0 ) ⊆ f (A))
∨ est défini par (A, f (A)) ∨ (A0 , f (A0 )) = (h(A ∪ A0 ), f (A) ∩ f (A0 ))
∧ est défini par (A, f (A)) ∧ (A0 , f (A0 )) = (A ∩ A0 , k(f (A) ∪ f (A0 )))
Exemple :
Pout traiter des treillis plus générauX que les treillis binaires, on utilise toujours
E = P(I) comme précédemment, mais F est maintenant un treillis général avec un plus
petit élément appelé 0F (resp. un plus grand élément 1F ).
Etant donné deux treillis < E, ≤, ∨, ∧ > et < F , ≤, ∨, ∧ >, avec ≤, ∨, ∧ respectivement
la relatiopn d’ordre, le supremum et l’infimum, une connexion de Galois entre E et F est
une paire de fonctions (f, g) qui vérifie les propriétés (3.1) et (3.2). Il faut noter que la
propriété (3.2) peut s’écrire :
x ≤ h(x) et y ≤ k(y), ∀x ∈ E, ∀y ∈ F
Ces définitions impliquent : f ◦ h = f, h ◦ h = h, k ◦ g = g, k ◦ k = k
La restriction de f à Ih est un isomorphisme dans Ik , son inverse est la restriction de
g à Ik .
Le treillis de Galois peut donc se définir par la connexion de Galois (f, g) comme
l’ensemble des nœuds du type {(x, f (x)), x ∈ Ih } qui forme une struture de treillis si
≤ est défini par (x, f (x)) ≤ (x0 , f (x0 )) ssi x ≤ x0 (et f (x0 ) ⊆ f (x))
∨ est défini par (x, f (x)) ∨ (x0 , f (x0 )) = (h(x ∨ x0 ), f (x) ∧ f (x0 ))
∧ est défini par (x, f (x)) ∧ (x0 , f (x0 )) = (x ∧ x0 , k(f (x) ∨ f (x0 )))
65
Chapitre 3. Méthodes de représentations
66
Troisième partie
Méthodologie de conception de
systèmes multiagents orientée vers une
répartition efficace des charges :
HAMAC et ASMAA
67
Chapitre 1
69
Chapitre 1. Pourquoi une nouvelle méthode de conception de systèmes multiagents ?
ils présentent aussi quelques défauts, lesquels sont souvent l’autre face de leurs avantages.
La première des qualités des agents est le très haut niveau d’abstraction et donc d’encap-
sulation associé à l’indépendance de chaque agent. Ce haut niveau d’encapsulation peut
permettre de construire un code plus facilement recyclable car il devient assez simple de
réutiliser des agents construits pour d’autres applications. Le second avantage de SMA
tient dans le fait que les agents ne sont pas seulement parallèles, ils sont aussi extrêmement
indépendants en ce qu’ils ne partagent aucune mémoire. Ils sont donc, comparativement
aux structures de la plupart des autres paradigmes, plus faciles à répartir sur un système
distribué.
Mais les systèmes multiagents, à cause du niveau d’indépendance des agents qui les
composent, peuvent être relativement lents. Il faut donc impérativement tenter de les
optimiser. Idéalement, la meilleure façon de construire un système multiagent est de com-
mencer de rien ou alors de composants formés eux-mêmes d’agents. Il est en effet plus
simple d’incorporer des agents extérieurs dans un SMA que d’adapter du code écrit selon
un autre paradigme pour l’inclure dans le SMA sans en détruire la cohérence. Pourtant,
recycler du code préalable peut rendre la construction d’une application non seulement
plus simple mais aussi beaucoup moins coûteuse, cela peut donc être extrêmement im-
portant pour un projet informatique industriel. Adapter à un système multiagent le code
de versions antérieures construites avec un autre paradigme que la programmation agent
peut être difficile. Le projet ARCHON, par exemple, a montré les difficultés posées par
la simple association de deux systèmes experts [JZA+ 93], problème pourtant beaucoup
plus simple que de casser le code d’une application antérieure en petits blocs et de le
réorganiser en une large communauté d’agents indépendants et physiquement distribués.
Pour promouvoir l’utilisation des systèmes multiagents, les avantages que nous avons
cités plus haut doivent être correctement mis en valeur, d’autant que le paradigme agent
est desservi par sa jeunesse par rapport à la programmation orientée objet, par exemple.
Ainsi, comme les systèmes multiagents sont relativement jeunes, il est nécessaire de conce-
voir des modèles suffisamment simples de programmation orientée agent pour pouvoir être
utilisés par des concepteurs non spécialistes du domaine. Ces méthodes doivent mettre
en avant non seulement les étapes nécessaires au développement d’un système multiagent
mais aussi prendre en considération les façons d’optimiser son fonctionnement.
Dans cette section, nous allons présenter rapidement DOGS multiagent, qui a été la
base d’expérimentation de notre méthode de conception. Après cela nous rappellerons
rapidement les différents travaux liés à la conception de systèmes multiagents. Nous pour-
rons ensuite présenter notre méthode de conception en commençant par délimiter son
domaine de validité puis en suivant le processus de conception étape par étape.
70
Chapitre 2
71
Chapitre 2. Notre méthode de conception de SMA et ses hypothèses d’application
Analyse
Composants Communication
réutilisables Tâche Client externe
Conception
Communications Agents
Interactions Communications
Online
Redistribution dynamique des charges
72
2.2. Domaine d’application
Les deux dernières étapes concernent la position des agents car comme nous considé-
rons que notre système est a priori implanté sur un système multi-processeurs (un cluster
de PCs par exemple), il faut placer les agents mais surtout les déplacer de façon à corriger
des erreurs ou à s’adapter à une évolution du système.
73
Chapitre 2. Notre méthode de conception de SMA et ses hypothèses d’application
DOGS, qui sera notre exemple directeur au cours de toute cette partie, correspond
assez bien au domaine que nous avons présenté ci-dessus. Il avait été décidé dès le com-
mencement du projet que les agents de DOGS seraient aussi coopératifs que possible et
ce parce qu’aux vus des buts de l’application, il n’y avait aucune raison justifiant la pré-
sence d’agents concurrents dans ce programme. L’analyse n’a pas été très difficile (nous
avons finalement obtenu une dizaine de types d’agents différents) et nous avons décidé
que les agents et leurs organisations seraient statiques. Enfin, comme DOGS était un
système déjà fonctionnel, l’un des principaux problèmes a tenu dans le fait qu’il fallait
que la réutilisation du code des versions précédentes soit maximale. La prééminence de
DOGS-multiagents dans l’élaboration de cette méthode de conception exige que l’applica-
tion, dans son fonctionnement soit présentée préalablement à la description de la méthode
proprement dite.
74
2.3. Une rapide présentation de DOGS multiagent
75
Chapitre 2. Notre méthode de conception de SMA et ses hypothèses d’application
76
Chapitre 3
77
Chapitre 3. La phase statique de notre méthode de construction de systèmes multiagents : HAMAC
78
3.2. Le processus d’analyse
Mesures de
Modèle du tension
circuit électrique
Première tâche:
construire et raffiner les
équations
Fig. 3.1 – Exemple d’analyse des tâches réalisée en utilisant des réseaux de Petri récursifs
toutes façons, les tâches obtenues ne seront pas réellement séparables et donc finiront
toujours dans le même agent. Lors des étapes de construction des agents, il faudra refaire
le même travail dans l’autre sens. Il n’est donc pas nécessaire de pousser l’analyse trop
avant.
Quelque soit la méthode finalement utilisée pour décrire les tâches, cette méthode doit
décrire les relations entre les tâches car ce sont ces relations qui formeront la base de la
construction des relations entre les agents. Il faut donc les avoir parfaitement définies, et
ce à tous les niveaux d’abstraction étudiés puisque l’on ne sait pas, pendant l’analyse à
quel niveau d’abstraction se construiront les agents.
Au cours du projet de DOGS, nous sommes restés à un assez haut niveau d’abstraction,
les tâches que nous avons construites étaient d’un haut niveau car comme nous comptions
réutiliser le code des versions précédentes de DOGS, les autres étapes de l’analyse ont
limité le besoin de pousser très profondément cette analyse.
79
Chapitre 3. La phase statique de notre méthode de construction de systèmes multiagents : HAMAC
Description
Nous avons utilisé les réseaux de Petri récursifs lors de l’analyse des tâches. Cependant,
il est absolument nécessaire de décrire complètement les tâches pour pouvoir raffiner le
réseau de Petri. Nous devons donc présenter les tâches de façon à ce que l’on puisse utiliser
le raffinement pour construire un système efficace.
Chaque tâche doit être décrite de façon suffisamment précise, nous avons donc opté
pour une description suivant les variables suivantes :
Les tâches telles que nous les utilisons lors de la décomposition des tâches doivent
aussi être décrites. Elles sont décrites lors de l’analyse des tâches en utilisant les variables
suivantes :
– NOM : chaque tâche a un identifiant unique qui permet de la reconnaître, cet iden-
tifiant est par extension utilisé pour représenter la capacité à remplir cette tâche.
– PARENT : le parent d’une tâche est la tâche du niveau d’abstraction immédiatement
supérieur qui a engendré cette tâche lors du raffinement.
– ENTREES/SORTIES : il est nécessaire de préciser la liste complète des entrées et
des sorties de chaque tâche ainsi que la tâche à qui sont destinées ces sorties.
– INFORMATIONS NECESSAIRES A L’EXECUTION : La description doit contenir
toutes les informations (données, objets etc. contenues dans l’environnement) né-
cessaires à son exécution. La description algorithmique de la tâche (voir ci-dessous)
fait appel à ces données. L’ensemble des entrées des fonctions de la description
algorithmique doit être égal à l’ensemble contenu ici.
Soit E l’ensemble des tâches et t ∈ E, on peut écrire : soit Env l’environnement
d’exécution du programme c’est-à-dire l’ensemble contenant toutes les variables
d’exécution de l’application. on appellera P REt l’ensemble des préconditions de
t. Il faut noter que P REt doit contenir le fait que toutes les variables d’environne-
ment nécessaires à l’exécution de la tâche doivent être instanciées et doivent avoir
une valeur valide. Dans le cas où la tâche t peut s’écrire comme le calcul d’une
fonction f , on a :
en écrivant f ,
f : E1 × E2 × . . . × En → F1 × F2 × . . . × Fn
f : x1 , . . . , xn 7−→ f (x1 , . . . , xn )
avec D1 . . . Dn les ensembles de définition de x1 . . . xn
∀i ∈ N , Pi = {xi ∈ Di } ∈ P REt
P REt contient donc toutes les préalables à l’exécution de t mais aussi toutes les
hypothèses nécessaires pour que la tâche s’exécute correctement.
– DONNEES SORTIES : sont décrites ici toutes les modifications à l’ensemble des
données et objets de l’environnement qui ont été réalisées lors de la tâche. L’en-
semble des sorties des fonctions de la description algorithmiques doit être égal à
l’ensemble contenu ici. De la même façon que pour les informations nécessaires à
l’exécution, l’ensemble des données sorties, que nous appellerons P OSTt est l’en-
semble des modifications dans l’environnement résultant directement de l’exécution
80
3.2. Le processus d’analyse
81
Chapitre 3. La phase statique de notre méthode de construction de systèmes multiagents : HAMAC
Lorsque l’on utilise d’autres paradigmes de programmation, cette analyse est parfois
incluse dans le processus d’implantation. Mais comme la programmation agents est à la
fois assez spécifique dans ses besoins et peu courante, nous préconisons réellement que
cette étape se place directement dans l’analyse car nous le rappelons, il faudra sans doute
adapter du code non-agent à un système à agents. Lors de cette étape, il faut analyser en
profondeur le code déjà présent et le réduire en composants logiquement indissociables de
la plus petite granularité possible de façon à ce qu’ils soient aussi simples que possible à
intégrer à la nouvelle application. Il faut ensuite lier les composants logiciels réutilisables
avec les tâches de l’étape d’analyse des tâches. De cette façon, les concepteurs peuvent
savoir au plus tôt quelles tâches devront être données au même agent de façon à profiter
de composants logiciels antérieurs et quelles tâches peuvent être distribuées. Cela permet
aussi de savoir ce qui devra être programmé spécifiquement pour le système multiagent
et ce qui pourra être recyclé. Cela peut permettre de chiffrer plus précisément les coûts
de développement de l’application.
Il faut noter que toute cette étape peut être sautée dans le cas où les concepteurs
veulent construire leur application à partir de rien ou lorsque la lisibilité du nouveau code
prime sur les coûts d’implantation. Cependant, réduire les coûts (financiers et temporels)
de l’implantation est la plupart du temps une priorité majeure des projets informatiques.
Il faut aussi noter que si le code à recycler a été écrit en respectant les principes de
la programmation de composants, il sera sans doute beaucoup plus simple à réutiliser
que si ce code est une partie d’une ancienne application monolithique programmée en
suivant l’un (ou plusieurs) des paradigmes classiques de programmation. Ces derniers
nécessiteront probablement une étude beaucoup plus poussée.
Comme nous l’avons déjà rappelé, on pourrait considérer que ces problèmes sont pu-
rement des problèmes d’implantation. Cependant, si la conception des agents est réalisée
sans prendre le code à recycler en compte, les composants logiciels réutilisables risquent de
ne pas s’insérer bien dans la nouvelle architecture, ce qui peut entraîner des redondances
inutiles (mais coûteuses en terme de calcul et de mémoire) ou la réécriture complète
de fonctions déjà présentes dans les versions précédentes. C’est pour ces raisons, qu’il
est souhaitable que cette étude se fasse préalablement à l’implantation, lors de la phase
d’analyse.
Lors du projet de DOGS Multiagent, cette étape a été relativement simple, car il
existait une version séquentielle du même programme et que les concepteurs des versions
antérieures participaient pour la plupart à la conception de la nouvelle version. Il y avait
énormément de code réutilisable (en fait chacun des composants nécessaires existait déjà
et il avait été décidé que la réutilisation du code des versions précédentes serait maximale.
Cependant, les versions précédentes de DOGS avaient été construites en utilisant Sixtus
PROLOG, ce qui entraînait quelques considérations supplémentaires. La première de ces
considérations a été l’encapsulation du code PROLOG dans des agents JAVA ainsi que
la nécessité de concevoir une bonne interface entre les codes programmés dans les deux
langages. L’utilisation de PROLOG a aussi fait disparaître le besoin d’une analyse très
en profondeur du code puisque PROLOG étant un langage très abstrait, les composants
logiciels ont une granularité assez épaisse.
82
3.3. Processus de conception de la société du système multiagent
83
Chapitre 3. La phase statique de notre méthode de construction de systèmes multiagents : HAMAC
lequel nous créons des agents virtuels, nous leur distribuons les tâches à réaliser, puis nous
construisons les communications engendrées par cette distribution, que nous évaluons
ensuite. Si les résultats de l’évaluation ne sont pas satisfaisants, on recommence à la
première étape en diminuant le niveau d’abstraction et en associant les tâches dont les
communications étaient trop coûteuses.
Etape 2 : vérifier que les ressources communes sont bien gérées en suivant le tableau (il
faut vérifier que le nombre d’agents pouvant accéder aux ressources simultané-
ment est inférieur ou égal au nombre de points d’accès de la ressource).
Etape 3 : évaluation du coût de la distribution en terme de communications (taille des
messages et fréquence des communications)
84
3.3. Processus de conception de la société du système multiagent
85
Chapitre 3. La phase statique de notre méthode de construction de systèmes multiagents : HAMAC
86
3.3. Processus de conception de la société du système multiagent
première et un réalisant la deuxième (leur code aurait été quasiment identique). Ainsi
l’existence de types d’agents semblables aux classes de l’objet nous apparaît une caracté-
ristique extrêmement souhaitable. Nous définissons donc les types puis enfin les agents.
Il faut noter que le travail présent ne participe qu’à la construction d’agents, or un SMA
peut ne pas être entièrement constitué d’agents. Les entités informatiques non-agents au
sein d’un SMA seront sans doute des “objets” dès lors, nous conseillons aux concepteurs
de systèmes de se référer aux méthodes objets pour concevoir ces entités.
87
Chapitre 3. La phase statique de notre méthode de construction de systèmes multiagents : HAMAC
– CAPACITES : les capacités d’un type d’agent regroupent les descriptions de toutes
les compétences rattachées à un type d’agent. Elles sont tirées des tâches de la phase
analyse et leur description a donc la même granularité que cette dernière. Elles sont
représentées par les noms des tâches auxquelles elles sont associées.
– FONCTIONS POTENTIELLES : cette caractéristique permet de déterminer quel
type d’agents peut réaliser telle ou telle tâche. Certains types n’ont qu’une seule
fonction potentielle alors que certains types d’agents très puissants pourraient po-
tentiellement tout faire.
Une fois la description des types d’agents terminée, il est nécessaire de construire la
description des agents eux-mêmes de façon individuelle. Il faut noter que chaque agent
n’est pas nécessairement décrit individuellement (cela impliquerait que le nombre d’agent
est une donnée statique alors qu’elle dépend généralement des spécificités de chaque uti-
Tâches
données à
deux agents
de type B
Communications des
agents de type B vers
les agents de type A
Tâches
données à
deux agents
de type A
88
3.3. Processus de conception de la société du système multiagent
lisation de l’application construite. Les différents agents ayant exactement les mêmes
caractéristiques sont réunis sous la même description type.
Les agents ont plusieurs caractéristiques que nous allons citer et expliciter maintenant :
– NOM : le nom est l’identifiant de l’agent, il est unique et permet d’identifier un
interlocuteur.
– PARENT : le parent d’un agent est l’agent qui a commencé son exécution. Si tous
les agents sont créés par un système central, c’est ce système qui est le parent de
chacun des agents. Dans le cas contraire le parent permet de suivre la hiérarchie
de construction des agents et potentiellement de vérifier si certains d’entre eux ne
travaillent pas dans le vide (par exemple parce que leur parent qui attendait d’eux
un résultat a été arrêté).
– TYPE : chaque agent a un type. Les types forment une pyramide de l’ensemble des
agents assez semblable aux classes de l’objet. L’héritage est possible sur les types,
cependant le type d’un agent est dès lors le type le plus restrictif tel que l’agent y
réponde. (Par exemple, Titi est un canari même si canari hérite de oiseau qui hérite
d’ovipare etc.). Chaque type est lui-même décrit (voir plus loin). Ici nous utilisons
le nom du type de l’agent (il est unique) pour reconnaître le type de cet agent.
– FONCTION : la fonction de l’agent est une description textuelle de son rôle au sein
du système multiagent. En général, elle recoupe le type de l’agent car une fonction
est souvent assignée à tous les éléments d’un même type. Cependant, si les agents
pour une raison quelconque sont “généralistes”, il est possible que plusieurs agents
du même type n’aient pas la même fonction.
– MIGRATEUR/SEDENTAIRE : un agent migrateur peut potentiellement se dépla-
cer d’un ordinateur vers un autre alors que qu’un sédentaire reste toujours sur le
même site (par exemple les agents gérant un ordinateur sont probablement séden-
taires alors que la plupart des agents serait plutôt migrateurs (même s’ils ne migrent
pas dans les faits).
– COOPERATIFS/PARTIELLEMENT COOPERATIFS/TOTALEMENT COMPE-
TITIFS : un agent coopératif répond toujours positivement aux requêtes d’aide, les
agents compétitifs exigent toujours une contrepartie. La plupart des agents devrait
appartenir à la catégorie intermédiaire des agents qui accepte les requêtes d’aide
plus ou moins régulièrement. Cette classification est nécessaire pour que les autres
agents puissent construire leurs requêtes en conséquences. Nous ne plaçons pas cette
information dans le type des agents puisque certains agents peuvent être plus ou
moins coopératifs non pas en fonction de leur rôle mais des ressources qui leur sont
allouées.
Nous ne décrivons pas les messages de données potentiels puisqu’ils peuvent être de
toute nature (aussi bien des objets que des données typées ou des chaînes de caractères).
Ils doivent cependant être décrits lors de la construction des agents. Il faut alors spécifier
leur nature, leurs valeurs potentielles (c’est-à-dire l’ensemble de définition de la fonction
de l’agent destinataire lorsqu’il les réceptionne).
La construction des interactions dans DOGS a été relativement simple et comme le
grain était assez important, nous n’avons pas eu à faire beaucoup d’ajustements lors
de la phase récursive de la méthode de conception. Il nous est cependant apparu que
certaines interactions pouvaient être difficiles à concevoir ou à vérifier (essentiellement les
89
Chapitre 3. La phase statique de notre méthode de construction de systèmes multiagents : HAMAC
90
3.3. Processus de conception de la société du système multiagent
La figure 3.4 présente rapidement notre modélisation du système multiagent (les com-
munications permettent à la fois le transfert d’informations et la synchronisation entre les
agents.
Notre mode de représentation des communications entre agents utilise deux types
différents de messages, les messages de données et les messages jetons. On pourrait penser
que cette représentation est donc très pauvre au vu des possibilités d’interactions entre
agents. Cependant, cela nous parait suffisant, en ce que les ordres, les autorisations peuvent
facilement être représentés comme des messages jetons, alors que les messages informatifs,
les conseils, les avis sont constitués d’un message jeton et d’un message informatif. La
différence entre ces différents messages est dans les processus qui précèdent et suivent
l’envoi et la réception du message. Ainsi, un ordre est un message jeton immédiatement
suivi de l’action auquel il se rapporte (c’est donc un message jeton lié à un état n’acceptant
qu’un seul jeton et suivi d’une transition n’acceptant qu’un seul jeton, une autorisation
est un message jeton lié à un état qui peut recevoir plusieurs jetons suivi d’une transition
en attendant elle aussi plusieurs. Ainsi, cette architecture de message peut paraître très
simple, cependant elle est très générique, ce qui peut permettre d’écrire une vaste gamme
de messages et donc de protocoles de communication et d’interaction.
Ci-dessous, nous proposons une description en logique du premier ordre de notre re-
présentation destinée à permettre la vérification logique du système construit.
tq(Senda (A, taA , α1 , KA )∧(receivea (a, B, KB ))∧(Sendb (A, tbA , α2 , b)∧(receiveb (B, tbB , β))
91
Chapitre 3. La phase statique de notre méthode de construction de systèmes multiagents : HAMAC
Notations
On appelle :
92
3.3. Processus de conception de la société du système multiagent
Définition 1
On appelle T 0 (R) l’ensemble des classes de transition de R. Une classe de transition est
définie par le fait que chaque élément de la classe a le même nom et la même garde.
∀(t1 , t2 ) ∈ T (R)2 , ∃t ∈ T 0 (R)2 tel que :
(t1 , t2 ) ∈ t ⇔ (garde(t1 ) = garde(t2 ))Λ(nom(t1 ) = nom(t2 ))
Si les réseaux de Petri considérés sont colorés, la garde est remplacée par la couleur du
jeton. En effet, si les jetons sont colorés, on peut différencier les différentes classes de
transition par la couleur du jeton qui peut les franchir, On n’a donc plus besoin de la
garde.
Il faut noter que T 0 (R) forme une partition sur T (R).
Définition 2
On appelle sous-réseau R0 d’un réseau de Petri R une sous-partie “continue” de ce
réseau. C’est-à-dire une séquence d’états et de transitions représentant une action (∀e ∈
S(R0 ), ∃x ∈ E(R0 ) telle que e est accessible à partir des états initiaux de R0 par x.
Une sous-partie constitue elle-même un réseau.
Définition 3
Pour une transition x appartenant à T (R), on appelle pre(x) (resp. post(x)) l’état (ou
un état) qui précède (resp. suit) x et pren (x) (resp. postn (x)) est un sous-réseau conte-
nant n composants (états et transitions) et terminant (resp. commençant) par pre(x)
(resp. post(x).
Définition 4
On appelle A l’ensemble des classes d’agents (une classe d’agent étant un ensemble
d’agents ayant la même représentation, c’est-à-dire le même réseau de Petri, les mêmes
variables locales et les mêmes entrées et sorties).
Définition 5
On appelle SM A l’ensemble de tous les agents et P le réseau de Petri de l’exécution
de l’application telle qu’elle est envisagée (selon les cas il faut vérifier que l’exécution du
93
Chapitre 3. La phase statique de notre méthode de construction de systèmes multiagents : HAMAC
SMA construit colle bien à celle décrite par le réseau de Petri ou l’inverse).
∀a ∈ A, on appelle I(a) les instances de a, on a CardI(a) ≥ 1
∀ag ∈ SMA (resp. ∀a ∈ A), on appelle RdP (ag ) (resp. RdP (a)) le réseau de Petri local
inclus dans cet agent (resp. cette classe d’agents).
Définition 6
Deux exécutions sont équivalentes si les mêmes actions sont déclenchées dans le même
ordre ou dans un ordre équivalent (c’est-à-dire si elles ont le même graphe de marquage).
d’une part, et :
Si on a 3.2, cela signifie qu’il y a un unique agent qui reçoit ce message et continue
l’exécution (il est du type 3.4), on peut donc écrire dans ce cas : ∃j ∈ Card(T (RdP (ai )),
j ≥ 1 tel que :
94
3.3. Processus de conception de la société du système multiagent
et
∀i ∈ N tel que posti (s) ∈ RdP (a0 ), ∃posti (x0 ) = posti (s).
95
Chapitre 3. La phase statique de notre méthode de construction de systèmes multiagents : HAMAC
96
3.5. Conception et implantation des protocoles d’interaction et de communication
système hétérogène. Les systèmes Windows et UNIX ne gèrent pas les tâches parallèles de
la même façon, certains agents peuvent profiter plus de l’un des modes de gestion que de
l’autre. Le disfonctionnement d’une seule des machines peut nuire à la distribution dans
son ensemble. La distribution de charge peut améliorer la stabilité du système dans son
ensemble mais elle exige aussi une gestion avancée des pannes car on peut avoir des pannes
difficilement détectables, des problèmes sur l’un des sites alors que les autres fonctionnent
normalement, etc.
Dans DOGS, nous avons décidé de placer un seul agent calculateur sur chaque site, car
ils exigent énormément de puissance de calcul et peu d’entrées sorties. Etant donné que
ces agents sont spécialisés il faut tenter de placer les agents blocs qui leurs sont associés
au plus près d’eux.
Dans le cas très probable où il est difficile de prévoir quels agents interagiront préfé-
rentiellement, il peut être possible de construire la distribution en fonction des résultats
des tentatives précédentes. Nous avons envisagé de proposer une solution récursive pour
construire cette répartition. Si la distribution réalisée ne s’avère pas satisfaisante lors d’une
utilisation du programme, on devrait tenter de la corriger pour la prochaine utilisation
(on construirait une méthode récursive de construction de la distribution des charges).
Cela présente deux problèmes :
– D’abord cela ne peut fonctionner que si la qualité d’une distribution ne dépend pas
trop des caractéristiques spécifiques du problème traité par le programme (dans le
cas de DOGS du circuit électronique considéré). Car si c’est le cas, la suite des
distributions construites ne peut pas converger, on ne pourrait donc pas améliorer
les résultats à venir en se basant sur les expériences précédentes. Il faudrait donc
vérifier la validité de ces hypothèses, si leur véracité ne dépend pas de l’application
elle-même.
– La seconde raison est que si la distribution de charge est nécessaire, c’est que l’appli-
cation est sans doute très lourde, lancer des utilisations tests destinées à valider ou
à améliorer la qualité de la distribution peut être très coûteux. De plus la validité de
toute distribution statique est limitée au système physique qui lui sert de support,
il faudrait donc reprendre le processus s’il le système informatique est mis à jour.
97
Chapitre 3. La phase statique de notre méthode de construction de systèmes multiagents : HAMAC
bution des charges au cours de l’exécution. Cela ne permet sans doute pas de corriger
une erreur lourde de conception lors des étapes précédentes, mais cela peut permettre de
compenser une légère erreur lors de la distribution statique.
98
3.5. Conception et implantation des protocoles d’interaction et de communication
au protocole utilisé.
Pour DOGS multiagent, nous avons choisi de baser notre système de communication
sur des datagrammes UDP/IP car cette solution fonctionnait bien sur un réseau local,
nous avons cependant permis des modifications à cette base en permettant à chaque
agent d’avoir un ou plusieurs modules de communication indépendants lui permettant
potentiellement de communiquer suivant d’autres protocoles si le besoin s’en faisait sentir.
Il existe de nombreux protocoles de communication lesquels ont des caractéristiques
spécifiques qui les rendent particulièrement adaptés à certaines utilisations, du transfert
de données lourdes (FTP) au transfert de vidéo en temps réel (RTP par exemple). Les
concepteurs devraient penser à ces protocoles spécifiques si les agents doivent se trans-
mettre certains types particuliers de données. Il existe aussi des protocoles spécifiques
conçus pour permettre l’utilisation de “broadcast” et de “multicast” (message envoyés à
un sous-ensemble de la population des recepteurs potentiels) [AW98], ces protocoles de-
vraient être envisagés lors de la construction d’un système multiagent. Les agents peuvent
même avoir plusieurs modules de communications et choisir selon la nature des messages à
transmettre, de la même façon que les humains n’utilisent pas les mêmes media lorsqu’ils
parlent du match de football de la veille avec leur voisin de bureau et lorsqu’ils envoient
un message ultra confidentiel à un destinataire aux antipodes. UDP n’est pas un protocole
sûr, cependant c’est suffisant lorsque les agents se trouvent sur un réseau local, ce ne le
sera pas si les agents doivent communiquer au travers de l’Internet.
Il y a une autre question que doivent se poser les concepteurs d’un système multiagent :
“qui doit communiquer ?” la réponse la plus simple est “les agents”, ce qui signifie que
chaque agent doit avoir son propre système de communication (dans DOGS, les agents
avaient tous un serveur et un client de socket UDP) chaque agent est alors complètement
indépendant du système dans son ensemble. Si cela peut paraître souhaitable du point
de vue de l’encapsulation spécifique du paradigme agent, les serveurs de communications
sont coûteux en temps du processeur et en entrées/sorties, cette indépendance a donc un
prix. Certains concepteurs préfèrent donc centraliser les communications distantes, par
exemple en construisant un agent “routeur” pour les communications distantes [MAD]. Il
faut pourtant noter que cet agent devient dès lors un goulot d’étranglement, ce qui peut
exiger certains efforts de logistique. Cela peut devenir assez lourd puisque même si un
seul agent est présent sur un site, la plateforme dans son ensemble doit être instanciée
(puisqu’elle inclut les communications).
Les agents totalement indépendants ont un avantage, ils n’ont pas besoin de tous les
protocoles utilisés au sein du système, seulement de ceux qu’ils utilisent eux-mêmes. Ils
peuvent aussi utiliser leurs modules de communication avec “intelligence” en choisissant le
media de la communication en fonction des paramètres du contenu du message, on pourrait
même utiliser des techniques d’apprentissage pour améliorer le choix des protocoles de
communication. Cependant un agent qui centraliserait les communications peut prétendre
à tous les avantages ci-dessus. L’existence de communications directes entre les agents
simplifie pourtant l’architecture du système dans son ensemble et peut aussi simplifier les
relations entre les agents du système et d’éventuelles applications extérieures en offrant
une alternative aux communications centralisées vers l’extérieur.
La meilleure solution se trouve sans doute entre ces deux possibilités (complète indé-
pendance ou centralisation) : seuls les agents qui ont le plus besoin des communications
99
Chapitre 3. La phase statique de notre méthode de construction de systèmes multiagents : HAMAC
externes pouvant envoyer et recevoir des messages distants. Il faut réfléchir au niveau
d’indépendance des agents, car cette indépendance est synonyme de redondance et peut
donc être à la fois une qualité et un défaut pour le système.
Dans DOGS, nous avons commencé à implanter des modules de communication utili-
sant des sockets TCP/IP mais ce n’était pas assez rapide car les communications bidirec-
tionnelles de TCP exigeaient que nous ouvrions et fermions continuellement les canaux
alors que les agents changeaient d’interlocuteurs, ce qui prenait quelques dizaines de mi-
crosecondes au moins. Nous avons donc opté pour l’utilisation de datagrammes UDP/IP
car ils permettent le broadcast, sont efficaces et simples à implanter puisque nous étions
sur un réseau fermé et qu’il n’y avait aucun problème de sécurité ni de perte de messages.
Comme nous l’avons écrit plus haut, la limite de la distribution est atteinte lorsque le
prix des communications dépasse le gain de la répartition. Il faut donc que les communi-
cations soient une préoccupation majeure des concepteurs de système multiagent.
100
Chapitre 4
La troisième difficulté associée aux systèmes répartis, c’est la distribution des charges.
On peut montrer qu’une distribution a priori des charges, même théoriquement optimale,
ne permet pas toujours d’obtenir l’efficacité maximale, et ce parce que les modèles de fonc-
tionnement de réseau ne sont pas parfaits [ESHH01]. Il faut donc pouvoir redistribuer
les tâches pendant l’exécution. Pour ce faire, nous avons conçu un système de redistribu-
tion dynamique des charges utilisant des agents mobiles en nous basant sur le standard
MASIF. Comme nous l’avons dit, les agents, de par leur indépendance, sont relativement
faciles à distribuer sur un réseau, ils sont donc très adaptés à la résolution de problèmes
de distribution de charges. Cependant leur indépendance peut compliquer la situation,
car aucun agent n’a de connaissance globale du système, or la distribution de charge a
pour but l’amélioration des performances, non pas d’un agent, mais du SMA dans sa
globalité. Nous avons donc décidé d’utiliser un système d’agrégation de préférences basé
sur la négociation [VEFS01] pour décider de la façon de redistribuer les tâches durant
l’exécution.
Dans l’étude précédente nous avons proposé une méthode de conception d’agents puis
leur affectation aux machines en tenant compte du poids de leurs communications et
de l’importance de leurs tâches. Cette distribution statique est faite a priori avant de
lancer l’exécution du système. Or, les agents sont autonomes et peuvent faire des choix
non déterministes ce qui peut engendrer des problèmes pendant l’exécution. Dans cette
section, nous allons présenter ces problèmes et proposer une solution basée sur les agents
mobiles.
101
Chapitre 4. La phase de redistribution dynamique de la répartition : ASMAA
102
4.1. Redistribution dynamique des charges : introduction de la mobilité
System Interoperability Facility [MAS, MBB+ 98, MBB+ 99]. MASIF est basé sur les
concepts systèmes d’agents (agence), places et régions. Une place regroupe les fonction-
nalités à l’intérieur d’une agence encapsulant certaines capacités et restrictions pour ses
agents. Chaque agence comprend au moins une place dans laquelle des agents s’exécutent.
Une région facilite la gestion de la plate-forme en regroupant des agences appartenant à
la même autorité. Le noyau de MASIF est formé par deux interfaces : l’interface MA-
FAgentSystem associée à chaque agence et fournit des opérations pour la gestion et le
transfert des agents, et l’interface MAFFinder associée à chaque région pour supporter la
localisation des agents, places et agences (voir figure 4.1).
103
Chapitre 4. La phase de redistribution dynamique de la répartition : ASMAA
Pendant l’exécution, notre idée consiste à permettre à chaque agent de garder une trace
locale de la fréquence, l’intensité et les partenaires de ses communications. Le besoin de
migration peut être déclenché de deux façons :
1. Puisque chaque agent conserve une trace locale de ses communications, il peut re-
pérer celles qui sont les plus fréquentes et les plus coûteuses. Il contacte alors le
manager de son agence et lui émet son souhait de se rapprocher de l’agent distant
avec qui il a des communications importantes. Ce manager contacte à son tour le
manager de l’agence où se trouve l’autre agent et négocie avec lui le meilleur scénario
pour rapprocher les deux agents. Ce déplacement des agents doit prendre en compte
certaines contraintes telles que la capacité de la machine sur laquelle ils vont mi-
grer et ne doit pas aussi condamner les autres communications. En effet, rapprocher
deux agents pour faciliter leurs communications ne doit pas empirer l’état d’autres
communications. La décision de migration est basée sur un consensus que doivent
atteindre les deux managers selon un processus qu’on présentera plus tard dans ce
document.
2. Périodiquement, les agents envoient la trace locale de leurs communications aux
managers de leurs agences qui peuvent ainsi former une trace globale des communi-
cations de l’agence. Ils font l’analyse de ces communications et négocient entre eux
pour décider quels agents déplacer afin d’améliorer l’état du système. L’atteinte de
consensus entre managers se fera selon le processus signalé dans 1.
Dans les deux cas, les managers doivent être en liaison avec l’interface du MAFFinder
104
4.2. Conclusion
Réalisation
Pour l’implémentation de ce travail, nous avons commencé par le module de migra-
tion. Dans la littérature, deux types de mobilité existent : mobilité forte et mobilité faible
[MBB+ 98]. La première permet la transmission des données et l’état d’exécution d’un
agent, la seconde ne permet que la transmission des données d’un agent. Pour la réali-
sation de nos agents, nous avons choisi d’utiliser Java puisque c’est un langage qui les
avantages de portabilité, polymorphisme, mobilité du code, etc. Mais la machine virtuelle
de Java (JVM) ne permet pas de capturer l’état d’exécution des threads qui permettent
la programmation des agents. Nous avons alors implémenté une migration faible. Les
managers sont des processus qui tournent continuellement à l’écoute des requêtes de mi-
gration. Ces processus sont basés sur des threads qui communiquent par des trames TCP.
Les agents qui souhaitent migrer ainsi que les managers utilisent des sockets pour leurs
connections. En effet, lorsque un agent se connecte à un numéro de port sur lequel tourne
un manager, un nouvel objet socket est alloué à l’agent pour servir à sa communication
puis le manager reprend son écoute.
4.2 Conclusion
Dans cette partie, nous avons présenté une méthode de conception et d’implémentation
de systèmes multi-agents pour la résolution de problèmes distribuée. Notre but était que
les avantages des SMA en matière de distribution physique des tâches soient, autant que
possible, mis en valeur.
Ici, les agents sont entièrement coopératifs puisqu’ils fournissent aux managers toutes
informations concernant leurs communications. Mais, notre but est de pouvoir appliquer
la même base au partage de ressources informatiques par plusieurs utilisateurs. Cela pose
de nombreuses difficultés puisque les agents ne seront plus coopératifs mais compétitifs
puisqu’ils devront optimiser leur propre fonctionnement même au dépends de tous les
autres.
Nous nous intéressons, de plus, aux modifications à apporter pour pouvoir faire adap-
ter notre méthode à l’implémentation de SMA sur des systèmes ouverts (comme une
association de possesseurs d’ordinateurs reliés par Internet). Cette dernière perspective
pause de nombreux problèmes, à la fois à cause de potentielles failles de sécurité et des
difficultés liées aux systèmes ouverts mais aussi à cause de l’hétérogénéité des machines
ainsi reliées. Ce dernier problème pourrait être facilement résolu grâce à l’utilisation de
JAVA.
105
Chapitre 4. La phase de redistribution dynamique de la répartition : ASMAA
106
Chapitre 5
Notre conception, très utilitaire, des agents nous pousse à avoir une vision très concrète
de ces derniers. C’est cette idée de l’agent que nous allons décrire ici. D’une certaine façon,
les définitions habituelles des agents sont souvent très abstraites et ne correspondent donc
pas à notre vision plus pratique des agents. Nous proposons donc ici un modèle d’agent
qui corresponde mieux à nos besoins, d’autant plus qu’il est suffisamment générique pour
prendre en compte les différents types d’agents qui peuvent être considérés lors de la
conception d’un système multiagent (voir les sections précédentes).
On pourrait considérer que cela n’a pas d’importance, pourtant, un modèle logiciel est
destiné à simplifier la programmation en posant clairement tout ce qui doit être pris en
compte lors de la conception d’un système. En ce sens, un modèle d’agent doit prioritai-
rement rappeler les caractéristiques des agents que les concepteurs peuvent avoir survolé
trop rapidement, et leur contenu intelligent ne fait pas partie de celles-là.
Sur de nombreux plans, l’agent que nous allons décrire dans la suite est extrêmement
anthropomorphe (comme le montre notre schéma), il ne se définit pas par ses entrées et
ses sorties mais plutôt par ses différentes interactions avec le monde extérieur. Ainsi, nous
ne présumons en rien, ni de forme finale implémentée (du nombre de processus etc.) ni
de la représentation de la partie “intelligente” ou réactive de l’agent. D’une certaine façon
notre modèle d’agent est uniquement physionomique.
L’agent se répartis en plusieurs “modules” (Figure 5.1)(c’est le terme que nous uti-
liserons pour décrire les différentes caractéristiques qui font d’un objet informatique un
agent) :
– Il possède un module de réflexion et d’action, c’est lui qui agit sur l’environne-
ment mais aussi qui analyse les connaissances sur l’environnement décide des actions
à réaliser en fonction de ses connaissances. C’est dans ce module que l’on construit
la représentation (cognitive ou non) de l’agent, qu’il soit BDI, réseau de neurones
ou objet construit en programmation logique.
– Il est construit autour d’un module central, lequel sert simplement de lien entre
les autres modules. Ce module n’est pas nécessaire mais il permet de construire des
107
Chapitre 5. Un modèle d’agent centré autour de la distribution des charges et des communications
Module de réflexion
Interface Messages et de travail. (à
système mono construire en fonction
de de chaque utilisation)
gestion
Module central
Module
d’interaction
Modules de
communication
spécifique ou de
mouvements…
Client Serveur
agents dont les composants sont interchangeables ce qui peut présenter un important
gain de temps lors des phases d’implantation.
– L’agent peut être doté d’une interface de contrôle (les agents que nous avons
conçus pour DOGS en étaient dotés). Cela permet de surveiller le bon fonctionne-
ment du système et en cas de problème de tenter de régler la situation (en “tuant” des
agents, en relançant des tâches . . . ). L’interface de contrôle n’est pas normalement
destinée à l’utilisateur de l’application mais aux concepteurs et aux administra-
teurs du système qui doivent pouvoir corriger les erreurs potentielles. Nous avions
de plus doté nos agents d’un système de “log” qui note dans un fichier toutes les
actions réalisées. Il faut cependant noter que les accès disques étant extrêmement
longs comparés aux autres actions, cela ralentit énormément le système dans son
ensemble.
– Les agents sont des entités “sociales” en ce qu’elles communiquent non seulement
avec l’utilisateur mais aussi ensemble. La dernière fonctionnalité essentielle des
agents réunit ses différents moyens de communications. Elle est décrite sous l’ap-
pellation “module d’interaction”. ce module peut être séparé en différents sous
108
modules comme par exemple les modules de communication ou les modules de
déplacement. Les modules de communications peuvent être nombreux pour un seul
agent car les agents, comme les humains, doivent pouvoir utiliser différents media
en fonction de leurs interlocuteurs. Par exemple, il est normalement très préférable
de communiquer par partage de mémoire lorsque c’est possible (quand les deux in-
terlocuteurs sont deux “threads” placés sur le même processeur, etc.). même lorsque
les communications sont distantes, il faut choisir son protocole de communication
en fonction de ses besoins. Il peut donc être préférable que les agents aient plusieurs
media de communication à leur disposition. On peut imaginer de construire des
communications centralisées (au moins pour les communications distantes), dans
ce cas chacun des modules de communication est alors l’interface entre les autres
modules de l’agent et les outils de communication centralisés. Les modules de
mouvement sont une abstraction représentant les différents outils nécessaires à la
migration dans le cas où les agents sont mobiles. Ils contiennent les différentes fonc-
tions nécessaires au transfert des agents (migration forte ou faible . . . ) mais aussi
les différentes fonctions nécessaires aux autres étapes d’une migration (demande de
migration . . . ). Le schéma présente un agent ayant un module de communication
lui-même constitué d’un client pour les envois de messages et d’un serveur pour les
réceptions (utilisant des datagrammes UDP par exemple).
109
Chapitre 5. Un modèle d’agent centré autour de la distribution des charges et des communications
110
Chapitre 6
Résultats obtenus
111
Chapitre 6. Résultats obtenus
un abonné vers une autre bibliothèque entraîne le risque de voir ce client rompre son
abonnement pour s’inscrire à une bibliothèque plus performante.
Chaque bibliothèque doit remplir les fonctions suivantes :
– Elle doit gérer un catalogue de différents types de livres (il existe des fichiers “libres”
(c’est-à-dire gratuits et libres à la diffusion que les abonnés peuvent donc copier à
volonté) et des fichiers “qui s’appellent revient” et dont un nombre fixé de copies peut
exister à un instant donné). Pour cette seconde catégorie, les abonnés ne peuvent lire
le fichier, lequel est crypté, qu’en utilisant une interface fournie à cet effet pendant la
durée de l’emprunt. Après quoi le fichier doit être détruit de façon à ce qu’un autre
abonné puisse à son tour emprunter le livre virtuel. L’existence de ces fichiers à durée
de vie limitée complexifie grandement l’application. Il existe différentes technologies
qui permettent l’existence de ces fichiers avec une sécurité plus ou moins grande
(des fichiers Acrobats non reproductibles à durée de vie limitée aux cartes à puce).
Ces différentes solutions sont plus ou moins sûres mais elles rendent malgré tout la
copie des fichiers assez complexes pour que la plupart des clients ne la trouvent pas
rentable (la sécurité est semblable à celle des livres réels qui peuvent être copiés avec
une photocopieuse à condition d’avoir assez de temps et de papier). Cependant ces
problèmes de sécurité ne sont pas vraiment le sujet de notre travail donc la relative
sécurité de ces fichiers sera posée en hypothèse.
– Chaque bibliothèque doit pouvoir gérer des informations sur ses clients, de façon à
pouvoir identifier leurs requêtes, connaître leur situation (le nombre de livres qu’ils
ont empruntés, leurs retards de paiement d’abonnement . . . ) mais aussi de façon
à pouvoir permettre leur identification par les autres bibliothèques lorsqu’elle les
redirige vers ces dernières.
– Pour pouvoir diriger efficacement les clients vers les autres bibliothèques, il est
nécessaire que chaque bibliothèque indexe (au moins partiellement) le catalogue des
autres. Il faut de plus qu’elle juge de la capacité de chacune à donner de bons conseils
dans chacun des domaines spécialisés (littérature classique, scientifique, anticipation
...)
– Chaque bibliothèque doit, de plus, être dotée de fonctions “d’intelligence du bi-
bliothécaire” de façon à pouvoir répondre à des requêtes complexes du type : “je
cherche une aventure médiévale fantastique en un seul volume et je n’aime pas les
auteurs suivants . . . ”. Pour réussir cela, elles peuvent se baser sur les opinions de
leurs abonnés ayant déjà emprunté le volume, sur les critiques littéraires . . .
– Enfin, elle doit permettre les interactions entre ses abonnées de façon à ce qu’ils
puissent se transmettre des informations, des avis, des critiques . . .
112
6.2. Le réseau de bibliothèques virtuelles
Nous montrons, par exemple, l’un des réseaux de Petri obtenus lors de la phase de
décomposition. Les tâches ont ensuite été partagées entre les agents en fonction de la
décomposition (figure 6.1) mais aussi de l’analyse client. En effet, comme plusieurs pro-
tagonistes coopèrent dans cette application, il était nécessaire de prendre tout en compte
dans le système.
Requête client
Demande de
conseil Recherche dans l’index
Trouvé
Non Oui
Procédure
d’emprunt
Envoi
Procédure de
conseil
Sélection
Autre
locale
sélection
début
Choix du
client
gestion conseil
Procédure
Envoi d’une requête
d’emprunt
Envoi
Livre(s) fin
Fin
envoyés
New request
Nous nous sommes concentrés sur les tâches incombant aux bibliothèques.
Elles se séparent en deux catégories largement parallèles, le conseil et la gestion. Le
conseil pouvant lui-même être parallèle sous certaines conditions. En effet, ces processus
utilisent a priori les mêmes données (caractéristiques objectives des ouvrages, mais aussi
critiques, avis etc.) et le même code. Il faut donc partager les informations pour minimiser
le poids de la redondance. Pour cela, la seule solution satisfaisante était de créer des
113
Chapitre 6. Résultats obtenus
agents bibliothécaires conseils spécialisés. Cela présente des avantages annexes : il devient
impossible qu’un bibliothécaire conseille fortement un livre qui n’est plus en rayon car un
autre bibliothécaire l’a déjà fortement conseillé à un client. En ayant un seul conseiller,
on peut construire une stratégie cohérente de conseil qui permette d’éviter que certains
ouvrages soient très largement conseillés tout en étant perpétuellement inaccessibles.
Il nous est donc apparu que les processus de conseil étaient réellement parallèles aussi
longtemps qu’ils ne concernent pas les mêmes livres. Nous avons décidé de suivre une
classification classique de façon à ce que les différences entre les conseillers soient simples
à assimiler par les clients. Nous avons donc réparti les connaissances sur les ouvrages et les
processus de conseil selon des catégories standards (il y a une section et un conseiller en
littérature française du XIX eme siècle, la même chose pour l’anticipation, l’informatique
. . . ).
Les processus de décision et de sélection d’ouvrages dépendent des abonnés et doivent
pouvoir être envoyés sur une autre bibliothèque si les utilisateurs sont redirigés vers cette
dernière pour pouvoir répondre à une requête. Il est donc raisonnable de placer ces proces-
sus dans un agent mobile qui “naît” sur l’ordinateur de l’abonné puis migre de bibliothèque
en bibliothèque avant de revenir avec les ouvrages recherchés. Ces agents seront des en-
tités standard divergeant uniquement par leur contenu “intelligent” destiné à la prise de
décision (comment choisir un ouvrage, emprunter ou seulement proposer une solution à
l’abonné etc.).
Ils peuvent donc permettre d’intégrer la sécurité des fichiers à durée de vie limitée en
servant d’interface de lecture.
Notre architecture s’articule finalement autour de trois types d’agents :
– Les Libraires Généraux qui gèrent le catalogue et les fichiers clients de la bi-
bliothèque car les deux sont liés par les procédures d’emprunt. Ils gèrent aussi les
commandes de la bibliothèque qui sont difficilement séparables du catalogue.
– Les libraires spécialistes dits Libraires de Section qui gèrent une section de la
bibliothèque (ce sont eux par exemple qui proposent l’achat de nouveaux ouvrages
à leur section de la bibliothèque ou le retrait d’ouvrages peu appréciés). Ils doivent
aussi conseiller les clients dans la limite de leur domaine et les diriger vers un autre
domaine en cas d’erreur d’orientation. Enfin ils doivent indexer la partie du catalogue
des autres bibliothèques qui est lié à leur spécialité et évaluer la capacité de conseil
de ces dernières dans leur domaine de façon à pouvoir rediriger les clients aux cas
où ils ne puissent donner satisfaction à ces derniers.
– Les agents Clients, qui migrent vers les différentes bibliothèques, empruntent et
“rendent” les ouvrages (en prouvant que les copies ont été détruites). Ils doivent
aussi demander des conseils aux Libraires de sections et échanger des informations
(essentiellement des critiques d’ouvrages ou de services de chaque bibliothèque) avec
les autres abonnés. Ils doivent posséder des informations sur les livres (comme par
exemple, l’opinion des abonnés qu’ils représentent ou celles des différents libraires
de sections rencontrés au cours de leurs migrations). Ces informations sont en effet
cruciales dans le choix d’ouvrages à emprunter.
Lorsque ces agents on été délimités, il était nécessaire de les implanter de façon à
tester l’efficacité du système conçu. Pour construire ce prototype, nous avons utilisé le
langage CLAIM et la plateforme distribuée SyMPA [FSS03b, FSS03a, SFS03, KSFS04]
114
6.2. Le réseau de bibliothèques virtuelles
115
Chapitre 6. Résultats obtenus
Les agents Clients migrent depuis leur site d’origine (l’ordinateur de l’abonné vers
les bibliothèques auxquelles leur propriétaire est abonné pour y chercher des ouvrages en
suivant des requêtes multi-critères. Les agents Clients doivent commencer par s’inscrire,
après quoi, ils peuvent accéder à l’index de la bibliothèque. S’ils trouvent un ouvrage qui
satisfait les différents critères, ils empruntent le livre s’il est toujours disponible. S’ils en
trouvent plusieurs, et ne peuvent décider seuls lequel choisir, ils migrent vers la section
correspondante et demandent conseil au bibliothécaire de section ou aux autres clients
présents dans cette section. S’ils ne trouvent aucun livre correspondant à leurs critères, ils
demandent au bibliothécaire de section s’il a connaissance de bibliothèques qui pourraient
répondre à ses attentes.
L’un des aspects les plus intéressants de la distribution dynamique des sections sur
le réseau au cours de l’exécution se rapporte aux questions de distribution de charges :
lorsque l’une des sections est surchargée de clients, les autres sections avec lesquelles
elle partage son site peuvent migrer. Ainsi le site se décharge vers d’autres sites moins
encombrés ce qui accélère non seulement la section restée sur le site surchargé mais aussi
les autres sections qui se sont déplacées. On représente, figure 6.3, la migration de deux
sections de la bibliothèque avec leurs clients causée par une surcharge du système lors de
l’arrivée d’un nouveau client.
Une version simplifiée de notre architecture a été déployée en utilisant SyMPA que
nous présentons rapidement ultérieurement.
116
6.2. Le réseau de bibliothèques virtuelles
INDEX
Manager de site
Bibliothécaire
Bibliothécaire de
section
Client
une section quasiment vide. Cependant, la validité des résultats dépend de la longueur
des périodes de population et bien sûr du nombre d’agents clients lancés sur la biblio-
thèque. La figure 6.5 qui présente les temps d’attente moyens dans les différentes sections
montrent que la redistribution des sections réduit le temps d’attente pour tous les agents
quelle que soit la section qui les concerne. Nous devons noter que les délais introduits
par la plateforme lors des phases de migration sont assez importants de façon à pouvoir
observer le comportement des agents. Les caractéristiques de la plateforme introduisent
aussi des délais de l’ordre de 30 secondes pour la migration d’une section.
117
Chapitre 6. Résultats obtenus
180
160
Te m ps d'a tte nte -
1 ordinateur - 4
sections
140
2 ordinateurs, 2
120 sections statiques
2 ordinateurs - 4
100 sections dynamiques
80
60
C1S1 C2S1 C3S1 C4S1 C5S1 C6S1
Agents
Fig. 6.4 – Temps d’attente des agents dans la première section de la bibliothèque en
fonction de l’architecture (différentes courbes) et du nombre d’agents présents
118
6.2. Le réseau de bibliothèques virtuelles
150
T e m p s d 'a tte n te -
140
130
Agents Section 1
120
Agents Section 2
110
Agents Section 3
100
Agents Section 4
90
80
1 2 3
Categorie du test
Fig. 6.5 – Temps d’attente dans les différentes sections selon le type de test réalisé
119
Chapitre 6. Résultats obtenus
120
Quatrième partie
121
Chapitre 1
Introduction
123
Chapitre 1. Introduction
Il faut aussi noter que l’architecture et l’outil présenté ne sont pas des outils de grid-
computing mais des outils de partage de ressources qui peuvent permettre de déployer une
grille (ou simplement des tâches isolées) sur un ensemble d’ordinateurs partagés par leurs
utilisateurs, ASMAA n’étant, d’une certaine façon qu’une architecture de grille parmi
d’autres. Cependant, puisque ce système a été conçu dans le but de permettre la distribu-
tion d’outils basés sur ASMAA sur un parc d’ordinateurs partagés, on peut le considérer
comme une évolution d’ASMAA pour la gestion de systèmes partagés.
124
1.2. Un outil de partage de ressources informatiques
rait donc servir qu’à des travaux d’importance minime, mais dans ce cas, il n’a plus
vraiment de raison d’être. Les tâches doivent donc être capables de choisir de migrer
ou non en fonction de leurs connaissances de leurs propres besoins.
– La quatrième raison est aussi basée sur un problème de sécurité : le serveur central
(ou les serveurs intermédiaires selon le modèle de construction du système) devrait
être accessible de toutes les machines hôtes pour permettre le transfert d’informa-
tions entre les hôtes et le distributeur de charges. Or le serveur est une ressource
vitale car il est le centre du système, toutes les migrations nécessitant son interven-
tion. Il est donc à la fois une cible évidente pour toute agression contre le système et
une victime naturelle difficile à défendre car ouverte aux quatre vents. Pour éviter
l’apparition d’une telle faille de sécurité, il était impossible d’utiliser un système
même partiellement centralisé.
Nous avons donc décidé de tenter de construire une architecture entièrement distribuée
constituée uniquement d’utilisateurs. Une solution de ce type présente des limites. La
première d’entre elles est qu’il est pratiquement impossible que tous les hôtes du réseau
aient des informations à jour sur les autres hôtes du réseau, car cela entraînerait une
saturation complète du réseau. En fait, le simple fait que chaque hôte puisse conserver
des informations sur tous les autres, même si elles ne sont pas à jour risque de surcharger
le système inutilement. En effet, le nombre d’hôte potentiel n’est pas limité. De plus ces
informations seraient pour la plupart inutiles car les ordinateurs concernés ne sont pas
toujours connectés au système de partage.
Cette solution présente de plus une limite importante d’utilisation, l’utilisation d’agents
mobile et l’absence de serveurs entraîne la distribution du poids du système sur tous les
hôtes. Donc si ces derniers sont très chargés, l’utilisation du système n’aura comme seul
effet que de les surcharger encore plus sans rapporter le moindre gain. Ce système ne
devrait donc être utilisé que dans le cas où les ressources ne sont pas déjà saturées.
Il faut donc accepter que les connaissances de chaque processeur seront partielles et
datées car il sera très difficile de les remettre à jour en temps réel. A partir de ces limites,
nous avons décidé de concevoir le système que nous allons décrire dans ce qui suit.
Nous avons fixé plusieurs hypothèses sur notre travail [KSFS04], nous allons les rap-
peler ici.
– Le système multiprocesseur considéré est distribué (soit sur Internet soit au moins
sur un réseau fermé mais important, à la fois en nombre de machine et en surface
réelle (le but de notre système est de permettre l’utilisation de machines en dehors
de leurs horaires normaux).
– Le système informatique considéré est ouvert, les hôtes peuvent se connecter et se
déconnecter au système de partage.
– Le système doit pouvoir être hétérogène : les ordinateurs connectés peuvent être de
type différent (processeurs, OS . . . ).
– Le système n’utilise pas de serveur centralisé (pour les raisons citées précédemment),
chaque hôte a une connaissance partielle du système et les processus migrent sur le
réseau en fonction des connaissances de leur hôte d’accueil.
– Nous ne tenterons pas de garantir la connexité du système partagé (nous proposons
des solutions pour l’obtenir) car ce n’est pas une nécessité dans notre cas. Nous ne
pouvons que garantir l’effort maximal pour obtenir un système suffisant aux besoins
125
Chapitre 1. Introduction
126
Chapitre 2
127
Chapitre 2. Quelle clientèle pour un système de partage
128
2.2. Les différents types de communautés et leurs spécificités
129
Chapitre 2. Quelle clientèle pour un système de partage
130
2.2. Les différents types de communautés et leurs spécificités
certaine mesure, nous servir de modèle. Les membres sont des particuliers ou des
équipes de recherche liés par un intérêt scientifique spécifique qui s’inscrivent lors-
qu’ils téléchargent la plateforme de partage. Ils utilisent Internet pour mettre en
commun des ressources informatiques. Il existe deux types d’utilisateurs, les cher-
cheurs du domaine sont des utilisateurs actifs, ils lancent des tâches distantes, alors
que les utilisateurs particuliers se bornent à prêter leur puissance de calcul.
– Sécurité
La sécurité au sein du groupe n’est pas garantie. En effet les membres sont sans
doutes recensés lors de leur téléchargement de la plateforme mais ils ne sont sé-
lectionnés que sur leur bonne fois (puisque la plupart d’entre eux sont seulement
prêteurs de puissance). La nature non commerciale de l’opération ne la met pas
à l’abri d’attaques informatiques spécifiques. Il est donc nécessaire de protéger les
sites de recherche. Cependant, la nature exclusive des tâches transférées diminue les
risques pour les utilisateurs.
– Utilisation
Les tâches distantes sont des calculs répartis lancés par certains utilisateurs spéci-
fiques (les chercheurs). Les processus perpétuels sont en général exclusivement réali-
sés par les ordinateurs de contrôle des senseurs. Les “expéditeurs” de tâches sont peu
nombreux et donc facilement identifiables. Les tâches peuvent communiquer entre
elles mais ne peuvent pas produire d’autres tâches. Si des calculs supplémentaires
sont nécessaires, elles doivent rapporter leurs résultats sur leur site d’origine qui
lancera les nouvelles tâches.
131
Chapitre 2. Quelle clientèle pour un système de partage
132
Chapitre 3
Dans cette section, nous allons décrire notre système de partage. Cela exige une des-
cription de l’architecture logicielle de notre application mais aussi du système informatique
qui lui est sous-jacent. Nous pourrons ainsi formaliser toutes les hypothèses de fonction-
nement de notre système dans son ensemble.
133
Chapitre 3. Description des ressources partagées
Il faut de plus ajouter que la description que nous avons utilisée impose quelques res-
trictions, par exemple, comme nous nous basons sur une estimation de la qualité de l’unité
de calcul, les ordinateurs multiprocesseurs ne peuvent pas être jugés correctement, cepen-
dant, il suffirait de construire une application test destinée à juger de la puissance de calcul
de l’ordinateur en prenant en compte les caractéristiques d’une machine multiprocesseur
(parallélisme . . . ).
Il faudrait cependant approfondir nettement le mode de représentation des sites pour
pouvoir prendre en compte les architectures basées sur des processeurs spécifiques (comme
les processeurs vectoriels). Cependant, il suffirait de plus donner une note générique à
l’unité de calcul mais plusieurs notes selon le type de calcul à effectuer. Spécifier les
caractéristiques de l’unité de calcul de cette façon nous est apparue superflue dans le
travail suivant puisque nous envisagions l’utilisation de notre application dans le cadre
d’un parc de micro ou de mini ordinateurs (PC, Mac, stations SUN . . . ).
Notre système de partage de ressources est destiné à permettre le partage des res-
sources informatiques entre plusieurs utilisateurs connectés par un réseau. Nous ne fai-
sons pas d’hypothèses spécifiques sur la nature physique du réseau considéré, cependant,
l’application a été conçue pour être utilisée sur un réseau IP câblé.
Les caractéristiques des réseaux IP actuels (utilisant le protocole IP v4) compliquent
la construction d’une architecture distribuée dynamique. En effet, pour compenser la pe-
titesse du nombre d’adresses IP utilisable avec IP v4, les fournisseurs de service Internet
(aussi bien Wanadoo que la plupart des laboratoires de recherche) ont recours à l’uti-
lisation d’adresses dynamiques. Cela engendre une difficulté supplémentaire puisque ces
ordinateurs s’ils s’éteignent perdent leur adresse et sont donc très difficiles à retrouver.
Cette difficulté disparaît avec IP v6 car le nombre d’adresses IP v6 est suffisant pour que
tous les ordinateurs aient une adresse spécifique. Cependant, nous ne pouvons pas nous
baser sur les spécifications d’IP v6 puisque le protocole en est toujours à sa phase de test
et qu’on ne peut pas être sûr qu’il sera jamais massivement utilisé.
L’application peut être transposée sans difficultés réelles sur un réseau sans fils.
En effet, les bornes de connexion à distance n’étant fondamentalement différentes des
routeurs d’un réseau filière, la principale différence entre les deux architectures provient
plutôt de la capacité de mouvement des utilisateurs de réseaux sans fils, ce qui induit la
possibilité que les utilisateurs soient momentanément déconnectés du réseau. Cependant
cette possibilité s’apparente pour ce qui est des effets à des coupures de réseaux filières,
même si en général, les coupures de réseaux filières touchent une plus large échelle. Les
architectures dites “ad hoc” pourraient être traitées de la même façon que les architectures
sans fil basées sur des bornes, cependant il se peut que leurs spécificités entraînent des
simplifications des hypothèses à la base de notre système et qu’il soit dès lors plus rentable
d’utiliser le réseau de relations réseaux de chaque ordinateur plutôt que d’en construire
un nouveau, applicatif.
134
3.2. Description du système logiciel
135
Chapitre 3. Description des ressources partagées
Java (JVM) qui par sa très large distribution permettait l’exécution de la plateforme de
partage sur un vaste éventail de configurations tout en conservant certains des avantages
de ces dernières. Il nous est donc apparu que si les tâches peuvent être compilées pour un
type d’ordinateur (par exemple pour un PC sous Windows), la plateforme elle-même doit
pouvoir fonctionner sur toutes les configurations.
Il faut cependant se rappeler que notre but est de construire un outil qui permette de
partager des ressources, pas de construire un système distribué ou un substitut de grille
complet. Nous proposons une solution qui permette d’exécuter des tâches en les distribuant
sur un parc informatique sans avoir à utiliser de systèmes de “load-balancing” qui exigerait
pour fonctionner une certaine centralisation ainsi que des connaissances sur l’occupation
des sites qui non seulement sont assez incompatibles avec la confidentialité recherchée
mais supporte assez mal le passage à l’échelle ainsi que l’apparition et la disparition des
différents sites en fonction de l’utilisation qu’en a leur propriétaire.
Pour résumer, l’existence d’un système comme celui que nous voulons construire exige
que plusieurs fonctions très différentes soient remplies :
– Les tâches doivent pouvoir se déplacer d’un site à l’autre et s’exécuter sur le plus
grand nombre de sites possibles. Elles doivent de plus être protégées des agressions
et aussi anonymes que possible.
– Il faut minimiser la centralisation du système et donc éviter les serveurs ou les autres
formes de centralisation car ils représentent des failles de sécurité naturelles mais
aussi parce qu’ils rendent difficile le passage à l’échelle.
– Le système doit être maintenu, il faut conserver suffisamment d’informations sur les
différents sites pour que le système puisse fonctionner, mais il faut aussi prendre en
compte les sites présents et absents, permettre le déchargement des sites surchargés.
– La sécurité des utilisateurs doit être assurée . . . autant que faire se peut.
– Chaque utilisateur doit pouvoir avoir accès aux sites qui correspondent le mieux à
ses besoins.
Pour répondre à ces quatre exigences, nous avons imaginé une architecture à base
d’agents. En effet, ils présentent plusieurs intérêts évidents dans notre situation : en
premier lieu, ils permettent de gérer des intérêts plus ou moins conflictuels (chaque agent
tentant de répondre aux exigences de son propriétaire, la première desquelles est sans
doute sa propre sécurité, exigences qui ne sont pas nécessairement compatibles avec celles
des autres utilisateurs). En second lieu, ils offrent un très haut d’encapsulation, permettant
par exemple d’associer les tâches et l’outil qui les dirige vers un site adapté à leurs besoins,
ce qui permettrait de minimiser le besoin de centralisation. Enfin, l’utilisation d’agents
mobiles parcourant le réseau peuvent être un outil de propagation des remises-à-jour des
informations locales d’autant plus que si les mêmes agents transportent les processus et
répandent les informations, le poids pour le système dans son ensemble ne devrait pas
être important.
Nous avons donc conçu notre architecture autour de trois classes d’agents différents.
Une classe de d’agents Managers, une classe d’agents Sniffers et une classe d’agents Tasks.
Les trois types d’agents (dont nous décrirons les prérogatives plus loin dans cette section
et le contenu algorithmique dans la section suivante) se partagent les différentes fonctions
citées précédemment :
– Les agents Managers conservent les connaissances sur le système, chaque site est géré
136
3.3. Description des prérogatives des différents agents
par un Manager qui connaît son état mais possède aussi une base de connaissances
sur certains autres sites du système. Ils gèrent aussi la sécurité de leur site et les
intérêts du propriétaire du site.
– Les agents Sniffers se déplacent de site en site en remettant à jour les connaissances
des Managers sur les différents sites. Ils gèrent aussi les intérêts de leur utilisateur en
cherchant des sites correspondant aux besoins de ce dernier (ils ramènent ensuite ces
informations sur leur site d’origine). Ils proposent, de plus, aux Managers d’indexer
des sites correspondant à leurs exigences (ce qui rend ces derniers plus accessibles).
– Les agents Tasks transportent les tâches à réaliser de site en site. Ils vérifient si
le site sur lequel ils se trouvent propose un service suffisant pour la tâche qu’ils
transportent et si ce n’est pas le cas choisissent une bonne destination (à partir des
connaissances du Manager local et de leurs connaissances propres) et migrent vers
cette destination puis reprennent l’exécution de leur tâche.
137
Chapitre 3. Description des ressources partagées
138
3.3. Description des prérogatives des différents agents
important qui serait dès lors bloqué sur cet hôte jusqu’à ce qu’il ait complété la tâche qui
lui a été assignée.
Cependant, nous devons assurer la sécurité des agents Tâches, ils doivent donc être
libres et on doit garantir que leur code repart inchangé.
Les agents Tâches doivent être protégés des malveillances. Il faut éviter qu’ils puissent
être noués de messages ou corrompus. Pour commencer il ne faut pas que n’importe quel
agent puisse entrer en communication avec eux, surtout s’ils sont sur la même machine.
Pour empêcher cela, il est nécessaire de s’assurer que les canaux de communication des
agents Tâches sont privés. Pourtant, il est aussi nécessaire que le Manager de plateforme
puisse retrouver l’identité de l’utilisateur de chacun de ses ports de communication. Pour
cela nous devons permettre aux agents Managers d’avoir accès à cette information par
exemple au moment de l’attribution des ports de communication aux agents (si nous déci-
dons que les agents peuvent avoir leur module de communication particulier). Cependant,
cette information doit être utilisée le moins possible. Il est donc logique de doter chaque
agent Tâche d’un module de communication spécifique destiné à ses communications
avec l’agent Manager. Ce mode de communication doit être suffisamment sûr pour qu’il
ne puisse pas être usurpé par d’autres agents tournant sur la plateforme. On doit aussi
assurer que les agents tournant sur une machine ne peuvent pas avoir accès au contenu des
autres agents, même s’ils connaissent le code de ces derniers. Cette protection doit être
étendue au Manager de plateforme qui ne doit pas avoir non plus accès aux variables et
méthodes de l’agent. Ainsi, il n’est pas possible de laisser les Managers protéger l’intégrité
logicielle des agents car on ne peut pas garantir leur bonne volonté.
Etant donné que ces agents doivent transporter les tâches à réaliser jusqu’à une ma-
chine efficace, il faut que ces agents soient mobiles, qu’ils soient capables de vérifier si
l’hôte qui les accueille répond à leurs besoins et aussi de choisir une machine vers laquelle
migrer. Ils doivent donc avoir les modules suivants :
– Encapsulation de la tâche à réaliser,
– Mobilité,
– Choix de la destination en cas de mobilité,
– Evaluation de la satisfaction procurée par l’hôte actuel,
– Clé de décryptage pour pouvoir lire les messages laissés par les agents Sniffers avant
de les rendre publics,
– Adresse de l’hôte d’origine pour pouvoir retourner sur leur hôte d’origine, une fois
leur tâche réalisée,
– Ils peuvent aussi avoir un module de communication (au cas où celles-ci sont per-
mises).
Les agents Tâches sont à peine plus complexes que les agents Sniffers. Les seules
différences avec l’agent Sniffer sont qu’ils migrent toujours vers le meilleur hôte possible
et qu’ils prennent en compte les messages laissés par les agents Sniffers sur le tableau de
l’hôte. L’algorithme de migration des agents Tâches est donc le suivant :
1. Si l’agent a fini sa tâche, il retourne sur son hôte d’origine ou communique son
résultat à qui de droit.
2. Evaluation de l’hôte actuel (en récupérant les données de l’agent Manager en “temps
réel”), cette action est faite à heure fixe (par exemple, par une gestion d’événements).
139
Chapitre 3. Description des ressources partagées
140
3.3. Description des prérogatives des différents agents
– Ils doivent avoir la possibilité de revenir sur une machine spécifique et de laisser
un rapport de leurs explorations (comme par exemple revenir sur leur machine
d’origine et déposer là une carte de leurs explorations). Il doit cependant aussi être
possible de créer des agents Sniffers qui ne connaissent pas leur expéditeur. Cela
peut devenir nécessaire si l’utilisateur a des raisons de penser que quelqu’un peut
avoir des intentions malveillantes à son égard.
En effet, la sécurité des Sniffers pourrait ne pas paraître être une priorité mais les
Sniffers d’un utilisateur connu peuvent être attaqués (ou manipulés) de façon à réali-
ser une forme de déni de service en empêchant les Sniffers de cet utilisateur d’atteindre
des machines efficaces soit en les bloquant soit en les envoyant sur de mauvaises pistes.
D’autres attaques plus graves sont aussi possibles. Il doit donc être possible pour certains
utilisateurs d’utiliser des agents Sniffers anonymes pour garantir la sécurité de leurs ap-
plications, même si cela se fait au détriment de certains des services que peuvent fournir
les Sniffers à leurs propriétaires.
Comme nous l’avons dit précédemment, les Sniffers ont trois buts différents mais
complémentaires. Ils doivent à la fois explorer le réseau à la recherche d’hôtes adaptés
aux tâches que l’utilisateur désire lancer et en même temps ils participent à l’évolution
de la structure du système dans son ensemble en proposant des modifications de la liste
de connaissances des machines du système en fonction de leurs exploration du réseau
(cela permet de mettre à jour les liens défectueux ou de remplacer une connaissance
par une autre plus pertinente). Leur dernière raison d’être est qu’ils transportent des
informations sur les hôtes qu’ils ont traversés et les ramènent à leur hôte d’origine, pour
que celui-ci puisse se construire une modélisation du système dans son ensemble (car
on peut penser que certaines caractéristiques du système sont très stables, comme la
vitesse des communications à certaines heures, la qualité des machines en fonction de leur
emplacement géographique etc.).
Pour remplir ces deux tâches, les agents ont besoin de plusieurs fonctionnalités diffé-
rentes. Ils doivent être :
– Complètement mobiles,
– Capables de conserver un modèle de chacun des hôtes traversés,
– Capables de retourner sur leur machine d’origine,
– Capables de choisir leur prochaine destination en fonction des connaissances de
l’hôte sur lequel ils se trouvent,
– Capables de crypter et décrypter certains messages qui leur seraient destinés (il
devraient pouvoir lire sur le tableau l’emplacement d’un agent ayant migré, mais
aussi être capables de laisser sur le tableau l’identité d’un machine pour qu’un agent
présent puisse savoir où migrer après avoir terminé son opération en cours),
– Enfin, ils doivent être capables de juger la machine sur laquelle ils se trouvent.
Les agents Sniffers sont très simples, dès lors leur fonctionnement est en fait une
séquence de des tâches décrites précédemment.
Quand l’un d’eux arrive sur un hôte, il juge toutes les machines connues par cet hôte
mais qu’il n’a pas encore visitées grâce à son module de préférences (lesquelles sont repré-
sentées par un treillis de Galois), puis il choisit au hasard une destination (la probabilité
pour une destination d’être choisie est fonction de son emplacement dans le treillis de pré-
férences). Ainsi les chances d’être choisies doivent augmenter en fonction de la qualité de
141
Chapitre 3. Description des ressources partagées
l’hôte considéré et on ne revisite pas toujours les mêmes machines (ainsi, on peut montrer
facilement que si tous les hôtes sont éternellement connectés, ils seront tous visités par
les Sniffers, car tous les hôtes ont une probabilité non nulle d’être visités par chacun des
Sniffers).
Cette sélection d’une destination est réalisée en six phases :
1. Si sa mémoire est pleine, il migre immédiatement vers son hôte d’origine
2. Récupérer la liste des connaissances auprès de l’agent Manager
3. Eliminer les hôtes connus
4. “Passer la liste au treillis”
5. Lancer la fonction de détermination au hasard d’une destination
6. Migrer vers le nouvel hôte
Quand un Sniffer arrive sur un nouvel hôte, il commence par récupérer auprès de
l’agent Manager les données caractéristiques de l’hôte, puis il compare aux hôtes précé-
demment connus et aux descriptions des hôtes de la liste de connaissance de cette machine.
Il propose des modifications, puis entame son processus de migration.
1. Lecture des caractéristiques de l’hôte
2. Comparaison entre les caractéristiques de l’hôte et des machines connues
3. Comparaison des résultats et des connaissances actuelles de l’hôte
4. Proposition de nouvelles connaissances
142
Chapitre 4
143
Chapitre 4. Problèmes posés par un système de partage
lourd. Il faut aussi’ à terme, qu’un agent “fasse avec ce qu’il a”, en effet un agent qui serait
trop exigent par rapport aux services fournis par les ordinateurs auquel il a accès risque de
ne faire que migrer. Il faudra donc qu’il soit capable de diminuer le niveau de ses exigences
dans les domaines les moins importants de façons à ne pas être pris d’une “folie migratrice”
qui encombrerait les sites (car les procédures de migration sont assez coûteuses) et les
réseaux de communication mais s’avérerait aussi extrêmement contreproductif pour les
commanditaires de l’agent puisque tant qu’il migre il ne fait pas avancer les tâches qu’il
doit réaliser.
144
4.4. Gestion de l’hétérogénéité des hôtes
145
Chapitre 4. Problèmes posés par un système de partage
146
Chapitre 5
Description du fonctionnement de la
plateforme et état d’avancement du
prototypage
Dans cette partie, nous allons décrire les différents éléments de la plateforme, en étu-
diant leur description algorithmique actuelle et l’avancée du développement de leurs dif-
férents prototypes.
Les différents agents ont été testés séparément, il n’existe pas de prototype global de
la plateforme de partage. En effet, les résultats n’auraient pas été très probants puisque
le fonctionnement du prototype n’aurait pas pu être testé en situation réelle (pas assez
d’ordinateurs et de tâches différentes). Les tests et les simulations réalisés sont décrits
dans la dernière partie de ce document. La sécurité n’a jamais été implantée puisque
aucun prototype complet de la plateforme n’a été réalisé.
147
Chapitre 5. Description du fonctionnement de la plateforme et état d’avancement du prototypage
dotés d’un module cognitif à la fois suffisamment versatile pour pouvoir juger des ma-
chines très différentes mais aussi prendre en compte des critères de jugement parfois assez
incohérents entre eux.
Plusieurs considérations doivent être prises en compte, un ordinateur répond à plu-
sieurs descriptions plus ou moins bien. Selon les critères de sélections globaux (recherche
d’un type d’ordinateur) ses caractéristiques techniques sont plus ou moins importantes.
Par exemple, pour un calculateur scientifique la qualité du processeur et la mémoire
vice sont primordiaux, alors qu’ils sont beaucoup plus secondaires pour un entrepôt de
données.
Il était donc nécessaire de juger chaque machine selon les critères des différents types
d’ordinateurs pertinents pour le site mais il faut aussi qu’un module central prenne en
compte les intérêts globaux de la machine (garantissant que certaines catégories impor-
tantes ne sont pas sous représentées dans la liste des connaissances, par exemple).
Nous avons donc opté pour une architecture en couches agglomérant les résultats
obtenus par des modules spécialisés jugeant chaque ordinateur selon les critères d’un type
d’ordinateur (multimédia, calculateur, serveur de distribution . . . ).
148
5.1. Les agents Managers
carnet → R
act : Qlc
c 7→ i=1 (1 + matc (i, 2))
avec carnet = {lc , matc } où matc = (ni , xi )i∈{1,...,lc} ∈ (Nom, [0, 1])lc
149
Chapitre 5. Description du fonctionnement de la plateforme et état d’avancement du prototypage
X
lc
1 ssi nom ∈ D
c 7→ σ(matc (i, 1) × matc (i, 2) + 1)3 avec σ(nom) =
0 sinon
i=1
R → R
f: 0 si x < x0
x 7→
ax + b avec (a, b) ∈ R sinon
2
150
5.1. Les agents Managers
X
nn X
nn X
nn
notef inale = vi (ordinateur) + lienjk (vj (ordinateur), vk (ordinateur))
i=1 j=1 k=1
151
Chapitre 5. Description du fonctionnement de la plateforme et état d’avancement du prototypage
notesd0 un ordinateur
→ R
x0
notation : .. Pn
. 7→ i=0 I(vi0 − vi (t))xi
xn
avec :
[0, 1]2 → R
I:
(x, y) 7→ K(1 + x − y)2
Cependant, cela pose deux problèmes :
– Une autre spécificité de ce problème doit être prise en compte : il est impossible
de classer les ordinateurs dans des catégories associées aux types, en effet, la plu-
part seraient sans doute difficilement classables (pouvant répondre au critères de
plusieurs catégories). Il est donc difficile de classer les différentes catégories les unes
par rapport aux autres. Nous avons donc opté pour utiliser la part de chaque type
d’ordinateur sur l’ensemble des notes obtenues.
R+ → (Descriptions
d0 ordinateur)n
c0 (t)
Avec Carnet : ..
t 7→ . le carnet d’adresse à l’instant t
cn (t)
et xij est la jième note du iième ordinateur du carnet d’adresse, on a
R+ → R+
Pk
∀i ∈ {1, ..., n} , vi : j=1 xij (t)
t 7→ vi (t) = Pn Pk
l=1 p=1 xlp (t)
Ainsi, on peut passer outre la difficulté de classement des ordinateurs dans des ca-
tégories. Nous utilisons ensuite cette valeur pour compenser la trop grande faiblesse
(ou la trop grande force) des catégories sous représentées. Pour cela nous la compa-
rons au pourcentage de chaque type d’ordinateur recherché par le propriétaire du
site (l’utilisateur).
Cette solution présente un défaut. Supposons qu’une catégorie de seconde impor-
tance soit largement sous représentée, le prochain ordinateur correspondant à ses
critères sera sans doute choisi, même si le système a déjà rejeté des ordinateurs qui
correspondaient mieux aux critères, simplement parce qu’au moment où des Sniffers
ont ramené leurs descriptions, la catégorie était moins sous représentée et donc moins
prioritaire. Pour résoudre ce défaut de “choix en catastrophe”, nous préconisons de
conserver les bonnes descriptions, même si elles ne sont pas assez bonnes pour être
sélectionnées, au moins quelques temps. Il deviendrait ainsi possible d’ajouter au
carnet d’adresses un ordinateur dont la description aurait été apportée précédem-
ment. c’est d’ailleurs semblable à la mémoire enregistrée décrite dans l’architecture.
Cependant, cela n’a pas été réalisé ici. Nous proposons cependant, ci-dessous, une
solution qui permet de compenser certains excès.
152
5.2. Les agents Sniffers
153
Chapitre 5. Description du fonctionnement de la plateforme et état d’avancement du prototypage
Les agents se déplacent de site en site. Lorsqu’ils arrivent sur un nouveau site, ils com-
mencent par comparer leurs connaissances aux connaissances locales (ils peuvent ainsi
remettre à jour leurs connaissances obsolètes et proposent au Manager local des correc-
tions si certaines des informations de ce dernier sont obsolètes). Après quoi, ils comparent
leur liste de connaissances et la liste locale et remplacent les sites qu’ils connaissent par
ceux de la liste locale qui sont meilleurs. Ils proposent au Manager local de procéder à
des remplacement si leur liste contient des sites qu’ils considèrent supérieurs à la liste
locale. Une fois que les propositions et les modifications ont été réalisées, soit le Sniffer
demande une réservation de puissance sur une certaine plage horaire (s’il est destiné à
rechercher un emplacement pour une tâche spécifique à une date spécifique et si les réser-
vations sont autorisées)(il faut noter que si la réservation est acceptée, le Sniffer retourne
directement sur son site d’origine), soit il passe directement à l’étape suivante : le Sniffer
choisit un autre site, en partie au hasard dans sa liste et migre vers ce nouveau site.
Une fois que sa durée de vie est écoulée, il retourne sur son site d’origine pour rapporter
ses nouvelles connaissances. Certains Sniffers qui sont liés à une certaine tâche peuvent
rejoindre l’agent Task encapsulant cette tâche sur un site choisi à l’avance.
La seule fonctionnalité notable des Sniffers est leur capacité à classer et à choisir
des sites. pour permettre aux Sniffers de faire ce choix, nous utilisons une méthode de
classification basée sur les treillis de Galois.
154
5.2. Les agents Sniffers
155
Chapitre 5. Description du fonctionnement de la plateforme et état d’avancement du prototypage
chine dans une catégorie, donc de la comparer. Il faut cependant noter qu’un treillis étant
un ordre partiel, certaines machines seront incomparables. Pour cette raison, nous deman-
dons aussi à l’utilisateur de donner une qualité à chacune des catégories définies par les
descriptions. On peut par exemple définir les catégories suivantes : insuffisante, suffisante,
correcte et excellente, dans ce cas l’agent choisira toujours de migrer vers une machine
se trouvant dans la catégorie la plus élevée. Et au sein de cette catégorie, une machine
parmi celles qui appartiennent à l’ensemble le plus restreint disponible. Cette solution ne
nous permet pas de garantir que la meilleure solution sera sélectionnée, mais elle donne de
la flexibilité à l’ensemble (un agent pourra choisir une destination en fonction des choix
des autres agents, même si ce n’est pas son meilleur choix a priori, etc.) la représentation
et l’outil de classification étant assez simples, ils seront faciles à transporter, ce qui est
un avantage primordial pour la migration. De plus ce système de classification est assez
simple, ce qui peut permettre assez facilement de construire de nouvelles classifications.
156
5.3. Les agents Tasks
157
Chapitre 5. Description du fonctionnement de la plateforme et état d’avancement du prototypage
158
5.4. Quelques questions de sécurité
ment des Sniffers, il faudrait cependant leur interdire tout le reste pour des raisons de
sécurité (voir Prec). En effet, les Sniffers doivent pouvoir laisser une trace de leurs in-
vestigations, nous considérons donc qu’ils doivent pouvoir contacter l’agent gestionnaire
de l’hôte (pour pouvoir lui faire part des résultats de leurs “enquêtes migratoires”. Il faut
aussi que les Sniffers puissent laisser des messages aux agents Tâches dont ils servent les
intérêts. Il faut cependant empêcher que ces messages soient trop secrets, pour
empêcher que les Sniffers puissent mentir quand ils donnent des informations
publiques pour tenter de favoriser les agents Tâche alliés (à voir), cependant,
cela pose des problèmes de sécurité puisqu’on peut prévoir la destination des agents en
suivant les Sniffers qui leur sont associés. Pour éviter ces problèmes, il serait possible
que le Manager n’inscrive les messages qu’après l’arrivée de l’agent concerné. Ainsi, il
devient impossible de prévoir les déplacements d’un agent puisque les messages ne sont
rendus publics qu’après qu’il ait pris connaissance de leur contenu. Il faut garantir que
les messages sont clairs pour tous les agents qui désiraient les lire, cependant tout ce que
nous pouvons garantir c’est qu’ils sont sémantiquement corrects car le sens du message
peut être différent pour l’agent qui sait le décoder (histoire des codes secrets).
159
Chapitre 5. Description du fonctionnement de la plateforme et état d’avancement du prototypage
160
Chapitre 6
Dans ce chapitre, nous allons présenter les différentes applications testées et simula-
tions que nous avons réalisé pour valider notre outil de partage de charges. Comme, pour
des raisons d’infrastructure, il n’existe aucune implantation globale du programme, nous
avons du tester chaque angle de l’application séparément. Nous avons donc choisi de tes-
ter la validité d’un système de partage de ressources basé sur la mobilité et l’utilisation
des Sniffers dans leur forme actuelle en testant un prototype de l’application à échelle
réduite. Nous avons de plus testé le " module de choix des connaissances " des Managers
en simulant l’arrivée d’un très grand nombre de descriptions d’ordinateurs et en simulant
une potentielle perte due à un trop plein d’informations.
Nous allons donc présenter les différentes simulations réalisées ainsi que les résultats
obtenus.
161
Chapitre 6. Les tests et les résultats obtenus
des langages concurrents, pour représenter la mobilité des agents. La représentation hié-
rarchique des agents et les primitives de mobilité sont inspirées du calcul des ambients
[CG98, Car99]. Un agent CLAIM est une entité autonome, intelligente, communicante et
mobile, qui a plusieurs composants : l’autorité, le parent , les connaissances sur les
autres agents et sur le monde, les buts, la queue de messages, les capacités, les
processus qui se déroulent en parallèle et les sous-agents. Le langage offre deux types
de raisonnement pour un agent : raisonnement en avant (activer des capacités quand des
messages arrivent) et raisonnement en arrière (activer des capacités afin d’atteindre des
buts). Le langage est supporté par un système multi-plateforme, appelé SyMPA, compa-
tible avec le standard MASIF [MAS] de l’OMG, qui permet de définir des agents et des
classes d’agents, de vérifier la syntaxe des définitions, d’exécuter, de terminer, d’identifier,
de migrer et de visualiser le comportement, la communication et la mobilité des agents.
L’architecture de SyMPA (voir Figure 22) a trois niveaux que nous allons présenter en-
suite, en montrant leur compatibilité avec l’architecture de MASIF :
– le système central : offre des services pour la gestion et la localisation des agents et
des systèmes d’agents. Dans MASIF, le correspondant est MAFFinder, une interface
qui offre des méthodes pour la gestion des agents, des places et des systèmes d’agents
d’une région. Dans SyMPA, le système central administre (dans cette version) tous
les agents. Dans les prochaines versions de SyMPA, l’administrateur du système sera
capable de choisir parmi plusieurs solutions de gestion, selon l’application courante.
– le système d’agents : une plate-forme qui peut créer, interpréter, identifier, exécu-
ter, transférer et terminer des agents. Il correspond à l’interface MAFAgentSystem
de MASIF. Il offre une interface pour définir des agents et des classes d’agents
CLAIM, un interprète pour vérifier la syntaxe des définitions et des méthodes de
gestion.
– l’agent : une entité autonome, intelligente et mobile définie avec le langage CLAIM.
Chaque agent est uniquement identifié dans le système, mais contrairement à MA-
SIF, en SyMPA on peut avoir des clones d’un agent. Comme les ambients, les agents
forment des hiérarchies. Avec cette représentation une place de MASIF devient un
agent normal qui a des sous-agents. Pour chaque agent il existe un processus appelé
PAgent qui offre des méthodes pour la gestion de l’état de l’agent et qui déclenche
plusieurs processus :
– une interface pour visualiser le comportement, la communication et la mobilité
des agents ;
– un processus qui exécute en parallèle les processus de l’agent ;
– un processus qui réalise le raisonnement en avant de l’agent ;
– un processus qui réalise le raisonnement en arrière de l’agent.
Afin d’assurer l’efficacité et la sécurité des interactions entre les agents, entre les sys-
tèmes d’agents et entre le système central et les systèmes d’agents, nous avons défini des
protocoles de communication correspondants aux opérations de l’agent. De plus, on utilise
des mécanismes de cryptographie et chaque message est crypté avant la transmission et
décrypté à la destination.
La migration est réalisée en utilisant les primitives de migration inspirées du calcul
des ambients : (open), pour ouvrir les frontières d’un sous-agent, (acid), pour ouvrir ses
propres frontières, (in), pour entrer dans un agent du même voisinage, (out), pour sortir
162
6.1. Le prototype de plateforme
du parent actuel ou (moveTo), pour migrer dans un autre agent. Dans CLAIM, un agent
peut appeler des fonctions implantées en Java. La migration d’un agent est forte pour
ses processus, qui sont repris au niveau où ils ont été interrompus, une fois l’agent à
destination, et elle est faible pour les fonctions Java, parce qu’un processus Java en cours
au début de la migration est relancé depuis le début une fois l’agent arrivé à destination.
Nous avions déjà utilisé CLAIM avec succès pour implanter des applications de commerce
électronique [SFS03]. Nous avons donc décidé de l’utiliser pour implanter notre système
de partage de ressources. Comme nous l’avons vu dans la description de l’application, il
existe trois classes d’agents. Certaines de leurs capacités font appel à des méthodes Java.
Les agents Managers sont des agents statiques situés sur chaque ordinateur impliqué.
Ils possèdent une représentation et un classement des autres sites sous la forme de treillis
de Galois. Ils ont la capacité de créer des agents Sniffer, de donner leurs connaissances
sur les autres machines sites en réponse aux requêtes des agents Sniffers et Tasks. Ils
peuvent mettre à jour leurs connaissances des sites lorsqu’un agent Sniffer leur donne
des informations plus à jour que les leurs. De plus, quand l’agent Manager détecte une
surcharge de la machine qu’il gère, il peut exiger le départ de certains des agents Tasks
163
Chapitre 6. Les tests et les résultats obtenus
présents.
Les agents Sniffers sont créés par les agents Manager et ils commencent à migrer vers
les autres ordinateurs où ils remettent à jour à la fois leurs propres connaissances et celles
des agents Managers locaux. Quand ils arrivent sur un site, ils demandent au Manager
local son treillis de Galois de connaissances, ils actualisent leurs propres données et si
celles-ci sont plus récentes que celles du Manager, ils proposent d’actualiser celles de ce
dernier. Quand il a visité tous les ordinateurs connus, ou quand il a dépassé un temps
limite, il rentre sur son site d’origine et fournit à son Manager d’origine les connaissances
accumulées au cours de ses migrations.
Les agents Tasks ont une certaine tâche à réaliser. Pour cela, un agent Task migre vers
la meilleure machine selon son treillis de Galois et commence la tâche. Quand il détecte
que les ressources locales ne sont plus suffisantes ou quand il reçoit un ordre de départ de
la part de l’agent Manager de l’ordinateur où il se trouve, il cherche la meilleure machine,
il migre et il reprend son travail. A la fin, il rentre sur son site d’origine, s’inscrit auprès
du Manager qui l’a créé et se détruit.
6.1.3 Expérimentation
Notre modèle pouvait difficilement être testé en situation réelle, nous avons donc été
forcés de réaliser nos tests à une échelle moindre, d’autant plus que les pare-feux (firewalls)
de l’Université Paris-Dauphine et du LIP 6 empêchent les agents CLAIM de communiquer
correctement. Lors de nos tests, nous avons utilisé une version très simplifiée de notre
programme et nous l’avons installé sur trois machines assez différentes, à la fois par leur
puissance nominale et leur format (portables, ordinateurs de bureaux etc.) connectés par
un réseau universitaire (LIP6), dont voici les caractéristiques :
1. Pentium III à 1 gigahertz avec 1 gigaoctet de mémoire vive sous Windows Server
2002
2. Pentium IV à 2,6 gigahertz avec 512 megaoctets de mémoire vive sous Windows XP
3. Pentium III à 1,5 gigahertz avec 256 megaoctets de mémoire vive sousWindows XP
Les résultats obtenus ne sont bien sûr pas entièrement représentatifs puisqu’ils ont été
obtenus dans un environnement extrêmement simplifié. Cependant, ils donnent une ap-
proximation des différentes caractéristiques que pourrait avoir le système, s’il était im-
planté dans une situation réelle. Nos agents Tasks sont de trois types différents, au sens
ou ils n’ont pas exactement les mêmes treillis de préférence.
La figure 6.2 représente l’architecture de la version simplifiée de notre application.
6.1.4 Résultats
Ces tests ont été réalisés en deux temps, nous avons d’abord lancé quatre agents sur
chacun des ordinateurs, ce qui nous a permis de constater que, de façon surprenante, les
deux premiers ordinateurs étaient environ deux fois plus rapides que le troisième pour nos
agents Tasks. Nous avons d’abord lancé quatre agents Tasks sur chaque ordinateur de
façon statique (c’est-à-dire en interdisant leurs migrations). Les quatre tâches terminaient
après environ vingt minutes sur la machine la plus lente contre dix sur les plus rapides.
164
6.1. Le prototype de plateforme
Nous avons ensuite relancé les mêmes tests mais en ne lançant aucun agent Task sur la
machine 2 et en permettant la migration des agents. Ainsi, deux cinquièmes de la puissance
de calcul totale du système n’était donc plus utilisés. La machine 3 s’est débarrassée de ses
agents Tasks vers la machine 1 qui était déjà surchargée (car c’est la meilleure machine et
qu’elle était libre lors du dernier passage d’un agent Sniffer). La machine 1 s’est trouvée
complètement surchargée mais les agents surnuméraires ont alors migré vers la machine
2 qui était libre. Une distribution de charge concertée (centralisée, par exemple) aurait
évité cette migration inutile de 3 vers 2 mais dans notre cas, ces améliorations étaient
hors de portée puisque les agents travaillent sur des données obsolètes. Cette migration
inutile a pris entre 20 et 40 secondes aux trois agents concernés. Malgré cela les gains ont
été très importants (voir Figure 6.3).
La figure 6.2 représente l’architecture de la version simplifiée de notre application.
Il faut noter que, lors de nos tests, les agents, ayant tous le même treillis de description
de préférence, migrent tous vers la même destination. Il est probable que cela reste le cas
si les agents ont des treillis légèrement différents. Cette migration "en troupeau" n’est pas
très efficace car le site destination risque d’être immédiatement surchargé. Il faudra donc
envisager que les agents se concertent pour ne pas tous migrer vers la même destination
car ce comportement nuit à tous les agents et au système en général. De plus, nous
préconisons, pour la suite, d’introduire un mécanisme d’autorisations et de réservations
qui pourraient permettre aux agents d’éviter des migrations inutiles.
165
Chapitre 6. Les tests et les résultats obtenus
6.2.1 Implantation
Nous avons utilisé Java pour construire un module de classement et de chiffrage de
sites. L’utilisation de Java se justifiait puisque la plateforme doit être construite en Java.
Nous avons construit notre module en suivant l’architecture décrite dans le chapitre sur
les Managers. Il faut cependant noter que pour introduire des erreurs (comme celles
qui pourraient intervenir si le Manager n’a plus le temps de traiter complètement les
descriptions qui lui sont envoyées), nous avons décidé de placer une limite de temps pour
l’évaluation de chaque ordinateur tout en lançant en parallèle les évaluations selon les
différents critères. Ainsi, il arrive régulièrement que certains critères n’aient pas eu le
temps d’être évalués. Les résultats obtenus sont donc sans doute inférieurs à ce qu’ils
auraient été si nous avions testé le système dans des conditions moins difficiles, cependant
166
6.2. Validation du fonctionnement du module de choix des Managers
167
Chapitre 6. Les tests et les résultats obtenus
168
6.2. Validation du fonctionnement du module de choix des Managers
– La description d’ordinateurs dite “Service acces provider” (figure 6.7) est destinée
à favoriser les sites ayant un carnet d’adresse très divers. Ces sites peuvent être de
bons points de départ pour une recherche plus spécifique. Ils doivent donc avoir une
bonne connexion réseau puisque ils sont destinés à être des points de transit, un
bon réseau de relations (différent de celui du clusterer en ce que celui-ci est très
diversifié alors que celui du clusterer est très spécialisé) et une adresse statique pour
être facilement retrouvé.
Ces différentes descriptions présentent une gamme relativement large d’ordinateurs
désirables. Cependant, il faut noter que le choix des modèles est le fait de l’auteur et
n’est là qu’à but de test. D’autres modèles peuvent bien sûr être construits et d’autres
descriptions seraient sans doute meilleures que celles-ci.
169
Chapitre 6. Les tests et les résultats obtenus
Fig. 6.7 – Description d’ordinateur destiné à service de point de départ pour la recherche
spécifique d’autres ordinateurs spécialisés
sensiblement meilleures que les plus petites. La courbe représente la qualité des ordinateurs
selon la puissance du processeur, les colones représentent les descriptions qui font partie
de la liste des connaissances à la fin de la simulation.
170
6.3. Quelques données probabilistes concernant notre système
Les deux simulations dont nous fournissons les résultats ici montrent l’efficacité du sys-
tème même dans le cas de situations extrêmes. Nous constatons que même si le système
ne traite complètement que la moitié des cas, les résultats sont bons, les ordinateurs
sélectionnés après des séries de tests font toujours partie des meilleurs. Les résultats obte-
nus nous permettent de considérer que la modélisation que nous utilisons pour construire
notre module de choix reste robuste, même dans des conditions difficiles.
171
Chapitre 6. Les tests et les résultats obtenus
Dans les parties précédentes, nous ne prenions en compte que du partage de puissance
informatique, donc les centres d’intérêts étaient les types d’ordinateurs recherchés par les
différents Managers. Comme dans cette partie, nous considérons un système de partage
générique, nous utilisons le terme “centre d’intérêt” car les ordinateurs peuvent être classés
selon la nature des fichiers qu’ils partagent, ou selon d’autres critères. Cependant, comme
un ordinateur répond à un centre d’intérêt s’il partage des ressources correspondant à ce
centre d’intérêt, nous utiliserons indifféremment type d’ordinateurs ou centre d’intérêt.
t1 . . .tT : le cardinal de chaque centre d’intérêt divisé par le cardinal de l’ensemble des Sites
Il faut noter que les types ne sont pas des ensembles disjoints. Normalement, l’apparte-
nance d’un Site à un type est graduelle mais nous considérerons ici qu’un Site appartient
à un type s’il est dans les meilleurs r pourcents selon les critères de ce type.
N1 : le nombre de Sniffers
N2 : le nombre de Sites
m : la durée d’une migration de Sniffer
Ms : la taille limite de la mémoire d’un Sniffer
Mm : la taille limite de la mémoire d’un Manager
Cm : le temps nécessaire pour qu’un Manager classe un Site
Cs : le temps nécessaire pour qu’un Sniffer classe un Site
Q(i, s) : la qualité du Site s jugé selon les critères du ieme type
(ramenée à la qualité moyenn des Sites)
Pour un Site N , en considérant un système tour par tour, avec un pas de Cs + Cm + m,
à chaque tour, on a :
1 N1
P (“aucun Sniffer présent sur N ”) = (1 − ) (6.1)
N2
La probabilité d’en avoir au moins 1 est donc :
1 N1
P (“au moins 1 Sniffer présent sur N ”) = 1 − (1 − ) (6.2)
N2
Nous calculons maintenant le nombre de “tours” nécessaires pour que la probabilité de
la proposition “au moins un Sniffer est passé par notre site” soit d’au moins 0,95 :
ln(0, 95)
k= (6.3)
ln(1 − (1 − N12 )N1 )
Dans le cas où un Sniffer est présent, il connait, en moyenne, ti × M2s sites répondant
aux critères du type recherché préférentiellement par N . Dès lors, en considérant que le
172
6.3. Quelques données probabilistes concernant notre système
nombre de sites est grand, on peut considérer que 95 % du réseau de connaissance des
sites du même type ti est construit après :
k × Mm
n= (6.4)
ti × M2s
Il faut noter que n et k sont des entiers, il faut donc arrondir les résultats obtenus.
la progression obtenue est en o(n) du nombre de sites et s’améliore en o(n) du nombre
de Sniffers, cependant ce n’est qu’un calcul probabiliste et nous avons considéré que les
Sniffers suivaient des trajectoires aléatoires. Nous n’avons pas non plus pris en compte le
fait que le retour de l’un Sniffer provenant du site étudié peut entraîner une amélioration
très rapide des connaissances de ce site. Enfin, la structuration du système accélère les
recherches donc les dernières recherches devraient être beaucoup plus rapides. En effet,
n’importe quel site indexé connait nécessairement des sites inconnus du site étudié et,
puisque leurs intérêts sont proches ces sites sont normalement intéressants.
173
Chapitre 6. Les tests et les résultats obtenus
plus deux migrations (une migration vers un site possédant une bonne connaissance des
ordinateurs de ce type et un saut vers l’un de ces ordinateurs).
Il est plus difficile d’évaluer le nombre de migrations néceesaire pour trouver une
ressource caractéristique d’un type d’ordinateurs différent de ceux connus par le Manager
demandeur. En effet, il peut être difficile de trouver un groupe de sites, s’il n’existe pas
assez de Managers recherchant à doter leur site d’un carnet d’adresses très diversifié. Ces
Managers “généralistes” peuvent eux-mêmes être considérés comme un type de site et la
connaissance recherchée comme une ressource.
174
Cinquième partie
Conclusion
175
Le premier point à noter est que notre problématique : minimiser le coût en commu-
nication de l’informatique partagée à large échelle est un enjeu important. En effet, M.
Ripeanu et al. [RFI02] montrent rapidement que les systèmes de partage P2P peuvent
modifier en profondeur le modèle économique de l’Internet des particuliers et qu’il est
nécessaire de minimiser les communications, non pas seulement du point de vue de l’op-
timisation du réseau mais aussi du point de vue de l’intérêt financier de tous les acteurs.
Cependant pour arriver à ce but, il reste certaines étapes importantes à franchir :
Notre plateforme de partage présente quelques défauts importants. D’abord, son uti-
lisation exige qu’il soit simple de construire les treillis des préférences des agents mais
il faut aussi que le système s’adapte aux réalités de son environnement. En effet, non
seulement les sites partagés évoluent au même rythme que les technologies informatiques
mais la qualité des machines partagées peut aussi suivre des cycles temporels beaucoup
courts (selon l’heure, les ordinateurs sont allumés ou éteints occupés ou non. . . ) il faut
donc non seulement prendre en compte les évolutions à terme (c’est pour cela que nous
envisageons d’utiliser les outils de la programmation génétique) et les évolutions immé-
diates qui exigeront un outil d’apprentissage beaucoup plus simple qui serait intégrer dans
chacun des agents Managers. Il faut éviter de “gonfler” les agents migrants car il ne faut
pas consommer les ressources informatiques que l’on désire partager. Il faut aussi noter
que le “réseau” virtuel constitué par les machines partagées est lui-même un important
sujet d’analyse. En effet, s’il est intéressant de modéliser et d’analyser sa topologie en soi
(comme dans le cas des études concernant les topologies des autres systèmes de partage
[CLL02]) ; dans notre cas, ce type d’analyse “topographique” a des utilisations immédiates
réelles : une bonne connaissance de la topographie du réseau peut permettre aux utili-
sateurs d’envoyer leurs agents Tâches directement dans des zones efficaces où même de
préparer leurs migrations en fonction des évolutions prévisibles du réseau au cours du
temps.
Pour pouvoir éventuellement envisager une utilisation plus proactive que réactive du
système de partage, il est nécessaire de disposer des informations nécessaires à la construc-
tion d’une bonne représentation du réseau des sites partagés.
Cependant cela ne suffit pas, il faut aussi disposer d’outils d’analyse et de représenta-
tion adaptés.
Ce sont des conditions plus difficiles à remplir qu’il n’y paraît. Les connaissances des
agents Sniffers sur les ordinateurs qu’ils ont visités peuvent être lacunaires, datées ou
simplement fausses s’ils ont été induits en erreur par un agent Manager. Il faut de plus
que les agents Sniffers réussissent à revenir jusqu’à leur hôte original pour que l’on puisse
étudier les données qu’ils ont récoltées. Il faut de plus appliquer un outil d’analyse de
données adaptées et réussir à tirer des conclusions de l’analyse réalisée automatiquement.
Cependant les données récoltées par les Sniffers sont des données complexes, très diverses,
sans compter qu’elles peuvent être différentes selon le Sniffer qui les a récoltées.
Notre système de partage diverge des systèmes peer-to-peer classiques en ce que les
sites utilisateurs choisissent eux-mêmes leurs “accointances”. Même si les liens entre les
sites ne sont pas bidirectionnels, il devrait se former des “amas de sites ayant des intérêts
communs. En effet, si un site satisfait à mes besoins cela peut signifier que son propriétaire
a des besoins semblables aux miens. . . nous devrions donc avoir des ensembles de sites
connus semblables ou complémentaires. Si nous atteignons effectivement une structure de
177
réseau semblable à un super réseau de clusters virtuels eux-mêmes largement distribués,
l’efficacité de l’ensemble du système devrait être largement améliorée. C’est ce qu’Adriana
Iamnitchi et al. ont montré dans [IRF02].
Il va aussi être nécessaire de juger les Sniffers de façon à pouvoir leur appliquer des
méthodes évolutives pour leur permettre de rester efficaces dans un milieu en perpétuelle
évolution. Pour cela, il va être nécessaire d’appliquer les méthodes de la programmation
génétiques aux treillis de préférences de nos agents.
Il sera aussi nécessaire d’accentuer les liens entre notre plateforme de partage et notre
méthodologie de conception. En effet, il faut aider les concepteurs à concevoir des appli-
cations capables de profiter des technologies de partages ou de modifier les applications
existantes de façon à pouvoir en profiter. Il serait de plus intéressant de construire les
passerelles avec les plateformes de services Web, puisque la problématique de mise en
commun des ressources logicielles n’est pas très différente.
178
Bibliographie
179
Bibliographie
180
[DDTV99] A. Delhay, M. Dauchet, P. Taillibert, and P. Vanheeghe. Maximization of
the average quality of anytime contract algorithms over a time interval.
In Proceedings of the Sixteenth International Joint Conference on Artificial
Intelligence, pages 212 – 221. Morgan Kaufmann Publishers Inc, 1999.
[Dea98] Desaulniers and et al. fleet management and logistics, chapter A unified fra-
mework for deterministic time constraint vehicle routing and crew scheduling
problem, pages 57–93. Kluwer, Boston, 1998.
[DGMS93] Jack Dongarra, G. A. Geist, Robert Manchek, and V. S. Sunderam. Integra-
ted PVM framework supports heterogeneous network computing. Computers
in physics, 7(2) :166–174, 1993.
[DHS00] Stephen R. Donaldson, Jonathan M.D. Hill, and David B. Skillicorn. Bsp
clusters : High performance, reliable and very low cost. Parallel Computing,
Elsevier, 26 :199–242, 2000.
[DK01] Yuefan Deng and Alex Korobka. The performance of a supercomputer built
with commodity components. Parallel Computing, Elsevier, 27 :91–108,
2001.
[DMC96] Marco Dorigo, Vittorio Maniezzo, and Alberto Colorni. The ant system :
Optimization by a colony of cooperating agents. IEEE Transactions on
Systems, Man, and Cybernetics Part B : Cybernetics, 26(1) :29–41, 1996.
[DS01] M. Dorigo and T. Stützle. An experimental study of the simple ant colony.
Technical report, Université Libre de Bruxelles, Brussels, 2001.
[ea04] A. Montresor et al. Messor : Load-balancing through a swarm of autonomous
agents. In Springer-Verlag, editor, Proc. of AP2PC 2002, LNCS 2530, 2004.
[Edi00] Editorial. Parallel computing on clusters of workstations. Parallel Compu-
ting, Elsevier, Parallel Computing, Elsevier :175–177, 2000.
[ESA96] Elfallah-Seghrouchni and S. A., Haddad. A recursive model for distributed
planning. In Proceedings of ICMAS’96. AAAI Press, 1996.
[ESHH01] Taylor E., Eric J. Schwabe, Bruce K. Holmer, and Michelle R. Hribar. Ba-
lancing load versus decreasing communication : Parameterizing the tradeoff.
Journal of Parallel and Distributed Computing, 61(5) :567–580, 2001.
[Ev96] P. Eck van. The desire research program. Technical report, 1996.
[FCM03] C. J. Freitas, D. B. Coffin, and R. L. Murphy. The characterization of a
wide area network computation. Parallel Computing, Elsevier, 29 :879–894,
2003.
[Fen01] Serge Fenet. Vers un paradigme de programmation pour les applications
distribuées basé sur le comportement des insectes : application à la sécurité
des réseaux. PhD thesis, LISI, 2001.
[Fer95] J. Ferber. Les systèmes multi-agents, vers une intelligence collective. Inter-
Editions, 1995.
[FG01] G. C. Fox and D. Gannon. Computational grids. IEEE Comput Sci Eng.,
3(4) :74–77, 2001.
181
Bibliographie
[FIP98] FIPA. Fipa 98 draft specification : Part 11 : Agent management support for
mobility. Technical Report 8415, Version 0.3, FIPA, 1998.
[FIP01] FIPA. Fipa agent software integration specification. Technical report, FIPA,
2001.
[FK] I. Foster and C. Kesselman. The globus project : a statuts report. Web
page.
[FK99] I. Foster and C. Kesselman. The Grid : Blueprint for a Future Computing
Infrastructure. Morgan, Kaufmann, 1999.
[FKNT02] I. Foster, C. Kesselman, J. M. Nick, and S. Tuecke. Grid services for distri-
buted system integration. Computer, 35(6), 2002.
[FPR95] B. Folliot, P.Sens, and P.-G. Raverdy. Calculateurs Parallèles, volume 7,
chapter Plateforme de Répartition de Charge et de Tolérance aux Fautes
pour Applications Parallèles en Environnement Réparti, pages 345–366. Her-
mès, 1995.
[FSS03a] A. El Fallah-Seghrouchni and Alexandru Suna. Claim : A computational
language for autonomous, intelligent and mobile agents. In Proceedings,
ProMAS’03, workshop of AAMAS, Melbourne, Astralia, 2003. ACM Press.
[FSS03b] A. El Fallah-Seghrouchni and Alexandru Suna. An united framework for
programming autonomous, intelligent and mobile agents. In Proceedings,
CEEMAS’03. Springer-Verlag, 2003.
[GAD+ 94] A. Geist, A.B., J. Dongarra, W. Jiang, R. Manchek, and V.S. Sunderam.
PVM : Parallel Virtual Machine : A Users Guide and Tutorial for Network
Parallel Computing. The MIT Press, 1994.
[GBL+ 03] I. Gupta, K. Birman, P. Linga, A. Demers, and R. van Renesse. Kelips :
Building an efficient and stable p2p dht through increased memory and
background overhead. In Proceedings of the 2nd International Workshop on
Peer-to-Peer Systems, 2003.
[Gea02] D. Gannon and et al. Programming the grid : Distributed software compo-
nents, p2p and grid web services for scientific applications. Cluster Compu-
ting, 5(3) :325–336, 2002.
[GFGRA98] E. Giménez-Funes, L. Godo, and J. Rodriguez-Aguilar. Designing bidding
strategies for trading agents in electronic auctions. In Proceedings of IC-
MAS’98 : the Third International Conference on Multi-Agent Systems. ACM
Press, 1998.
[Gib03] Steve Gibson. DCOMbobulator : Effortlessly Tame Windows Dangerous
DCOM Facility. Gibson Reseach Corporation, 2003.
[HBDV03] K. Heinrich, M. Berry, J. Dongarra, and S. Vadhiyar. Statistical Data Mi-
ning and Knowledge Discovery, chapter The Semantic Conference Organizer.
CRC Press, 2003.
[HCF+ 94] D. Hagimont, P.Y. Chevalier, A. Freyssinet, S. Krakowiak, S. Lacourte,
J. Mossière, and X. Rousset de Pina. Persistent shared object support
182
in the guide system : Evaluation and related work. In Proceedings of the
Ninth Annual Conf. on Object-Oriented Programming Systems, Languages,
and Applications, volume 29, pages 129–144, Portland OR (USA), 1994. ci-
teseer.nj.nec.com/chevalier94persistent.html.
[HJS+ 03] N. Harvey, M. Jones, S. Saroiu, M. Theimer, and A. Wolman. Skipnet : A
scalable overlay network with practical locality properties. In Proceedings of
USITS 2003, 2003.
[HW98] Junling Hu and Michael P. Wellman. Online learning about other agents in
a dynamic multiagent system. In Katia P. Sycara and Michael Wooldridge,
editors, Proceedings of the 2nd International Conference on Autonomous
Agents (Agents’98), pages 239–246, 1998.
[HW01] J. Hu and M. P. Wellman. Learning about other agents in a dynamic mul-
tiagent system. Cognitive Systems Research (Elsevier), 2 :6779, 2001.
[IBM03] IBM. Aglets web page, 2003.
[IRF02] A. Iamnitchi, M. Ripeanu, and I. Foster. Locating data in (small-world ?)
peer-to-peer scientific collaborations. In LNCS 2429 : Proceedings of
IPTPS’02. Elsevier, 2002.
[Jen99] N. R. Jennings. Agent-oriented software engineering. In LNAI : Proceedings
of MAAMAW’99, volume 1647. Elsevier, 1999.
[JO98] Ferber J. and Gutknecht O. Aalaadin : a meta-model for the analysis and
design of organizations in multi-agent systems. In Proceedings of ICMAS’98.
ACM, 1998.
[JPS02] T. Juan, A. Pierce, and L. Sterling. Roadmap : extending the gaia metho-
dology for complex open systems. In Proceedings of AAMAS’02, pages 3–10,
Bologna, 2002. ACM Press.
[JZA+ 93] N. R. Jennings, L. Z.Varga, R. Aarnts, J. Fuchs, and P.Skarek. Transforming
standalone expert systems into a community of cooperating agents. Journal
of Engineering Applications of Artificial Intelligence, 6(4) :317–331, 1993.
[Kei01] Keidar. Group communication. Technical report, MIT Labs, 2001.
[KFST02] G. Klein, A. El Fallah-Seghrouchni, and P. Taillibert. Hamac : An agent
based programming method. In Proceedings of AAMAS’02, pages 47–48,
Bologne, 2002. ACM Press.
[KSFS04] G. Klein, A. Suna, and A. El Fallah-Seghrouchni. Resource sharing and load-
balancing based on agent mobility. In Proceedings of the 6th International
Conference on Entreprise Information Systems, Porto, 2004.
[KZ97] Joseph Kiniry and Daniel Zimmerman. Special feature : A hands-on look at
java mobile agents. IEEE Internet Computing, 1(4), 1997.
[Leb03] Marjorie Lebars. Systèmes multi-agents pour l’aide à la négociation lors du
partage de l’eau entre différents usagers. PhD thesis, LAMSADE - INRA,
Université Paris IX - Dauphine : Paris, 2003.
183
Bibliographie
[LO98] D. Lange and M. Oshima. The Aglet book “ Programming and Deploying
Java Mobile Agents with Aglets ”. Addison-Wesley, 1998.
[MAD] Madkit. Web page.
[MAS] Masif : The omg mobile agent system interoperability facility. Web page.
[Maz01] H. Mazouzi. Ingénierie des protocoles d’interaction : des systèmes distribués
aux systèmes multi-agents. PhD thesis, LAMSADE. 2001, Université Paris
IX - Dauphine : Paris., 2001.
[MBB+ 98] D. Milojicic, M. Breugst, I. Busse, J. Campbell, S. Covaci, B. Friedman,
K. Kosaka, D. Lange, K. Ono, M. Oshima, C. Tham, S. Virdhagriswaran,
and J. White. Masif, the omg mobile agent system interoperability facility,
1998.
[MBB 99] Dejan S. Milojicic, Markus Breugst, Ingo Busse, John Campbell, Stefan
+
184
[OMG03] OMG. CORBA/IIOP Specification, 2003.
[Ore44] O. Ore. Galois connections. Trans. Amer. Math. Soc., 55 :494–513, 1944.
[Pic01] G. P. Picco. Mobile agents : An introduction. Journal of Microprocessors
and Microsystems, 25(2) :65–74, 2001.
[Puj02] Guy Pujolle. Les Réseaux. Eyrolles, 30 aout 2002 edition, 2002.
[RD85] H. O. Roux and A. M. Deplanche. A t-time petri net extension for real-time
task scedulling modelling. JESA Modelling of Reactive Systems, 36 :973–986,
1985.
[RFI02] M. Ripeanu, I. Foster, and A. Iamnitchi. Mapping the gnutella network :
Properties of large-scale peer-to peer systems and implications for system
design. IEEE Internet Computing Journal special issue on peer-to-peer net-
working, 6(1), 2002.
[RGI92] A. Rao, M. Georgeff, and F. Ingrand. An architecture for real-time reasoning
and system control. IEEE Expert, 7(6), 1992.
[Rhe01] H. Rheingold. The Virtual Community : Homesteading on the Electronic
Frontier, revised edition. MIT Press, 2001.
[Rip01] M. Ripeanu. Peer-to-peer architecture case study : Gnutella network. Tech-
nical report, University of Chicago, 2001.
[Set] Seti. Seti@home. Web site.
[SFS03] Alexandru Suna and Amal El Fallah-Seghrouchni. Programming e-commerce
applications in the claim language. In Proceedings, CSCS14, 2003.
[SIC03] SICS. SICStus Prolog, 2003.
[sita] AUML Web site. Auml web site. Web site.
[Sitb] SMALLTALK Web Site. Smalltalk web site. Web site.
[sitc] UML Web site. The current uml specification, version 1.5. Web site.
[SMK 01] +
I. Stoica, R. Morris, D. Karger, M. F. Kaashoek, and H. Balakrishnan.
Chord : A scalable peer-to-peer lookup service for internet applications. In
Proceedings of ACM SIGCOMM ’01, pages 149–160, 2001.
[SS86] L. Sterling and E. Shapiro. The Art of Prolog. The MIT Press, Cambridge
MA, 1986.
[SSCJ98] O. Shehory, K. Sycara, P. Chalasani, and S. Jha. Agent cloning : An ap-
proach to agent mobility and resource allocation. IEEE Communications,
36(7) :58–67, July 1998.
[SST95] Andrea Schaerf, Yoav Shoham, and Mashe Tennenholtz. Adaptative load
balancing : a study in multi-agent learning. Journal of Artificial Intelligence
Research, 2 :475–500, 1995.
[Sun94] V. S. Sunderam. Methodologies and systems for heterogeneous concurrent
computing. pages 29–45, 1994.
[SUN04a] SUN. Ejb reference. WEB page, 2004.
185
Bibliographie
186