Cloud Computing
Cloud Computing
Thèse
Présentée pour l’obtention du titre de
Docteur En Informatique
1 Introduction 13
1.1 Préliminaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.2 Contexte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
1.3 Problématique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
1.4 Contribution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
1.5 Plan de la thèse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
[Link] OpenShift . . . . . . . . . . . . . . . . . . . . . . . . . 62
3.5 Le Cloud SlapOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
3.5.1 Architecture de la plateforme . . . . . . . . . . . . . . . . . . . 63
3.5.2 Concepts clés et caractéristiques de SlapOS . . . . . . . . . . . 65
3.5.3 Confinement d’exécution, sûreté de fonctionnement . . . . . . . 67
3.5.4 Utilisation de SlapOs . . . . . . . . . . . . . . . . . . . . . . . . 68
3.6 Différences entre Grilles et Clouds . . . . . . . . . . . . . . . . . . . . . 69
3.7 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
II Contributions 73
6.14 Temps d’exécution du Workflow (1446 tâches) sur 400 workers déployés
depuis SlapOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
12 TABLE DES FIGURES
13
Chapitre 1
Introduction
1.1 Préliminaires
Cette thèse rentre dans le cadre d’une coopération qui s’étale sur plusieurs années
entre le laboratoire LATICE (LAboratoire de recherche en Technologies de l’Informa-
tion et de la Communication et génie Electrique) de Tunis (Mohamed Jemni étant le
co-directeur de thèse) et Le LIPN (Laboratoire Informatique Paris Nord) de Paris 13
(Christophe Cérin étant le co-directeur de thèse). Ces travaux sont résumés à la Fi-
gure 1.1. Sur la période 2006-2010, les travaux de Heithem Abbes (co-tutelle) ont porté
sur deux intergiciels de calcul : PastryGrid [ACJ08] et BonjourGrid [ACJ09]. Pastry-
Grid est construit autour d’un mécanisme pair-à-pair de coordination des acteurs du
système de calcul alors que BonjourGrid est un méta-intergiciel de grille de PCs dans
le sens où il est capable de coordonner les principaux intergiciels de grilles de PCs
(BOINC, Condor, XtremWeb). L’objectif commun à ces deux intergiciels est de pou-
voir contrôler l’exécution de graphes de tâches de manière beaucoup plus décentralisée ;
l’idée étant de se passer de coordination via un unique point de contrôle centralisé.
À partir de 2010-2011, deux extensions du travail de Heithem Abbes sont mises en
place. La première est confiée à Walid Saad. Il s’intéresse principalement à la gestion
des données dans les grilles de PC, plus particulièrement dans BonjourGrid qu’il a
étendu pour pouvoir prendre en compte plusieurs intergiciels de rapatriement/gestion
de données de la même façon que l’on peut gérer plusieurs intergiciels de calcul au sein
de BonjourGrid.
À la même époque et dans le cadre d’une nouvelle co-tutelle entre le LATICE et le
LIPN, nous avons pris le parti, dans mon travail, de revisiter les interactions au sein
d’une grille de PCs dans le cadre des technologies du Web. Les outils construits sur la
période 1990-2010 ont en effet été conçus avec des technologies et des méthodes ad-hoc
et on peut légitimement se poser la question de savoir, à l’heure du Cloud et des services
en ligne, comment ces intergiciels de grille pourront continuer à exister. C’est le point
14 CHAPITRE 1. Introduction
PastryGrid RedisDG=BonjourGrid+
(Heithem Abbes) WEB Technologies
(Leila Abidi)
1.2 Contexte
Notre travail est à l’intersection des contextes des grilles de calculs, des nouvelles
technologies du Web ainsi que des Clouds et des services à la demande.
Depuis leur avènement au cours des années 90, les plateformes distribuées, plus pré-
cisément les systèmes de grilles de calcul (Grid Computing), n’ont pas cessé d’évoluer
permettant ainsi de susciter des efforts de recherche toujours plus nombreux à travers
le monde. Le principe général reste acquis, puisqu’il s’agit d’exploiter la disponibilité
de millions d’utilisateurs sur Internet et la présence de nombreuses ressources informa-
tiques largement sous exploitées dans le but de créer une « grande » infrastructure de
calcul.
Les grilles de PCs [CF12] ont été proposées comme une alternative aux super-
calculateurs par la fédération des milliers d’ordinateurs. Un PC des années 90 est ca-
pable d’exécuter la plupart des applications scientifiques, et donc une plateforme de
grille de PCs est une plateforme viable pour le calcul scientifique haute performance.
Les détails de la mise en œuvre d’une telle architecture de grille, en termes de méca-
nismes de mutualisation des ressources, restent beaucoup plus difficile à cerner de par la
multitude de définitions qui ont immergé depuis l’article fondateur de Ian Foster [FK99].
Cette puissance de calcul mise à disposition a permis et permet encore à la communauté
scientifique de traiter d’innombrables applications gourmandes en calcul telles que les
applications de recherche de l’intelligence extraterrestre (SETI@Home [ACK+ 02]), de
prédiction globale du climat ([Link] [And04]), le repliement et l’agréga-
tion des protéines (Folding@Home [LSS+ 09]) et l’étude des rayons cosmiques (Xtrem-
Web [CDF+ 05]). Le succès de ces applications et le nombre des utilisateurs de ces
plateformes prouvent le potentiel des grilles de PCs. Plusieurs projets de grilles de cal-
cul ont vu le jour, telles que DataGrid [VBP03], TeraGrid [TER], EuroGrid [LBE03],
gLite [GLI], ou Grid’5000 [BCC+ 06].
Parallèlement, le Web a complètement modifié notre façon d’accéder à l’information.
Le Web est maintenant une composante essentielle de notre quotidien : biens dématé-
rialisés, services en ligne, formation et éducation, jeux en ligne, objets connectés,. . . qui
ont conduit à quinze années très riches, et un nombre incalculable d’innovations tech-
nologiques. Les équipements ont, à leur tour, évolué d’ordinateurs de bureau ou ordi-
nateurs portables aux tablettes, lecteurs multimédias, consoles de jeux, smartphones,
ou NetPCs.
Cette évolution exige d’adapter et de repenser les applications, à savoir, dans notre
cas, les intergiciels de grille de PCs qui ont été développés ces dernières années. Ces
applications ont été initialement construites au-dessus d’Internet comme couche de
connexion afin que l’adaptation ou la remise en question du concept ne viennent pas, de
notre point de vue, de l’augmentation de la vitesse d’Internet. Intégrer les technologies
du Web dans le domaine scientifique est par ailleurs une piste de recherche active
16 CHAPITRE 1. Introduction
1.3 Problématique
Dans le domaine de l’informatique, les grilles de PCs et les Clouds sont deux para-
digmes bien connus. D’un coté nous avons les grilles de PCs basées sur le volontariat de
ressources, et utilisées pour exécuter des applications nécessitant une grande puissance
de calcul. De l’autre coté, le Cloud repose sur le partage des ressources pour assurer la
cohérence et des économies d’échelle. Nous nous intéressons au couplage de ces deux
concepts. Les grilles de calcul peuvent continuer à exister si nous sommes capables de
transformer l’ancienne architecture maître/esclaves en une nouvelle architecture orien-
tés Web afin d’offrir les services à la demande.
Notre objectif est de fournir une grille de PCs en tant que service, c’est-à-dire qui
pourrait être utilisée d’une manière transparente pour l’utilisateur, en particulier sans
aucune intervention d’un administrateur système. L’objectif est de faire en sorte que
cette technologie soit accessible au plus grand nombre de personnes dans la Commu-
nauté E-science à travers l’automatisation du déploiement par exemple. Nous espérons
que dans l’avenir l’utilisateur d’un intergiciel de grille de PCs n’aura pas besoin d’être
1.3. Problématique 17
1.4 Contribution
Notre contribution se résume dans la réalisation d’un intergiciel de grille de PCs
que nous avons appelé RedisDG. Dans son fonctionnement, RedisDG reste similaire à
la plupart des intergiciels de grilles de calcul, c’est-à-dire qu’il est capable d’exécuter des
applications sous forme de «sacs de tâches» dans un environnement distribué, assurer
le monitoring des nœuds, valider et certifier les résultats,. . . .
L’innovation de RedisDG, réside dans l’intégration de la modélisation et la vérifi-
cation formelles dans sa phase de conception, ce qui est non conventionnel mais très
pertinent dans notre domaine. RedisDG ne s’inspire pas des anciennes architectures
maître/esclaves mais plutôt des architectures orientées Web. Il est totalement basé sur
la publication-souscription des événements. Il est très léger en terme de codes. C’est
un système mono-couche contrairement aux intergiciels de grille de calcul traditionnels.
Les étapes de conception et de réalisation de RedisDG sont décrites ci-dessous.
Tout d’abord, nous avons étudié le système BonjourGrid, une approche pour la
décentralisation de la gestion et l’organisation autonome des ressources de calcul dans
les systèmes de grille de PCs. Nous avons essayé de mieux cerner le comportement
1.4. Contribution 19
d’un tel système. Pour cela nous avons commencé par une étude des mécanismes de
découverte des ressources et des systèmes d’informations, en particulier les protocoles
décentralisés. Nous avons étudié les systèmes de publication-souscription. Nous avons
réalisé une modélisation formelle du mécanisme de publication-souscription en utilisant
les réseaux de Petri colorés [JK09]. Cette modélisation générique nous a conduit à
réaliser une modélisation puis une vérification formelle du système BonjourGrid.
Ce travail de modélisation nous a permis de prendre conscience à quel point les
systèmes de grille de calcul sont complexes et nous avons alors étudié la possibilité de
réaliser un nouveau système de grille de PCs qui rompe avec la complexité traditionnelle.
Notre approche consiste à repenser les grilles de PCs à partir d’une réflexion et d’un
cadre formel permettant de les développer, de manière rigoureuse et de mieux maîtri-
ser les évolutions technologiques à venir. Nous avons reconsidéré les interactions entre
les composants traditionnels d’une grille de PCs en se basant sur les technologies du
Web, et donné naissance à, RedisDG, un nouvel intergiciel de grille de PCs capable
de tourner sur les petits dispositifs, i.e. smartphones, tablettes comme sur les disposi-
tifs plus traditionnels (PCs). Notre système est entièrement basé sur le paradigme de
publication-souscription, nous entendons la manière dont nous réalisons la coordination
des différents composants, la façon dont une machine rejoint le système, la façon dont
elle le quitte, la manière d’échanger les données, la manière de contrôler l’exécution,. . . .
RedisDG est développé avec Python et utilise Redis comme système de gestion de base
de données clef-valeur scalable.
Afin de valider RedisDG à large échelle, nous avons exécuté une application de la
NASA, appelée MONTAGE. La quantité de calcul et de données impliqués dans cette
application nécessite un système de gestion de workflow scalable, qui soit en mesure
de coordonner et d’automatiser le transfert des données et l’exécution des tâches sur
des ressources de calcul distribuées. Avec RedisDG, nous avons réussi à exécuter une
instance de cette application avec 1500 tâches. Ce qui fait de RedisDG un système
de gestion de workflow scalable. Nous avons aussi validé l’approche avec des expéri-
mentations sur l’infrastructure Grid’5000 en utilisant 340 machines physiques et avec
le cloud SlapOS. SlapOS est un système de Cloud Computing décentralisé inventé par
l’Université de Paris 13 et par Nexedi. Commercialisé en Europe, au Japon et en Chine,
il comporte des fonctions de déploiement et d’orchestration automatiques utilisées en
production par SANEF, Mitsubishi, Airbus Defence ou Aide et Action. Les résultats
ont prouvé le concept de RedisDG. Avec la modélisation, la vérification, le déploiement
et le test de RedisDG, nous avons introduit la notion de «grille de PCs à l’âge du Web»
qui correspond à offrir les fonctionnalités d’une grille de PCs sous forme d’un service
Web, très facile à utiliser.
20 CHAPITRE 1. Introduction
Première partie
Eléments de contexte et de
vocabulaire
23
Chapitre 2
Modélisation et vérification
Formelle
2.1 Introduction
Dans ce chapitre nous mettons en évidence l’utilité de la modélisation et de le
vérification formelle. Nous y discutons la nécessité de valider les systèmes informa-
tiques. Nous présentons principalement certaines définitions et notations sur les réseaux
de Petri place-transition, et sur les réseaux de Petri colorés. Nous exposons aussi les
principales techniques de vérification formelle, et nous présentons brièvement l’outil
CPNTools et ses principales fonctionnalités. Enfin nous présentons le paradigme de
publication-souscription.
L’utilisation de modèles prend une part de plus en plus importante dans les systèmes
informatiques, que ce soit pour leur définition, leur conception, leur réalisation, leur
exploitation, leur maintenance et même leur intégration.
Dans le domaine de Grid Computing on n’a pas l’habitude de modéliser formellement
nos systèmes. On suit plutôt l’approche traditionnelle de la conception d’un système
qui consiste à le concevoir, le réaliser et le tester suivant des scénarios types afin de
vérifier si son comportement est satisfaisant et s’il est nécessaire de l’améliorer voire de
le re-concevoir. C’est ce qu’on appelle une approche intuitive.
Cette approche n’est pas des plus efficace : parfois, on doit faire face à des contraintes
temporelles, parfois des contraintes économiques ou tout simplement on est face à l’im-
possibilité de tester le comportement du système. Ainsi, l’approche intuitive peut être
longue et coûteuse à mettre en place au final.
Une alternative s’impose. En fait, pour un scénario donné, un modèle permet de
calculer numériquement les valeurs des variables de tous les états qu’un système peut
avoir, ce qui est plus rapide et plus économique que de les mesurer en faisant des tests.
C’est ce qu’on appelle simulation.
La simulation permet ainsi, dans une certaine mesure, de tester si le comportement
du système est satisfaisant et de mettre en évidence certains problèmes. Elle ne rem-
place pas complètement l’expérimentation qui est nécessaire à l’issue d’une simulation
satisfaisante.
Les limites de la simulation résident dans le fait qu’on ne peut tester qu’un nombre
limité de scénarios, même si le modèle est bon. Si les scénarios choisis ne sont pas
pertinents par rapport à l’ensemble des scénarios auxquels le système sera confronté
durant son existence, alors il est difficile de prévoir si le comportement du système sera
satisfaisant dans tous les cas.
Ainsi, en plus de réaliser un modèle et d’effectuer des simulations sur ce modèle,
garantir le comportement d’un système nécessite l’analyse de propriétés spécifiques de
ce modèle. L’analyse d’un système repose sur l’étude des propriétés mathématiques de
son modèle. C’est la vérification formelle.
Notre travail s’intéresse à la modélisation basée sur les réseaux de Petri, et plus
particulièrement, les réseaux de Petri colorés. Ce choix est motivé par un ensemble
de facteurs. D’abord, ces modèles sont graphiques et permettent de représenter le sys-
tème d’une manière intuitive. Ils renseignent, dans un formalisme unique, sur les deux
aspects du système représenté : statique (grâce à la structure même du modèle) et dy-
namique (grâce à l’évolution des jetons dans la structure et éventuellement l’évolution
de leurs valeurs). En outre, les réseaux de Petri sont recommandés comme des méthodes
formelles notamment dans le domaine de la sûreté de fonctionnement grâce au socle
théorique (mathématique) sous-jacent au modèle graphique. En termes de puissance de
modélisation, les réseaux de Petri possèdent une très grande expressivité. Ils peuvent
2.3. Les réseaux de Petri colorés 25
exprimer des aspects aussi variés que les communications, les contraintes temporelles
et les lois de commande. Des outils comme CPNTools [CPN] permettent d’offrir une
aide à la modélisation, la simulation et l’analyse des réseaux de Petri.
trée. L’exécution d’un réseau de Petri n’est pas déterministe, car il peut y avoir plusieurs
possibilités d’évolution à un instant donné (exemple : pour une place en amont de deux
transitions concurrentes).
On ne distingue pas les différents jetons dans les réseaux de Petri ordinaires. En
effet, ils :
– ne capturent pas les symétries d’un problème ;
– ne permettent pas d’associer des informations aux jetons ;
– ne permettent pas de paramétrer la solution d’un problème.
La solution est d’utiliser une notation concise et paramétrée des réseaux de Petri
qui sont les réseaux de Petri colorés permettant d’associer une valeur à chaque jeton.
Ainsi :
– les jetons sont typés par des couleurs ;
– le nombre de classes (couleurs) de jetons est fini ;
– à chaque transition sont associées différentes couleurs de franchissement (fonc-
tions associées aux arcs, disparition/création de couleurs par le franchissement
des transitions, couleurs représentées par des n-uplets).
Les réseaux colorés ont été introduits en 1997 par Kurt Jensen, afin de modéliser des
systèmes complexes tout en gardant les possibilités de vérification. Lorsque le nombre
d’entités du système à modéliser est important, la taille du réseau de Petri devient
rapidement énorme, et si les entités présentent des comportements similaires, l’usage des
réseaux colorés permet de condenser le modèle (voir figure 2.2). En effet, une couleur est
une information attachée à un jeton. Cette information permet de distinguer des jetons
entre eux et peut être de type quelconque. Par conséquent, une place peut contenir des
jetons de différentes couleurs et une transition peut être franchie de différentes manières,
selon la couleur. Ceci est réalisé en attachant un domaine de couleur à chaque place et
à chaque transition. Ainsi, les arcs ne sont pas seulement étiquetés par le nombre de
jetons mais aussi par leurs couleurs.
Le franchissement d’une transition est alors conditionné par la présence dans les
places en entrée du nombre de jetons nécessaires, qui en plus satisfont les couleurs qui
étiquettent les arcs. Après le franchissement d’une transition, les jetons qui étiquettent
les arcs d’entrée sont retirés des places en entrée tandis que ceux qui étiquettent les
arcs de sortie sont ajoutés aux places en sortie de cette transition.
Ainsi, pour un même système, le nombre de comportements qui peuvent être ex-
primés par un réseau coloré est nettement plus élevé qu’avec un réseau simple (voir
figure 2.2). Ce sont des réseaux très adaptés aux architectures distribuées. D’autant
plus qu’à tout réseau coloré correspond un réseau de Petri simple/ordinaire qui lui est
isomorphe. Ceci permet donc d’exploiter les mêmes techniques d’analyse que celles dé-
veloppées pour les réseaux ordinaires en plus d’autres qui ont été complétées et adaptées
aux réseaux colorés.
2.3. Les réseaux de Petri colorés 27
Figure 2.2 – Réseau de Petri coloré (gauche) vs réseau de Petri ordinaire (droite)
Définition formelle : les réseaux de Petri colorés sont standardisés par le IEC
(International Electrotechnical Commission) comme des réseaux de Petri à haut niveau
(ISO Standard 2004). Ils sont définis comme suit : un réseau de Petri coloré est un
n-uplet CP N = (P, T, A, Labels, B, V, C, G, E, I, L), où :
technique est très puissante au sens où elle traite des systèmes à nombre d’états infinis,
mais elle est indécidable dans le cas général, et par conséquent difficile à automatiser.
ce but. Il est développé par le CPN Group à l’université d’Aarhus au Danemark. Il est
l’un des logiciels les plus utilisés dans son domaine[JKW07], dédié à la simulation de
réseaux de Pétri de haut niveau (voir figure 2.3).
Il se compose de :
– CPN Editor : permet d’éditer les réseaux colorés et vérifier leurs syntaxes ;
– CPN Simulator : permet de simuler le comportement de réseau (les règles de
franchissement, les transitions franchissables,. . . ) ;
– CPN State space Tool : supporte la vérification (L’espace d’état).
CPNTools permet de modéliser graphiquement (dessiner) un réseau coloré dans une
page de l’interface utilisateur. Le modèle comprend la structure statique du réseau
coloré (places, transitions, arcs) et la partie dynamique (les jetons valués).
Grâce à CPNTools, il est possible d’utiliser des couleurs complexes et des fonctions.
CPNTools combine les fonctionnalités des réseaux de Petri colorés et celle des langages.
Le langage choisi est le langage fonctionnel Standard ML [MHMT97]. Les réseaux de
Petri colorés fournissent les primitives pour décrire les processus, tandis que le langage
fournit les primitives pour définir des types de données (ensemble de couleurs) et des
manipulations des données (expression d’arcs, gardes,. . . )(voir figure 2.4).
Un simulateur intégré peut générer et analyser un espace d’états partiel ou total et
un rapport d’espace d’états peut contenir des informations sur les propriétés du réseau
2.5. CPNTools : un outil pour spécifier et vérifier des réseaux de Petri colorés 31
Event Service
Subscriber
Publisher Storage
Notify()
and management Subscribe
of subscriptions
Publish Subscriber
Publisher Notify()
Subscribe()
Notify() Un-
subscribe Subscriber
Publisher Publish Notify()
Unsubscribe()
Notify Subscriber
Publisher Notify()
entre les clients et les producteurs de services, en termes aussi bien temporels (asynchro-
nisme) que spatiaux (pas de références explicites des émetteurs et des récepteurs). En
effet, ce mode de communication est multipoint, anonyme, implicite. Il est multipoint
(un-à-plusieurs ou plusieurs-à-plusieurs) car les événements sont envoyés à l’ensemble
des clients qui se sont déclarés intéressés. Il est anonyme car le fournisseur ne connaît
pas l’identité des clients. Il est implicite puisque les clients sont déterminés par les
souscriptions et non pas explicitement par les fournisseurs.
En plus des avantages présentés ci-dessus, les systèmes de publication-souscription
simplifient énormément la mise en place d’un intergiciel de grille de calcul. En effet,
dans la programmation classique (modèle client/serveur), on doit préciser les cordonnées
des clients et du serveur, l’acheminement et les interfaces de communications, ce qui
complique l’implémentation du modèle de communication, en particulier si on augmente
le nombre de contraintes (disponibilité de serveurs, présence de serveurs de secours,
clients volatiles,. . . ). Contrairement à la programmation classique, la programmation
mettant en œuvre les protocoles de publication-souscription est bâtie essentiellement sur
les deux fonctions citées ci-dessus, ce qui rend l’implémentation d’un système distribué
beaucoup plus simple.
Bien que le mode d’interaction publier-souscrire soit un paradigme émergent pour
les applications distribuées à grande échelle, nous avons noté des insuffisances quant
à la modélisation. Il existe différentes façons permettant de modéliser le paradigme
de publication-souscription, aussi bien au niveau statique (style architectural) qu’au
niveau dynamique.
Dans [KLK12], les auteurs ont proposé une méthode centrée sur l’architecture pour
la conception correcte des systèmes publier-souscrire. Ils ont élaboré une approche de
conception qui cherche à promouvoir la réutilisation d’une part, et de concevoir des
styles publier-souscrire prouvés corrects par construction, d’autre part. L’approche se
base sur un ensemble de schémas de communication prouvés corrects et réutilisables. Ces
schémas intègrent des propriétés génériques pour le modèle de communication publier-
souscrire. L’approche offre une démarche de construction de styles par la composition
de schémas de communication. Ces schémas sont spécifiés formellement en notation
Z, ainsi que la démarche de composition. La spécification formelle du style conçu est
obtenue par la composition des spécifications des schémas utilisés. Une représentation
visuelle en notation UML est également proposée afin de faciliter l’appréhension de la
modélisation par des architectes de styles, non spécialistes en Z.
Nous verrons ultérieurement, dans la partie des contributions, que nous nous in-
téressons plutôt au côté dynamique : la coordination des différents acteurs est basée
uniquement sur la publication-souscription des événements tout en accentuant l’aspect
du découplage total.
34 CHAPITRE 2. Modélisation et vérification Formelle
2.7 Conclusion
Dans ce chapitre nous avons présenté quelques notions de base autour de la modélisa-
tion et la vérification formelle des systèmes informatique. Ces notions sont nécessaires
à la compréhension de la suite de ce manuscrit. Nous avons aussi défini les réseaux
de Petri colorés, leur utilité et leur mode de fonctionnement ainsi qu’un outil, CPN-
Tools, permettant de les utiliser. Nous avons aussi présenté le principe du paradigme
de publication-souscription, autour duquel tourne cette thèse.
35
Chapitre 3
3.1 Introduction
Dans ce chapitre nous exposons les principaux éléments de vocabulaire relatifs aux
systèmes distribués en liaison directe avec notre sujet. Nous commençons par explorer
les différents types de systèmes distribués de calcul, notamment les systèmes de grilles
de calcul, les systèmes de calcul global et les systèmes pair-à-pair à partir des vues
d’esprit des années 90 à 2000.
Nous présentons ensuite les principales fonctionnalités d’une grille de PCs à savoir ;
l’ordonnancement, le monitoring et la certification des résultats. Nous présentons aussi
le méta-intergiciel BonjourGrid qui est en fait un intergiciel de grille de PCs utilisant le
protocole de publication-souscription et qui fera l’objet de notre étude dans la chapitre
qui suit. Nous étudions aussi l’impact des technologies du Web sur les applications de
grille de calcul, notamment les architectures orientées services, leurs évolutions et leurs
limites. Nous définissons par la suite la notion de Cloud Computing, ses principales
caractéristiques sur le plan technique comme sur le plan économique, ainsi que des
exemples de Cloud. Nous présentons l’architecture et les concepts clés du Cloud SlapOS
qui est l’infrastructure que nous utilisons.
SlapOS est un système de Cloud Computing décentralisé inventé par l’Université de
Paris 13 et par Nexedi. Commercialisé en Europe, au Japon et en Chine, il comporte
des fonctions de déploiement et d’orchestration automatiques utilisées en production
par SANEF, Mitsubishi, Airbus Defence ou Aide et Action. Ce Cloud est en rupture par
rapport aux définitions classiques de Cloud comme cela sera précisé dans ce chapitre.
Nous terminons par une étude comparative entre les systèmes de grille de calcul et
les systèmes de Cloud de calcul.
36 CHAPITRE 3. Architecture des systèmes distribués de notre étude
Les systèmes de grilles de calcul fédèrent les ressources des grappes de calcul qui se
trouvent, souvent, dans des institutions et des laboratoires de recherche. L’échelle d’une
fédération de grappes peut aller de quelques centaines à quelques milliers de machines.
Les machines d’une fédération de grappes sont plus stables que des stations de travail
et fortement connectées grâce à une infrastructure réseau de haute qualité. L’instabilité
peut être causée seulement par des pannes ou des opérations de maintenance. En plus,
l’environnement des grilles de calcul est fortement sécurisé. En effet, les ressources et
les utilisateurs doivent avoir un certificat électronique pour s’authentifier et avoir accès
à la grille.
Les applications qui exploitent ce type de plateformes demandent des calculs inten-
sifs et un échange massif des données. D’après Ian Foster et Carl Kesselman [FK99],
les grilles de calcul visent à construire une infrastructure matérielle et logicielle qui
fournit un accès sûr, consistant, omniprésent et économique à des ressources de calcul
haute performance. L’objectif est ainsi de déployer des applications distribuées sur une
infrastructure comportant des ressources de calcul, des supports de stockage, des ins-
truments de mesure (capteurs), des outils de visualisation (réalité virtuelle) et des bases
de données.
La majorité des grilles de calcul comme EGEE [BHK+ 14], OSG [OSG], TeraGrid [TER],
utilisent Globus [FKNT02] et gLite [GLI] comme intergiciels. Toutefois, la sécurité des
ressources et l’authentification des utilisateurs garantissent un environnement sécurisé
et fiable, la complexité de la procédure d’installation d’un nouvel élément et l’archi-
tecture hiérarchique suivie par Globus, représentent un obstacle qui limite le passage à
l’échelle.
L’idée du calcul global (Global Computing) est de regrouper les ressources afin
de les exploiter lorsqu’elles sont inutilisées pour effectuer des calculs. Il s’agit d’une
généralisation du principe des vols de cycles à l’échelle d’Internet. En effet, la puissance
de calcul d’une telle plateforme est fournie par des volontaires en offrant les périodes
où leurs ordinateurs ne sont pas utilisés.
En conséquence à ce mode d’exploitation, les ressources sont volatiles et faiblement
connectées à cause de l’infrastructure réseau basée sur Internet. Cette idée est exploitée
par le projet de recherche d’extraterrestres dans l’univers, Seti@Home [ACK+ 02], qui
cherche à analyser des données astronomiques obtenues grâce à un radiotélescope.
38 CHAPITRE 3. Architecture des systèmes distribués de notre étude
terminaison de la tâche qui tourne sur sa ressource. Par conséquent, il est intéressant
que le système de grille incite les utilisateurs, en particulier ceux qui veulent exploiter la
grille sans fournir des ressources, de joindre leurs machines pendant une longue période.
Les grilles de PCs sont construites à partir des machines personnelles des utilisateurs.
Il est impérativement nécessaire de ne pas dégrader les performances de la machine,
lorsque son propriétaire a besoin de ses ressources (CPU, mémoire volatile,. . . ). Ainsi,
les systèmes de grilles de PCs doivent prendre ce comportement en considération et
doivent interrompre l’exécution d’une application publique (c’est-à-dire une applica-
tion soumise par un utilisateur de la grille) lorsqu’ils détectent que le propriétaire de
la machine a lancé un programme privé, sachant que le propriétaire peut lancer ses
programmes à n’importe quel moment.
Par conséquent, le temps de disponibilité d’une machine volontaire est variable. En
plus, il est possible que l’exécution d’une application publique s’arrête d’une manière
inattendue à cause d’une déconnexion d’une machine. En conséquence, les cycles des
temps disponibles des machines varient selon la fréquence de l’utilisation par leurs
propriétaires, ce qui affecte l’exécution des applications publiques. Ainsi, il est nécessaire
que les systèmes de grilles de PCs, en particulier les ordonnanceurs, tiennent compte
de la volatilité des ressources afin de donner de bonnes performances et des résultats
fiables.
Les machines des utilisateurs qui sont les ressources des grilles de PCs peuvent
joindre ou quitter la grille à n’importe quel moment, sans aucune contrainte. L’état
de la grille varie d’une manière continue ; en effet, le nombre de machines connectées,
le nombre d’applications soumises, le nombre de tâches en cours d’exécution, la bande
passante et l’état des liens entre les machines changent en cours de temps. L’intergiciel
de grille doit donc tenir compte du dynamisme de l’environnement.
Dans les grilles de PC à large échelle, les machines sont connectées via Internet,
ainsi les connexions ne sont pas fiables et peuvent être perdues aléatoirement. De plus,
puisque les machines ne sont pas dédiées à la grille, leurs fréquences de disponibilité
varient d’une machine à une autre selon l’utilisation de leurs propriétaires. Aussi, la
contrainte d’exploiter la machine que lorsque son propriétaire ne l’utilise pas, peut
causer l’interruption de l’exécution ainsi qu’un échec de terminaison. L’ordonnanceur
doit tenir compte de ce comportement afin que l’exécution des applications se termine
correctement et ne soit pas retardée.
Le principal défi dans les projets de calcul volontaire est que les machines volontaires,
également appelés workers, sont non dédiés, volatiles, source d’erreurs, et peu fiables.
En effet, les workers peuvent avoir des cycles inactifs et ne sont donc pas entièrement
dédiés à l’exécution d’applications de calcul volontaire. Leur volatilité est due au fait
3.3. Les grilles de PCs 41
qu’ils peuvent soudainement quitter le projet sans avoir à retourner des résultats pour
le calcul effectué.
Des erreurs liées au réseau et à l’exécution peuvent avoir lieu et ne sont pas prévi-
sibles. Enfin, les résultats renvoyés peuvent être affectés par des attaques malveillantes,
des dysfonctionnements du matériel ou du logiciel et ne peuvent donc pas être valides.
Lorsque l’une de ces conditions se produit, un système de calcul volontaire devrait être
en mesure d’écarter les « mauvais » résultats et redistribuer le calcul aux frais de di-
minution du débit global (nombre de tâches terminées) et l’augmentation de la latence
(durée de vie des tâches). Pour atténuer l’impact de ces conditions, les projets de calcul
volontaire se fondent sur un ordonnanceur ou scheduler.
L’ordonnanceur prend des décisions sur le type et la quantité de calcul (tâches)
qui devraient être confiées à un worker. En raison de l’hétérogénéité des ressources,
en terme de performance et de disponibilité, l’ordonnanceur ne peut pas appliquer
les mêmes critères de distribution à chaque machine. En outre, les performances et la
disponibilité d’un worker peuvent soudainement changer entre deux demandes de calcul.
Idéalement, les ordonnanceurs doivent être en mesure de s’adapter dynamiquement aux
caractéristiques de l’environnement de calcul volontaire.
Une telle adaptation doit prendre en compte les deux points de vue divergents
des acteurs principaux dans un projet basé sur le volontariat : le point de vue des
ressources (workers) et celui des scientifiques (qui consomment les ressources) [CF12].
Les scientifiques vont souvent exiger que leur travail soit retourné le plus rapidement
possible et qu’il soit le plus fiable possible. La politique d’ordonnancement entraînée
par le point de vue des utilisateurs tend à (1) maximiser la disponibilité des ressources,
(2) minimiser la latence totale (3) maximiser le débit et (4) maximiser la fiabilité (aux
prix d’une réplication plus élevée et de validations ultérieures).
Les volontaires exigent une utilisation efficace des ressources données. Ils attendent
d’être reconnus en terme de crédits ou de points qui sont attribués proportionnellement
à la quantité de calcul prévue. La politique d’ordonnancement entraînée par le point
de vue des volontaires tend à (1) minimiser la latence, (2) maximiser l’utilisation et (3)
réduire au minimum le gaspillage de ressources (par réduction de calculs redondants).
Afin d’assurer une certaine qualité de service pour les volontaires, un ordonnanceur doit
être capable de générer constamment une charge de travail diversifié, qui est distribuée
dans les différents types d’hôtes participants. En prenant en considération ces deux
points de vue, la création d’une politique d’ordonnancement efficace devient vite difficile
à implémenter.
Même s’il existe une nombreuse littérature sur les algorithmes exacts d’ordonnance-
ment [LGLK79, BLK83, BLR03, PST04, Sga98, Try12, BL99], parfois avec des garanties
sur leurs performances, la plupart des politiques d’ordonnancement existantes et appli-
quées aux projets de calcul volontaires sont basées sur des heuristiques et peuvent être
classés en deux catégories : naïves ou basées sur les connaissances. Les politiques d’or-
42 CHAPITRE 3. Architecture des systèmes distribués de notre étude
donnancement naïves attribuent le calcul sans tenir compte de l’historique des workers.
À titre d’exemples nous pouvons citer :
[Link] Monitoring
qu’aujourd’hui la taille des grilles de calcul devient de plus en plus grande et le système
utilisé par les outils de surveillance actuels ne permettent pas d’effectuer efficacement
la gestion de ces grilles.
Ces outils sont basés sur un système centralisé : une seule machine lance plusieurs
processus et ouvre plusieurs sockets. Il est connu que ce mécanisme ne donne pas de
bonnes performances avec un très grand nombre de nœuds. De nombreux articles ont
été publiés à ce sujet et de nombreux outils mis en œuvre. Parmi eux on peut citer
Chukwa [chu08]. Chukwa est un système de collecte de données pour le suivi et l’analyse
des grands systèmes distribués. Il est construit au-dessus de Hadoop [HAD], un système
de fichiers open source distribué et la mise en œuvre MapReduce et hérite de l’évolutivité
et de la robustesse d’Hadoop. Il comprend également une boîte à outils pour afficher
les résultats de suivi et d’analyse, afin de faire le meilleur usage de données collectées.
Les systèmes d’exploitation, les systèmes de fichiers et les réseaux associés présentent
des défis uniques pour la surveillance, le suivi des performances et le diagnostic des
problèmes. Les outils classiques de monitoring système sont impuissants face au volume
de plus en plus important et diversifié des données et à l’état des systèmes de plus en
plus gigantesque. En plus du volume de données important, la diversité des systèmes
utilisés par les plus grands centres de calcul présente diverses informations provenant
de sources multiples, ce qui complique encore les efforts d’analyse.
Le développement de nouveaux outils est nécessaire afin d’offrir un service de moni-
toring opérant et efficace. Dans l’article [MHD+ 10], «Monitoring Tools for Large Scale
Systems», Miller et al. ont détaillé un ensemble d’outils de surveillance du système
mis au point par les auteurs et utilisés par les administrateurs système de Oak Ridge
National Laboratory Leadership Computing. Ces outils comprennent des utilitaires per-
mettant de corréler les performances d’entrée/sortie et les données d’événements avec
des systèmes spécifiques, des ressources et des tâches. Lorsque cela est possible, les
services existants sont intégrés pour réduire l’effort de développement et accroître la
participation communautaire.
À côté de ces techniques, d’autres personnes proposent d’utiliser les appareils élec-
troniques pour effectuer la surveillance et le contrôle des grands systèmes distribués.
Ces dispositifs peuvent comprendre des capacités de détection pour la mesure en ligne,
des actionneurs pour contrôler certaines variables, les microprocesseurs pour le traite-
ment de l’information et la prise de décisions en temps réel basés sur des algorithmes
conçus, et les unités de télécommunication pour l’échange d’informations avec d’autres
appareils électroniques ou éventuellement avec des opérateurs humains.
Une collection de ces dispositifs peut être considérée comme un système d’agents
intelligents en réseau. Ces systèmes ont la capacité de générer un énorme volume de don-
nées spatio-temporelles qui peuvent être utilisées pour des applications de surveillance
et de contrôle des grands systèmes distribués.
L’un des défis les plus importants de la recherche dans les années à venir est le
44 CHAPITRE 3. Architecture des systèmes distribués de notre étude
Modèle architectural : l’architecture d’une grille PCs comprend trois types d’enti-
tés ; les clients, les workers et un côté serveur. Les clients sont ceux qui soumettent des
tâches au système afin d’être exécutées correctement et rapidement. Les workers sont
les entités qui exécutent les tâches des clients. Ils travaillent en boucle : contacter le
serveur pour obtenir les tâches puis calculer les résultats, et ainsi de suite.
Enfin, le serveur fournit l’infrastructure qui centralise l’ensemble de la gestion, la
coordination, la création et la distribution des tâches, la réception et la validation des
résultats.
Pour rendre disponibles leurs ressources, les volontaires ont besoin d’installer une
infrastructure logicielle dans leurs machines afin de joindre le ou les projets dans lesquels
ils veulent contribuer. Le logiciel du côté du worker est composé de deux éléments
principaux : 1) le module de gestion et 2) le logiciel du worker.
Le module de gestion gère toutes les demandes de l’application et les communications
au serveur extérieur. Par exemple, c’est le module de gestion qui demande des tâches
3.3. Les grilles de PCs 45
du serveur et c’est aussi lui qui envoie les résultats lorsque les tâches sont terminées. Il
télécharge également, pour chaque projet, l’exécutable approprié qui effectue le calcul.
Le module de gestion gère également la programmation des tâches, l’application de la
configuration définie par le volontaire (par exemple, pas de calcul avant 20 heures ou
de 30% de CPU pour le projet A, 45% pour le projet B et 25% pour projet C).
En résumé, le module de gestion fait face à la plupart des fonctions qui s’interfacent
soit avec la machine locale (accès aux fichiers, points de contrôle, etc) ou avec le côté
serveur de chaque projet. En ce qui concerne le logiciel du worker, il est constitué par
le code binaire qui exécute effectivement les tâches du projet. Il effectue réellement le
travail de calcul.
Comme l’informatique est une question de matériels, logiciels, et d’erreurs humaines,
les grilles de PCs ont besoin de mécanismes de validation puissants pour assurer l’exac-
titude des résultats. Une approche largement utilisée pour évaluer les résultats est de
répliquer le travail entre plusieurs workers et de comparer leurs résultats à la fin, une
technique connue sous le nom de vote à la majorité ou concensus. Un résultat est ac-
ceptée si la majorité des workers renvoient le même résultat. BOINC utilise le terme
quorum pour désigner le nombre de résultats qui doivent correspondre afin de valider
un résultat. Le quorum est fixé par projet, il a une valeur de 2 dans plusieurs projets.
Cependant, la validation par la réplication signifie qu’une unité de travail est exé-
cutée plus d’une fois, et donc la puissance de calcul est effectivement perdue. D’autres
techniques existent pour la validation des résultats, bien que le vote à la majorité soit
le plus utilisé, principalement en raison de sa simplicité.
En ce qui concerne la sécurité, les grilles de PCs ont besoin de se couvrir contre
deux types distincts de menaces : 1) résultats erronés dus à un mauvais fonctionnement
du matériel/logiciel ou un comportement malveillant de certains des bénévoles et 2) la
vulnérabilité de la grille de PCs en terme de logiciel qui pourrait exposer les machines
volontaires à des risques pouvant perturber leurs activités ou leurs données. Le middle-
ware de grille de PCs doit être capable de faire face à ces deux cas. Nous identifions le
premier type comme des menaces pour les projets et le deuxième comme des menaces
pour les ressources de la grille de PCs.
Menaces en relation avec les projets : bien que les ressources volontaires semblent
être des ressources sans coût du point de vue du projet, leur utilisation ne va pas sans
problèmes. Un projet de calcul qui recourt à des ressources volontaires doit se protéger
correctement contre les effets des ressources et les faux donateurs, les malveillants et
les défectueux. Sinon, le projet est perturbé et ses résultats pourraient être sans valeur.
En outre, l’infrastructure Web du projet doit également être protégé contre les
menaces courantes qui sévissent dans ces infrastructures. Les principaux types de pro-
blèmes que les projets fondés sur le bénévolat ont à traiter sont : 1) des tâches non
terminées, 2) des résultats erronés, 3) des résultats altérés et 4) l’attaque sur l’infra-
46 CHAPITRE 3. Architecture des systèmes distribués de notre étude
utilisateurs. Cela se fait dans les différentes plateformes qu’il prend en charge, à savoir
Linux, Windows et Mac OS X.
Les déclinaisons actuelles du confinement sous Linux sont les mécanismes de LXC
ou encore le projet Docker qui est très en vogue. LXC, contraction de l’anglais Linux
Containers, est un système de virtualisation, utilisant l’isolation comme méthode de
cloisonnement au niveau du système d’exploitation. Il est utilisé pour faire fonctionner
des environnements Linux isolés les uns des autres dans des conteneurs partageant le
même noyau et une plus ou moins grande partie du système hôte. Le conteneur apporte
une virtualisation de l’environnement d’exécution (processeur, mémoire vive, réseau,
système de fichier,. . . ) et non pas de la machine. C’est pour cette raison que l’on parle
de « conteneur » et non de machine virtuelle.
Docker est un projet open source qui automatise le déploiement d’applications dans
des conteneurs logiciels. Docker étend le format de conteneur Linux standard, LXC,
avec une API de haut niveau fournissant une solution de virtualisation qui exécute
les processus de façon isolée. En fait Docker utilise les mécanismes LXC, cgroups, et
le noyau Linux lui-même. Contrairement aux machines virtuelles traditionnelles, un
conteneur Docker n’inclut pas de système d’exploitation, à la place il s’appuie sur les
fonctionnalités du système d’exploitation fourni par l’infrastructure sous-jacente.
Certification des résultats : valider les résultats que les nœuds/workers retournent
au coordinateur central est l’un des problèmes fondamentaux des systèmes de calcul
basés sur le bénévolat. Dans son ouvrage [Sar02], Sarmenta a formalisé un certain
nombre de mécanismes pour certifier les résultats : vote à la majorité, contrôle par
sondage et les systèmes basés sur la crédibilité.
Dans le vote à la majorité, les nœuds participent à un groupe de vote, où les votes
sont les résultats du calcul. Pour 2m-1 nœuds, le coordinateur accepte le résultat qui
apparaît m fois ou plus. L’inconvénient de cette méthode est le niveau élevé de redon-
dance. Pour éviter d’exécuter plusieurs fois la même tâche, avec la méthode de contrôle
par sondage, le coordinateur central envoie des travaux spéciaux pour tester l’efficacité
des workers.
L’hypothèse ici est que les nœuds malveillants ne peuvent pas différencier ces travaux
spéciaux des restes des travaux. Les workers qui réussissent ce test de repérage seront
sollicités par le coordinateur, et inversement, il écarterait les workers qui échouent à
ce test. Malheureusement, la méthode de contrôle par sondage ne résout pas tous les
problèmes. En particulier, quand les workers peuvent facilement obtenir de nouveaux
identifiants.
Malgré une entité centrale, nous ne pouvons pas compter sur les mécanismes d’au-
thentification complexes, car les volontaires peuvent tout simplement abandonner le
projet. Pour surmonter ce problème, les systèmes basés sur la crédibilité utilisent l’ap-
proche contraire : le worker n’est pas digne de confiance jusqu’à ce qu’il se révèle être
48 CHAPITRE 3. Architecture des systèmes distribués de notre étude
digne de confiance, et la confiance dans les résultats doit dépasser un certain niveau
auprès du coordinateur. Dans le paragraphe qui suit nous passons en revue ces trois
mécanismes de base.
BOINC a un démon consacré à vérifier si les résultats sont valables : il s’agit du
validator. BOINC offre un framework qui permet aux développeurs de projet de créer
une fonction de validation. Cette fonction indique à BOINC quand on doit tenir compte
de deux résultats identiques. Il est intéressant de noter que le cadre de la validation offre
également deux types particuliers de validateurs : sample bitwise validator(), et sample
trivial validator(). Le premier valide les résultats bit par bit, tandis que le second prend
en compte deux résultats à correspondre si leur temps de CPU dépasse un certain seuil
minimum. Les responsables du projet à exécuter peuvent accepter cette option s’ils ont
confiance aux workers.
Macintosh d’Apple). Il est d’une grande importance et d’une grande utilité aussi pour
la communauté de recherche comme cela a été montré par Heithem Abbes.
Passage de l’état repos à l’état esclave : lorsque une machine rejoint le sys-
tème BonjourGrid, elle prend l’état initial de repos. Cette machine reste en attente des
demandes des coordinateurs en lançant un programme de découverte sur les coordina-
teurs demandeurs. Lorsqu’elle découvre des demandes de participation, la machine ne
prend en compte que la première en publiant le service MyConfirmation comme décrit
ci-dessus. Par la suite, la machine arrête le service de découverte, désactive le service
IdleService et publie le service WorkerService afin d’annoncer son nouvel état : elle n’est
plus libre, elle travaille pour un coordinateur.
L’esclave en question tourne le programme esclave avec l’adresse IP du coordinateur.
Cet esclave reste en possession du coordinateur tant que ce dernier est en vie. Il exécute
un programme de découverte (browser) sur les services de type portant le nom de son
coordinateur, pour qu’il soit informé de toutes les notifications issues de ce dernier, en
particulier, si le coordinateur n’existe plus (c’est-à-dire la machine a retourné à son état
initial de repos). Dans ce cas, l’esclave désactive le service WorkerService. Finalement,
la machine retourne à son état initial en publiant le service IdleService.
dans le domaine de l’e-Science et ainsi ils n’ont pas vraiment été adoptés comme cela
était prévu à l’origine.
À la fin des années 90, il semblait que l’utilisation des services Web dans les grilles
était inévitable. La communauté scientifique s’attendait à ce que les services Web do-
minent la nouvelle génération de logiciels d’entreprise des années 2000. On a également
supposé que les grilles serait en mesure de tirer parti de l’important investissement
commercial dans ce domaine et être construite en termes de services Web. Cependant,
ce n’est pas ce qui s’est passé.
En fait, l’expérience a démontré que les services Web sont souvent compliquées, lents
et ayant des fonctionnalités inférieures que les approches traditionnelles. Par exemple,
WS-Security est assez lent alors que WS messagerie semble avoir une mauvaise presse
en plus d’être inadéquat pour les opérations multi-cast. Des normes telles que WSDM
(gestion décentralisée) sont inutilement complexes, ce qui entrave sa vaste adoption.
Certes, il existe des bons supports .NET et Java pour les services Web et les spécifica-
tions WS. Ces supports fournissent un ensemble de standards à la fois riche, sophistiqué
et complexe au niveau de la sécurité, la tolérance aux pannes, les méta-données, la dé-
couverte, la notification, etc. Par ailleurs, la montée en puissance du Web 2.0 montre
que l’innovation des logiciels commerciaux se passe dans un espace différent de ceux
des services Web et au final ceux-ci n’ont pas eu d’adoption significative.
Ainsi, même si l’idée de construire des grilles de PCs en termes de services Web
semblait être prometteuse, l’adoption de ces systèmes par l’entreprise ou par la com-
munauté des E-Sciences reste à faire. Les logiciels d’entreprise et les services Web ont
évolué, mais chacun dans une direction distincte.
Le Web 2.0 est un terme «fourre-tout» souvent appliqué à un large éventail d’ac-
tivités sur le Web tels que Google Map et ses applications composites, les blogs, les
wikis (avec RSS associé) et les réseaux sociaux tels que Facebook. Il désigne l’ensemble
des techniques, des fonctionnalités et des usages du World Wide Web, en particulier
les interfaces permettant aux internautes ayant peu de connaissances techniques de
s’approprier les nouvelles fonctionnalités du Web.
Ces activités mettent l’accent sur la simplicité et la participation des usagers. Ainsi,
les internautes contribuent à l’échange d’informations et peuvent interagir (partager,
échanger, etc.) de façon simple, à la fois avec le contenu et la structure des pages, mais
aussi entre eux.
De nombreux services Web 2.0 comme YouTube, Flickr, [Link], etc, ont des inter-
faces de programmation ainsi que des interfaces utilisateur. L’approche «do-it-yourself»
du Web 2.0 est un modèle très attrayant pour la science ce qui pourrait éventuellement
permettre aux scientifiques de l’informatique et aux chercheurs en technologie de l’in-
formation de collaborer plus étroitement. Nous pouvons également tirer parti des vastes
infrastructures en ligne de Google, Microsoft, Amazon et autres grandes entreprises.
54 CHAPITRE 3. Architecture des systèmes distribués de notre étude
Les fonctionnalités techniques comprennent les interfaces pour l’accès et les ap-
plications composites (composées à partir d’autres applications) pour l’intégration de
l’information Web. Il y a aussi des fonctionnalités très populaires tels que les blogs et
les wikis supportant une communication soit à large échelle soit au sein d’une organisa-
tion. Google Maps et les technologies connexes illustrent la puissance des technologies
interactives, intégratives et contributives. Elles sont emblématiques du Web 2.0 : elles
ont révolutionné le monde extrêmement complexe des systèmes d’information géogra-
phique avec des normes XML beaucoup plus simples et des APIs de programmation
qui popularisent le processus de développement.
Les technologies du Web 2.0 ont également envahi un territoire plus traditionnel
de la cyber-infrastructure. Ainsi, le développement du Web 2.0 inclut les systèmes de
Cloud qui prennent en charge le stockage et le calcul distribués, des fonctionnalités qui
ont jusqu’à présent été la particularité des grilles.
Du point de vue du développeur, les systèmes de type Clouds offrent beaucoup
plus de simplicité au niveau de la programmation, de l’allocation des ressources et des
modèles de sécurité que la grille de calcul. Cela peut être attribué à des problèmes de
positionnement commercial ; en fait, les grilles sont beaucoup plus orientées recherche,
et ont souvent des cas d’utilisation relativement complexes, alors que les systèmes Cloud
sont motivés par des considérations économiques et par conséquent doivent faire appel
au plus simple pour les cas d’utilisation.
Le Web 2.0 peut jouer en faveur de l’E-Sciences de nombreuses façons. Ses outils
peuvent renforcer la collaboration scientifique, à savoir soutenir efficacement les orga-
nisations virtuelles, d’une autre manière que les grilles, qui focalisent sur la gestion
hautement sécurisée du partage des ressources.
Avec sa notoriété, le Web 2.0 peut offrir des technologies et des logiciels de haute
qualité qui (en raison de gros investissements commerciaux) peuvent être très utiles pour
l’E-Science et de meilleure qualité que les services offerts par la grille ou les solutions
des services Web. En outre, l’ergonomie et le caractère participatif du Web 2.0 peuvent
amener les sciences à un public plus large.
On peut facilement combiner les technologies des services Web (SOAP, UDDI,
REST,. . . ) avec celles du Web 2.0 (HTTP,. . . ). Toutefois, dans un tel monde hybride, les
systèmes vont naturellement évoluer vers le plus petit dénominateur commun. Ainsi, la
complexité de la messagerie SOAP et des spécifications WS ne pourront pas prospérer.
Bien que les technologies du Web 2.0 se soient plus concentrées sur les interactions
entre utilisateurs et moins sur le calcul (ordonnancement, exécution de tâches,. . . ),
le Web 2.0 et les grilles s’attaquent à des classes d’applications similaires. Ainsi, les
technologies de composants pour les grilles et le Web 2.0 possèdent des fonctionnalités
similaires, et il devrait être fructueux de comparer et combiner les idées réunissant les
deux systèmes.
3.4. Le Cloud computing 55
à une meilleure compréhension des besoins des entreprises. Nous trouvons les différents
modes suivants :
- Paiement à la demande (Pay-as-you-go) : c’est une approche commune de
Cloud Computing, qui signifie que les utilisateurs paient en fonction de leur consomma-
tion réelle de ressources. Traditionnellement, les utilisateurs doivent être équipés avec
tous les logiciels et l’infrastructure matérielle avant de commencer le calcul, et les main-
tenir pendant le processus de calcul. Le Cloud Computing réduit le coût de l’entretien
des infrastructures et de leur acquisition, afin d’aider les entreprises, en particulier les
petites et les moyennes, à réduire les délais de commercialisation et d’obtenir un retour
sur l’investissement.
- Dépenses opérationnelles : l’infrastructure est généralement fournie par un
tiers et n’a pas besoin d’être achetée, de sorte qu’il est plus facile pour les utilisateurs
d’entrer dans le monde de l’informatique. La tarification sur une base utilitaire de calcul
est à grain fin avec des options basées sur l’utilisation. Il est cependant possible que les
fournisseurs de Cloud masquent à l’avenir cette granularité, et mettent en œuvre des
accords de prix pour la commodité des clients.
- Efficacité énergétique : elle est due à l’aptitude du Cloud à réduire la consom-
mation de ressources non utilisées. Les ressources sont gérées de façon centralisée, de
sorte que les coûts supplémentaires de la consommation d’énergie ainsi que les émissions
de carbone peuvent être mieux contrôlées que dans les systèmes non-coopératifs.
[Link] Eucalyptus
Eucalyptus [Euc] est une solution qui permet l’installation d’une infrastructure de
Cloud privé et hybride. Il est écrit en langage Java, C et Python. Il offre un contrôleur
de stockage principal et des contrôleurs sur chaque nœud. Le réseau est géré par le
composant contrôleur de Cloud, et chaque contrôleur est authentifiée par un système de
clés SSH qui sert aussi à l’autorisation pour authentifier les transactions. La disponibilité
d’Eucalyptus est limitée, par rapport à l’extensibilité massive, et le code source de
certains de ses modules est inaccessible. C’est pourquoi il est abandonné pour d’autres
solutions. Eucalyptus est la plateforme utilisée par Amazon EC2.
3.4. Le Cloud computing 61
[Link] OpenNebula
OpenNebula [Opeb] est une autre solution de Cloud, il est open source sous licence
Apache 2. Il est écrit en C++, Ruby et Shell. C’est un projet qui fournit un ensemble de
fonctionnalités permettant de gérer complètement un Cloud. Plus exactement, Open-
Nebula organise le fonctionnement d’un ensemble de serveurs physiques, fournissant
des ressources à des machines dites « virtuelles ». C’est l’orchestration et la gestion du
cycle de vie de toutes ces machines virtuelles qui est au centre de ce type de solution.
C’est donc au cœur des datacenters que se déploie cette solution. Elle s’adresse en
général à des grands comptes dotés d’une infrastructure informatique réseau complexe.
OpenNebula est également compatible avec les hyperviseurs classiques. Il peut fonc-
tionner aussi bien avec des outils open source comme KVM, Xen qu’avec des logiciels
propriétaires comme ceux de VMware ou encore Hyper-V de Microsoft.
Ce projet n’est pas récent, il a vu le jour en 2005 avec la sortie d’une première version
utilisable en 2008. On notera également qu’il s’agit d’un projet européen, développé par
une société espagnole.
C’est au niveau du stockage des données que se situent les principales nouveautés.
De nombreuses versions ont permis d’obtenir aujourd’hui des évolutions fonctionnelles
importantes concernant le support des nœuds de stockage, les fonctions de haute dis-
ponibilité et l’ergonomie des interfaces d’administration. Il s’agit d’une solution facile
à utiliser pour les centres de données et les Cloud privés.
[Link] CloudStack
CloudStack [Clo] est une plateforme de Cloud IaaS open source, développé à l’origine
par [Link]. En Avril 2012, Citrix a fait don de CloudStack à Apache Software
Fondation, tout en changeant la licence Apache 2.0. CloudStack implémente les API
Amazon EC2 et S3, ainsi que l’API vCloud, en plus de sa propre API. Ecrit en Java,
CloudStack est conçu pour gérer et déployer les grands réseaux de machines virtuelles.
Il prend actuellement en charge les plateforme Cloud VMware, Oracle VM, KVM, Xen
et XenServer. CloudStack a une structure hiérarchique, qui permet de gérer plusieurs
hôtes physiques à partir d’une interface unique.
[Link] OpenStack
– la sclabilité : OpenStack est déjà déployé dans le monde entier dans des entre-
prises dont les volumes de données est mesuré en pétaoctets, sur des architectures
distribuées et massivement extensible. On parle de jusqu’à 1 million de machines
physiques, et jusqu’à 60 millions de machines virtuelles et des milliards d’objets
stockés.
– compatible et flexible : OpenStack supporte la plupart des solutions de virtua-
lisation du marché comme ESX, Hyper-V, KVM, LXC, QEMU, UML, Xen et
XenServer.
– open source : l’intégralité du code peut être modifié et adapté en fonction des
besoins. Le projet OpenStack présente également un processus de validation pour
l’adoption et le développement de nouvelles normes.
[Link] OpenShift
OpenShift [Opec] est la solution de RedHat pour faire du PaaS. Jusqu’à présent,
Docker dont on a parlé précédemment à propos du confinement et Red Hat utilisaient
des versions incompatibles du noyau Linux. Le partenariat qui vient d’être signé au
printemps 2014 permet aux développeurs d’utiliser des conteneurs Docker dans Open-
Shift et de les déplacer facilement. Cela pourrait faire d’OpenShift un acteur majeur
à terme, en substituant complètement la notion de machine virtuelle par la notion de
conteneurs.
1. Voir [Link]
3.5. Le Cloud SlapOS 63
Le projet Resilience se base sur le Cloud libre SlapOS [SSCC11], dont les principales
caractéristiques sont les suivantes et en première approximation :
SlapOS est un système de Cloud Computing distribué dont le but est d’offrir un
environnent de Cloud résilient et à moindre coût. SlapOS fournit une plateforme d’au-
tomatisation du déploiement des applications et il est basé sur les technologies Buildout
(pour le déploiement) et l’ERP Open Source ERP5 (pour la gestion de la relation client
et le catalogue des applications déployables).
Un point particulier dans SlapOS est qu’il n’est pas basé sur la virtualisation, tou-
tefois il est possible de déployer des machines virtuelles à travers KVM par exemple
mais ceci est une option. Ce choix est motivé d’une part pour éviter l’empilement de
couches logicielles qui peuvent nuire in-fine aux performances et d’autre part parce
qu’on peut traiter le confinement par des techniques liées au système d’exploitation.
SlapOS cherche à bâtir un Cloud en faisant reposer les concepts propre au Cloud sur
le système d’exploitation, autant que possible,. . . ainsi que sur un ERP pour gérer le
catalogue des applications et la relation client.
exemple. SlapOS a été conçu dans le cadre d’un projet industriel et non pas dans le
cadre d’un projet HPC universitaire ce qui explique sans aucun doute ces choix.
SlapOS est basé sur une architecture (voir la Figure 3.4) dans laquelle les nœuds
esclaves sont tous connectés a un nœud maître.
Le nœud maître appelé SlapOS Master ou Master a pour rôle l’allocation des pro-
cessus c’est-à-dire. des applications, tandis que les nœuds esclaves appelés SlapOS Node
ou Node ont pour rôle l’installation et l’exécution des services. Le Master constitue
un annuaire centralisé de SlapOS Nodes, c’est lui qui possède les informations qui ca-
ractérisent chaque Node. Il possède aussi le catalogue des applications qui peuvent
être installées dans la plateforme et il dispose de toutes les informations sur l’état des
applications et services installés sur tous les nœuds. Ces informations sont utiles en
particulier pour établir une facturation en fonction de l’usage d’un service.
Un Node, qui repose généralement sur une distribution Linux minimale, est constitué
principalement d’un démon appelé SLAPGRID, d’un environnement de construction et
d’amorçage des applications (à base de la technologie Buildout) et d’un autre démon de
contrôle des services appelé Supervisord. Il échange des informations au format XML
ou Json avec le master grâce au protocole SLAP Protocol. Le SLAP Protocol fonctionne
a travers des connexions en HTTP/HTTPS. Il permet au Master de transmettre la liste
des applications à construire sur un Node ainsi que la liste des services à déployer. Il
permet aussi au Node de retourner des informations au Master, concernant l’état des
ressources ou encore le statut des services.
3.5. Le Cloud SlapOS 65
Les Software Releases : dans SlapOS, un software release (voir la Figure 3.5) est
construit à base du profile buildout de l’application. Il contient tous les binaires néces-
saires pour exécuter l’application ; ces binaires sont obtenus généralement après com-
pilation à partir du profile Buildout. Ainsi, SlapOS est capable de déployer plusieurs
instances d’une application à partir d’un seul software release dans plusieurs partitions.
Ces instances sont appelées software instances. Chaque software instance s’exécutent
de manière indépendante vis à vis des autres.
Cette technique de déploiement permet, en théorie, un gain de performance et sur-
tout un usage sobre des ressources d’un nœud. SlapOS peut alors tourner même sur des
serveurs de faible performance. N’étant pas conçu sur les base de virtualisation, SlapOS
est quand même capable de déployer des machines virtuelles, ceci par exemple grâce à
un software release résilient dédié.
Réseaux et adresses IPv6 : SlapOS est conçu pour fonctionner de manière native
avec IPv6. L’adresse IPv6 est l’adresse utilisée pour externaliser les services déployés
dans les partitions. L’adresse IPv4 est locale à un Node, elle est le plus souvent utilisée
lorsque deux services déployés dans des partitions différentes doivent communiquer
entre elle. L’IPv6 permet le déploiement aisé de SlapOS, grâce notamment à l’auto-
configuration du réseaux.
L’avantage est de pouvoir disposer facilement d’adresses IP publiques accessibles
dans le monde entier et en nombre illimité. Toutefois SlapOS peut également s’ins-
taller dans un environnement ne disposant que d’IPv4. Dans ce cas l’administrateur
peut choisir d’utiliser un tunnel IPv4-IPv6 déployé en même temps que SlapOS. Une
autre solution consiste à utiliser re6st, qui est un système de réseau d’overlay résilient
conçu pour fournir une connectivité en IPv6 fiable et rapide aux entreprises. Ce réseau
d’overlay a été conçu en liaison étroite avec SlapOS et il n’existait pas avant SlapOS.
fait l’IaaS dans le Cloud. Les fournisseurs des Clouds facturent aux utilisateurs leurs
consommations et leurs utilisations effectives des ressources et non pas un accès de
durée limité ou illimité. Pour les Grilles de calcul, on paie l’accès à une Grille pour en
pouvoir profiter. Les utilisateurs de Grilles s’organisent généralement en communautés
autour d’un ou plusieurs projets durant lesquels ils se partagent des heures d’utilisation
des ressources des grilles.
La nature d’utilisation et de gestion des ressources en Grille de calcul comme en
Cloud diffèrent selon les objectifs de chacun. En effet, les grilles, de nature hétérogène et
dynamique, doivent gérer différentes ressources ayant divers systèmes d’exploitation et
politiques de sécurité. Ainsi, leur architecture se trouve dédiée pour résoudre des opéra-
tions de calcul à large échelle en se basant sur un réseau de partage de ressources. Le but
est d’obtenir une puissance de calcul suffisante pour les tâches à exécuter. L’exécution
des tâches dans une grille dépend d’un gestionnaire local qui coordonne l’affectation
des tâches aux ressources (l’ordonnancement).
Cependant, la nature des opérations sur les Clouds dépend plutôt des protocoles
et des technologies utilisés (les services Web, les flux, le Web dynamique, etc). Ces
protocoles permettent aux Clouds d’utiliser des interfaces abstraites afin d’accéder au
plus large spectre possible de ressources de stockage et de calcul existant. Par ailleurs,
il reste possible que cela soit réalisé en se basant sur les grilles et leurs technologies
qui n’arrêtent pas de progresser sur les domaines de la sécurité, de la virtualisation et
de la gestion de ressources en général. En Cloud, on ne parle pas directement d’ordon-
nancement car les utilisateurs partagent les ressources en même temps et non de façon
séquentielle, sans le savoir.
Comme le montre la figure 3.7, Ian Foster et al. ont présenté, dans [FZRL09], la
relation entre le Cloud et les autres domaines avec lesquels il chevauche. Ainsi, les
technologies du Web 2.0 couvre presque tout le spectre des applications orientées ser-
vices, où le Cloud Computing se situe. Supercomputing et Cluster sont davantage axés
sur les applications « non-services traditionnels ». Les systèmes de Grille chevauchent
avec tous ces domaines, leur passage à l’échelle est moins considérable que celui des
Supercomputer et des Clouds.
3.7 Conclusion
Dans ce chapitre nous avons présenté tous les éléments en relation avec notre do-
maine de recherche. Nous avons commencé par présenter globalement les systèmes dis-
tribués de calcul, nous nous sommes focalisés sur les Grilles de PCs en décrivant leurs
caractéristiques. Nous avons mentionné les différents défis demandés par un intergiciel
de Grille de PCs, tels que la volatilité des ressources, un environnement dynamique,
palier au manque de fiabilité et à la panne des ressources, prendre en compte l’hétéro-
généité, le passage à l’échelle et la participation volontaire. Puis, nous avons présenté le
paradigme de publication-souscription, et le système BonjourGrid basé sur l’utilisation
de ce paradigme.
Ensuite, nous avons présenté les systèmes de Cloud Computing et plus précisément
le Cloud SlapOS qui constitue un élément de base de nos travaux. Dans les chapitres
qui viennent, nous montrons comment nous avons contribué à ces concepts.
72 CHAPITRE 3. Architecture des systèmes distribués de notre étude
Deuxième partie
Contributions
75
Chapitre 4
4.1 Introduction
de publication souscription.
Lors de la validation formelle nous avons rencontré des difficultés pour la vérification
de certaines propriétés avec les outils de vérification formelle de CPN Tools. Ces outils
visent à évaluer et valider des expressions écrites dans le langage de programmation
fonctionnel Standard ML et représentant les propriétés d’accessibilité, de vivacité, etc.
La plupart de ces évaluations ont été élaborée en utilisant la librairie formelle ASK-
CTL que nous avons installée au sein de CPN Tools spécialement pour cette tâche. Des
évaluations ont été faites sur des formules exprimant les propriétés formelles à satisfaire.
Certains résultats ne correspondent pas à ce qui était attendu.
La Figure 4.2 illustre l’une des plus importante formule d’évaluation. En effet, dans
le système BonjourGrid, si on a un Worker actif alors on a forcément un Coordinateur
auquel ce Worker est attaché. Autrement dit, s’il existe un Worker alors il existe au
moins un Coordinateur. Cette propriété est écrite en utilisant Standard ML, et on
attend que la formule retourne la valeur booléenne (True), mais comme le montre la
Figure 4.2, la valeur (False) est retournée avec notre modèle.
La non-validation de certaines propriétés nous a amenée à la conclusion suivante :
– soit nous avons réalisé une mauvaise modélisation du système BonjourGrid ;
– soit nous avons bien modélisé notre système mais c’est le protocole de communi-
cation qui n’est pas correct ;
– soit le type de modélisation choisi ne correspond pas au système BonjourGrid,
qui s’avère très complexe à modéliser.
En fait, la dernière explication est plus apte à être retenue. Nous avons dû, en effet,
introduire et faire des choix de modélisation qui ne coïncident pas avec les choix d’im-
plémentation. Rappelons que nous faisons une vérification «à posteriori» du protocole.
Nous aurions pu retravailler la modélisation pour lisser ces problèmes mais nous
avons préféré partir sur une autre piste. Comme dans notre domaine des intergiciels de
grilles de PCs nous n’avons pas l’habitude de faire de la modélisation formelle, nous
CHAPITRE 4. Modélisation formelle de protocoles utilisant le paradigme
78 Publication-Souscription
n’avions pas au départ d’idées sur les «bonnes» questions à se poser. Au fil du temps
les choses se sont précisées en ces termes :
– Doit-on se focaliser sur les changements d’états du système ou sur les interactions
entre les différents acteurs du système de Grille ?
– Faut-il aussi suivre son intuition pour la modélisation, comme on l’a déjà fait par
le passé pour le développement ?
– Quelles méthodes adoptées pour garantir un système extensible ?
Il y avait plusieurs pistes possibles pour entamer la modélisation. Nous sommes
partis avec les idées d’offrir à la fois un modèle clair, extensible (pour des éventuelles
évolutions du système) et surtout bien positionné par rapport au point fort de Bon-
jourGrid qui est la décentralisation de la coordination. Il est évident qu’il faut revoir
notre centre d’intérêt initial.
De ce fait, nous nous sommes intéressés essentiellement à la construction d’un élé-
ment de calcul de BonjourGrid et plus précisément aux interactions entre les différents
acteurs d’un même élément de calcul.
D’un point de vue concret, ces différentes interactions sont gérées par le protocole
de coordination qui est en fait le protocole Bonjour d’Apple [BON]. Le protocole Bon-
jour est une implémentation du protocole ZeroConf (Zero Configuration Network). Il
est essentiellement basé sur le paradigme de publication-souscription. D’où l’idée de
commencer par modéliser le protocole de publication-souscription. Ainsi, nous abor-
dons la problématique avec plus d’abstraction afin de pouvoir faciliter le contrôle de la
modélisation et de la vérification par la suite.
Une fois que cet événement est publié, la transition Notify sera franchissable. Une
condition doit être vérifiée lors du franchissement de la transition Notify : «un même
composant ne peut pas souscrire à l’événement qu’il a publié», ce qui a été modélisé en
utilisant la garde [S Ó= P ]. Bien que cette modélisation montre les différentes facettes
du protocole, elle reste tout de même inexploitable puisqu’elle ne présente pas d’état
final. Ceci veut dire qu’en cas d’exploration de l’espace d’états, nous aurons une infinité
de branchements.
La figure 4.4 présente une partie du rapport généré par CPN Tools et il indique le
Dans cette section, nous présentons les points clés et les étapes suivies lors de la
modélisation de le méta-intergiciel BonjourGrid. L’idée principale est de modéliser Bon-
jourGrid autour de la modélisation formelle du paradigme de publication-souscription.
Pour ce faire, nous procédons par étapes.
Nous considérons que la modélisation du protocole de publication-souscription est
une boite noire. Nous commençons par y greffer tout ce qui est spécifique à BonjourGrid
autour de cette boite comme étant un événement extérieur, de façon à ce que tout
le protocole de coordination soit basé sur l’annonce d’événements. Nous commençons
par rajouter les fonctionnalités fondamentales de BonjourGrid, telles que l’ajout d’une
application à soumettre ou la notion de machine au repos, sans rentrer trop dans les
détails. Ensuite, nous utilisons la méthode de modélisation par raffinement.
Le raffinement consiste à définir un système avec un système racine et un ensemble de
transformations qui sont soit des enrichissements, soit des remplacements d’une partie
par un système. Cette méthode est itérative. Dans notre cas, elle consiste à rajouter
des détails fonctionnels du système à chaque itération. Nous nous focalisons dans cette
section sur cet aspect itératif afin d’observer l’évolution de notre modélisation formelle.
CHAPITRE 4. Modélisation formelle de protocoles utilisant le paradigme
82 Publication-Souscription
Ainsi, l’analyse du rapport de l’espace d’états retourné par CPNTools et les résultats
observés des propriétés CTL, prouvent que notre système est correct. Il ne présente pas
CHAPITRE 4. Modélisation formelle de protocoles utilisant le paradigme
86 Publication-Souscription
Nous croyons que les Desktop Grids continueront de survivre si nous sommes capables de
transformer l’ancienne architecture client/serveur en nouvelle architecture orientée Web
afin de fournir des services à la demande, donc de les intégrer dans des infrastructures
de Cloud.
Il existe également de nombreuses applications scientifiques et économiques qui
traitent avec une énorme quantité de données. Afin de traiter de grands jeux de données,
ces applications ont généralement besoin d’une infrastructure de calcul haute perfor-
mance. Toutefois, étant donné que les ressources d’une grille de PCs sont généralement
accessibles via les grands réseaux, notamment Internet, le goulot d’étranglement suit la
limitation de la bande passante. La question est d’imaginer des architectures capables
de masquer (en partie) la limitation de la bande passante. Dans notre cas, nous choisis-
sons un découplage entre la source (les données) et le calcul par la mise en place d’un
cache distant et un cache local.
D’après Fedak et al. dans [CF12], dans l’environnement des grilles de PCs, les tâches
basiques de gestion des données tel que le stockage fiable de grands volumes de don-
nées sont très difficiles à accomplir, premièrement à cause de la volatilité des nœuds.
Deuxièmement, la vie privée et la sécurité des données doivent être appliquées sur les
grilles de PCs parce que nous traitons avec des ordinateurs non fiables. Le mécanisme
de protection des données peut ajouter des frais non négligeable lors du traitement de
grands volumes de données.
Troisièmement, étant donné que les ressources sont réparties géographiquement, la
conception d’une solution scalable permettant de gérer de grandes masses de données
est un problème. La dernière version de BonjourGrid se concentre justement sur ce
CHAPITRE 4. Modélisation formelle de protocoles utilisant le paradigme
88 Publication-Souscription
dernier problème.
Depuis sa finalisation en 2010, le méta-intergiciel BonjourGrid n’a pas arrêté d’évo-
luer tout en prenant en considération les évolutions technologiques et de nouveaux
besoins. Dans cette section, nous nous focalisons sur la modélisation formelle de l’un
des aspect d’évolution de BonjourGrid afin de montrer que notre modèle de départ est
flexible et extensible. Mais aussi que notre conception de la modélisation est efficace
dans le sens où on peut toujours étendre le modèle en changeant l’angle de vue des
abstractions.
En fait, au début notre boite noire était le modèle de la publication-souscription
par dessus lequel on a ajouté tous ce qui est spécifique à BonjourGrid, et à ce niveau,
l’angle d’abstraction change et notre boite noire est la modélisation de BonjourGrid
par dessus laquelle on rajoute tous ce qui est spécifique à son évolution.
Comme expliqué par [Link] et al. dans [SACJ12], l’idée principale consiste à créer
dynamiquement et à la demande, pour chaque application soumise par un utilisateur,
un gestionnaire de données (DataManager) en plus du système de calcul déjà mis en
œuvre. La solution proposée dans [SACJ12] supporte les applications existante sans
obligation de modifier leurs implémentations. Le gestionnaire de données est lancé et
supervisé par le nœud coordinateur de BonjourGrid en parallèle avec l’intergiciel de
calcul choisi (BOINC, XtremWeb ou Condor).
Ainsi, BonjourGrid devient une grille de méta-données qui orchestre simultanément
plusieurs instances de gestionnaires de données et de systèmes de calcul. Pour réaliser
cette approche, les auteurs composent la plateforme de gestion de données avec deux
caches qui interagissent continuellement afin de maintenir la disponibilité des données
pendant toute l’exécution d’une application. Chaque cache offre un ensemble de services.
Le premier cache est un cache distant pour les activités de placement de données, le but
est de réserver l’espace disque pour l’application et de transférer les données nécessaires
à partir du site de l’utilisateur à la plateforme BonjourGrid.
Une fois que les données sont placées sur la plateforme, un deuxième cache ap-
pelé cache local est automatiquement lancé afin de publier et diffuser les données aux
workers. Une autre évolution apporté à BonjourGrid consiste à ne plus utiliser le pro-
tocole Bonjour d’Apple mais à utiliser le protocole Redis [RED] pour implémenter le
paradigme de publication-souscription.
Notre modélisation formelle initiale de BonjourGrid a été mise au point afin de
prendre en considération cette évolution. La figure 4.10 présente le réseau de Petri coloré
modélisant cette nouvelle version de BonjourGrid. Comme on utilise Redis [RED] dans
la nouvelle version, on a été amené à apporter des modifications sur la brique centrale
de publication-souscription. En effet, le paradigme de publication-souscription n’est pas
implémenté de la même façon sur Redis et sur le protocole Bonjour. Sur Redis, si un
événement est publié et qu’il n’y a pas de souscripteur au préalable pour cet événement,
alors l’événement est perdu, ce qui n’est pas le cas pour le protocole Bonjour. On a dû
4.5. Évolution de BonjourGrid 89
adapter le noyau central de notre modélisation pour qu’il prenne en considération cette
nouvelle contrainte. Nous avons aussi rajouté les deux composants de «cache local» et
«cache distant» qui sont directement liés au processus de l’exécution d’une application.
4.5.2 Discussion
Le système d’interaction Publication-Souscription est un paradigme émergent pour
les applications distribuées à grande échelle. Il intéresse autant les industriels que les
chercheurs. Certains standards et produits industriels sont directement basés sur ces
CHAPITRE 4. Modélisation formelle de protocoles utilisant le paradigme
90 Publication-Souscription
systèmes. D’autres systèmes proposés dans la recherche s’en inspirent aussi. La plupart
de ces travaux s’intéressent au problème de la construction d’un système le plus idéal
possible en termes de scalabilité, efficacité et sécurité. Mais, ils ne se focalisent pas
assez sur le problème d’analyse formelle de l’exactitude de tels systèmes. Dans ce sens,
certains travaux de recherche ont déjà prêté attention à la vérification formelle des
systèmes de Publication-Souscription.
Dans [ZGB03, BGZ05], Baresi L. et al proposent une approche pour la modéli-
sation et la validation des systèmes de Publication-Souscription. Cette approche est
basée sur une architecture de composants qui réagissent à des événements. Dans ce tra-
vail, les composants sont spécifiés en diagrammes d’états-transitions UML. Les auteurs
proposent une approche de validation utilisant la méthode de vérification de modèle
(model-checking) pour prouver des propriétés sur l’échange de messages qui sont définies
par des diagrammes d’état-transition. Les propriétés sont transformées en automates
puis traduites en langage PROMELA (PROtocol MEta LAnguage) pour pouvoir être
vérifiées par le modèle checker SPIN [Hol03]. Ainsi, au lieu d’utiliser les formules de
la logique linéaire temporelle (LTL) de SPIN, les auteurs ont interprété les propriétés
sous forme d’automates. Selon eux, ceci permettra de représenter des propriétés plus
complexes nécessaires pour valider le système modélisé.
Bien que notre approche de modélisation soit aussi basée sur des composants réagis-
sants à des événements, nous préférons jouer sur les atouts des logiques temporelles pour
la vérification formelle, en particulier par l’utilisation de la librairie ASK-CTL [CM96].
Dans [GKK03], Garlan D. et al décrivent un framework générique dédié à la modéli-
sation et la vérification formelle du mécanisme Publication-Souscription. Leur système
est basé sur un modèle de machine à états assurant la gestion des événements pen-
dant l’exécution du protocole Publication-Souscription. Le framework prend en entrée
un ensemble de composants et un ensemble de propriétés du mécanisme Publication-
Souscription. L’appariement des deux ensembles est par la suite validé en utilisant des
outils de model checking. Ce système reste considéré surtout comme un framework gé-
nérique dans lequel il existe toujours le risque de ne pas offrir une modélisation et une
vérification adaptée à chaque cas spécifique du mécanisme Publication-Souscription.
Notre optique est de réussir une modélisation et une vérification formelle la plus adap-
tée possible à BonjourGrid tout en isolant le mécanisme Publication-Souscription.
Dans [KKJD08, KKD09], Kacem N. et al, motivés par les avantages des analyses
formelles, proposent pour leur protocole de coordination un modèle formel en utilisant
les réseaux de Pétri colorés. Pour juger l’exactitude de leur modèle et par suite de
leur protocole, ils ont vérifié formellement les propriétés comportementales et mis en
œuvre un mécanisme de model checking CTL. De notre coté, nous capitalisons aussi
sur l’utilisation des réseaux de Pétri colorés et les logiques CTL.
Dans [FL06], les auteurs proposent l’extension de l’ADL Architecture Description
Language [KC96] afin de supporter la description du style Publier-Souscrire. Il s’agit
4.5. Évolution de BonjourGrid 91
d’un langage basé sur la théorie des catégories, laquelle étudie les structures mathéma-
tiques et les relations qu’elles entretiennent. Les auteurs spécifient alors les types de
composants ainsi que leur comportement. Pour chaque composant, ils spécifient les évé-
nements publiés et/ou souscrits. La topologie du service d’événement est non spécifiée.
Le langage est assez complexe et nécessite une expertise considérable dans le domaine
des catégories.
Bien que les travaux réalisés autour de la modélisation formelle du protocole de
publication-souscription restent très intéressants, ils ont chacun abordé le sujet d’un
point de vue différent, et avec des niveaux d’abstraction différents.
Notre travail se différencie par rapport aux autres travaux par la démarche utilisée,
le niveau d’abstraction considéré, les outils utilisés et surtout le but principal de la
modélisation. En fait, dans notre travail, la modélisation du protocole de publication-
souscription n’est pas réalisée pour modéliser uniquement le protocole mais surtout
pour constituer une brique générique permettant de modéliser n’importe quel système
utilisant ce protocole.
Notre démarche est centrée sur la coordination, autrement dit sur l’aspect compor-
temental en terme d’événements publiés et/ou souscrits. L’aspect structurel et archi-
tectural ne sont pas mis en avant. Ainsi, nous nous situons à un niveau d’abstraction
très élevé afin de maîtriser la complexité de notre système et ne pas se perdre dans les
détails.
Les réseaux de Petri colorés offrent une technique de modélisation formelle qui est
bien adaptée pour la modélisation et l’analyse des systèmes complexes. En effet, les
modèles hiérarchiques peuvent être construits, l’information complexe peut être repré-
sentée par paramétrage des jetons et des outils matures et éprouvées existent pour créer,
simuler et analyser des modèles CPN.
D’autre part, notre modélisation formelle présente des atouts majeurs de part la
technique et les outils utilisés. En effet, les fonctionnalités intégrées dans l’outil CPN-
Tools offrent plusieurs avantages. L’outil inclue un support pour la collecte de données
au cours de simulations, et un support pour l’exécution de plusieurs réplications de simu-
lation. Les mécanismes utilisés pour ces fins sont appelés des moniteurs. Ils permettent
d’inspecter et contrôler les simulations dans le but de collecter des données, mesurer la
performance, définir des points de ruptures de simulation spécifiques au modèle. Ainsi,
on peut observer et contrôler complètement le comportement d’un modèle.
Bien que cette analyse méthodologique offre des résultats satisfaisants, elle peut
être complétée par une étape beaucoup plus avancée de vérification formelle de notre
protocole. Cette étape consiste à analyser des configurations plus importantes afin de
contourner le problème de l’explosion d’états. Deux perspectives se présentent :
– Exporter notre modélisation actuelle sur une plateforme dédiée spécialement à la
vérification formelle. CPN Tools est en effet très pratique dans une perspective
de modélisation et de simulation, mais on peut toujours utiliser un outil de vé-
CHAPITRE 4. Modélisation formelle de protocoles utilisant le paradigme
92 Publication-Souscription
(a) N clients abonnés à M canaux différents, dans ce cas les notifications seront ra-
pides. En effet, Redis utilise plusieurs canaux pour envoyer les messages.
(b) N clients abonnés au même canal, la commande PUBLISH sera lente à réagir sur
ce canal. Puisque nous devons envoyer le même message à tout le monde sur le
même canal, il faut mesurer le temps global pris au cours de cette étape.
Pour offrir un système de grille de PCs performant sur Internet, il est important
de mesurer le temps de réponse de Redis lors de la gestion des ressources provenant
de différents réseaux et de multiples domaines d’organisation. Les tests sont réalisés
sur Grid’5000 [Gri] en utilisant 300 nœuds entre les sites de Nancy, Grenoble et Tou-
louse. Nous mettons en place un noyau spécifique contenant le package Redis (les outils
client et serveur) afin d’exécuter nos scripts python pour le démarrage du serveur Re-
dis (Start-Redis-Server()), les services de publication (Register-Service()) et les services
de souscription (Browse-Service()). Pour simuler ce comportement, nous avons adopté
plusieurs scénarios de test (séquentiels ou simultanés) en utilisant un ou plusieurs sites.
Ici, nous présentons uniquement les résultats pour les enregistrements simultanés.
Dans ce test, nous réservons 222 nœuds sur le site de Nancy pour publier un service
donné en même temps. Le scénario est divisé en trois étapes :
(a) Exécuter le programme du serveur Redis dans le premier nœud ;
(b) Lancer le script Browse-Service (service_name) dans le second nœud. L’attribut
«service_name» est le nom du canal auquel on souscrit.
(c) Exécuter en parallèle sur 220 nœuds restants le script de Register-Service(service_name,
service_ID). Nous utilisons le même nom de service pour toutes les publications.
La valeur du service_ID est le rang de la machine dans le fichier de la charge
de travail. Cet attribut est le message à transmettre par une machine donnée.
L’attribut service_ID sera utilisé par le nœud Browse-Service() afin de distinguer
le service publié au cours du processus de découverte/souscription, et marquer la
fin du temps de publication.
20
Registration Time
Time In MilliSecond(ms)
15
10
0
0 20 40 60 80 100 120 140 160 180 200 220
Nbre Of Nodes
180
Discovery Time
160
Time In MilliSecond(ms)
140
120
100
80
60
40
20
0
0 20 40 60 80 100 120 140 160 180 200 220
Nbre Of Nodes
ms. Ainsi, la comparaison de Redis avec d’autres analyses précédentes des protocoles
Bonjour, Avahi et Pastry [AD08], démontre que Redis présente les meilleurs résultats
et n’est pas surchargé.
L’autre valeur importante est le temps nécessaire pour souscrire à un service donné.
Pour chaque nœud, les résultats sont présentés dans la figure 4.11(b). Ce temps indique
le temps écoulé entre la fin de la publication d’un service unique et l’instant où le nœud
souscripteur a bien découvert le service. Les courbes prouvent que le souscripteur peut
découvrir tous les services publiés dans un délai moyen égal à 50ms.
Dans ce test, nous avons utilisé 292 machines réparties sur trois sites de la plateforme
Grid’5000. Nous adoptons le même scénario utilisé dans le premier test. La figure 4.12
montre que la publication des services est divisée en trois phases. Une fois que le nœud
de souscription souscrit au canal en exécutant le script Browse_Service(), nous activons
4.6. Étude des avantages/inconvénients de Redis 97
en même temps le processus de publication pour un site donné respectivement sur Nancy
(115 nœuds), Grenoble (95 nœuds) et Toulouse (82 nœuds).
La figure 4.13(a) indique que le temps de publication augmente d’un site à l’autre.
En effet, le temps écoulé varie entre 10ms (Nancy site) à 48ms (Toulouse). Notons que
jusqu’à 290 machines Redis n’a pas été saturé et les parcelles de courbes sont presque
linéaires. Ce qui met en avance la haute scalabilité du protocole Redis.
80
Toulouse Registration Time
70 Grenoble Registration Time
Nancy Registration Time
Time In MilliSecond(ms)
60
50
40
30
20
10
0
0 20 40 60 80 100 120 140 160 180 200 220 240 260 280 300
Nbre Of Nodes
150
100
50
0
0 20 40 60 80 100 120 140 160 180 200 220 240 260 280 300
Nbre Of Nodes
Fonction PublisherService {
Publish(Event e) ;
}
Les souscripteurs possèdent une fonction permettant de souscrire à des classes d’évé-
nements :
Fonction SubscriberService {
4.7. Discussion autour de la modélisation du mécanisme de publication-souscription 99
Subscribe(EventType t);
Event Receive();
}
Pour Redis, un service est capable d’envoyer un message dans un canal sans connaître
les récepteurs à l’avance. Un ou plusieurs services sont abonnés à ce canal et reçoivent les
messages correspondants. Avec Redis, on peut résumer cela avec les deux abstractions
suivantes :
– SUBSCRIBE pour s’abonner à un canal/sujet/catégories ;
– PUBLISH pour envoyer un message dans un canal.
Au moment où un message est publié, tous les abonnés vont le recevoir en même
temps. Ensuite ce message est perdu pour toujours. Si un client n’était pas connecté
à ce moment là, il ne recevra jamais le message. Inversement, un client peut attendre
infiniment avant qu’un message entre en jeu, parce que il n’y a pas de temporisation de
l’attente. C’est ici que réside toute la différence avec le protocole Bonjour.
Cette différence n’a pas été négligeable lors de la modélisation. Comme le montre
la figure 4.14, il y a des différences entre la partie gauche concernant la modélisation
du protocole Bonjour et la partie droite concernant la modélisation de Redis (ces deux
modèles sont une nouvelle fois le fruit de notre travail). En fait, dans Bonjour, les com-
posants peuvent souscrire n’importe quand et publier n’importe quand sans contraintes
particulières et sans risque de perdre de l’information et ceci dans la limite du proto-
cole [ACDJ08]. Ce qui reste assez générique. Ainsi, lors de la modélisation, nous n’avons
pas besoin de contrôler la publication et la souscription.
Contrairement à Redis, le fait que les messages publiés seront perdus lorsqu’il n’y
a pas de souscripteurs potentiels engendrent des contraintes au moment de la modéli-
sation. Ainsi, nous avons dû rajouter des places de contrôle afin de maîtriser les publi-
cations et les souscriptions pour qu’il n’y ait pas de pertes de messages et satisfaire la
CHAPITRE 4. Modélisation formelle de protocoles utilisant le paradigme
100 Publication-Souscription
propriété : «un événement produit/publié doit être reçu par tous les consommateurs/-
souscripteurs intéressés par cet événement».
La place PublishControl permet de placer les événements auquels on souscrit dans
une liste qu’on a appelé lis. Avant qu’un composant puisse publier un événement ev, on
doit d’abord vérifier s’il existe des composants qui ont déjà souscrit à cet événement.
La garde [mem lis ev=true] placée au niveau de la transition Publish permet d’assurer
cette contrainte.
D’autre part, la place SubscribeControl permet de mettre à jour la liste des événe-
ments publiés qu’on a appelé file. La notification se fait quand la liste file et incluse
dans la liste lis. Cette contrainte est assurée par la garde [contains lis file] au niveau
de la transition Notify.
Il faut veiller à ce que ces deux listes soient mise à jour à chaque changement du
système. C’est ce qui justifie le fait que les deux listes soient reliées à la transition
Unsubscribe ou aussi à la transition BeNotified. Ainsi, actualiser les deux listes au
bon moment garantit le respect des différentes contraintes et par conséquent le bon
fonctionnement du système.
4.8 Conclusion
Dans ce chapitre nous avons présenté une partie de nos contributions concernant
la modélisation formelle. Ces travaux ont fait l’objet de publications internationales
dans les conférences : SCC (IEEE International Conference on Services Computing,
2011 ) [ACE11], GPC (International Conference on Grid and Pervasive Computing,
2012 ) [ACK12] et SBAC-PAD (International Symposium on Computer Architecture
and High Performance Computing, 2014 ) [LAJ14] pour l’évolution de BonjourGrid et
l’étude des performances de Redis.
101
Chapitre 5
RedisDG : modélisation,
prototypage et validation
expérimentale
5.1 Introduction
Dans ce chapitre, nous détaillons la démarche suivie afin de développer un nouvel
intergiciel de grille de PCs, appelé RedisDG, semblable dans son fonctionnement à
BOINC ou Condor mais capable de tourner sur les petits dispositifs, i.e. smartphones,
tablettes comme sur les dispositifs plus traditionnels (PCs) (150 lignes de code python
dans notre classe Worker). Notre objectif principal est de repenser les interactions entre
les composants d’une grille de PCs en termes de technologies WEB actuelles. En effet,
il n’est pas garanti que les codes des intergiciels BOINC ou Condor, puissent continuer
à tourner sur les infrastructures actuelles. Par exemple, dans le cas du Cloud, Cérin et
Takoudjou ont étudié dans [CT13] l’intégration de BOINC puis Condor dans le Cloud
SlapOS [SSCC11] et cette intégration ne s’est pas avérée facile et immédiate. Nous
commençons par présenter le modèle formel de RedisDG, puis son architecture, ensuite
son implémentation ainsi qu’une validation expérimentale et enfin son intégration dans
le Cloud SlapOS afin d’offrir les fonctionnalités d’une grille de PCs comme un service
Web.
étudié la possibilité de réaliser un nouveau système de grille de PCs qui rompe avec la
complexité traditionnelle. Le plus difficile dans ce domaine est de se fixer sur le protocole
de coordination utilisé pour gérer les interactions entres les différents composants d’une
grille de PCs. Mais, dans notre cas et comme nous avons déjà réalisé un travail de
modélisation formelle autour du paradigme de publication-souscription il était naturel
d’exploiter ce travail. Ainsi est venue l’idée de penser un système de grilles de PCs qui
soit entièrement basé sur le paradigme de publication-souscription, nous entendons la
manière dont nous réalisons la coordination des différents composants, la façon dont une
machine rejoint le système, la façon dont elle le quitte, la manière d’échanger les données,
la manière de contrôler l’exécution,. . . . Comme notre idée de base était de fusionner les
nouvelles technologies du Web et les composants traditionnels d’une grille de PCs, nous
avons opté pour Redis [RED] comme technologie du Web puisqu’il implémente déjà le
paradigme de publication-souscription. Nous le justifierons plus tard.
Nous avons commencé par réaliser un modèle formel basé sur notre modélisation
initiale du paradigme de publication-souscription comme brique centrale, mais aussi
adapté au fonctionnement de Redis (comme expliqué dans la section 4.7).
La figure 5.1 montre le réseau de Petri coloré de notre système RedisDG. Nous
distinguons au centre la brique publication-souscription basée sur les trois transitions
Publish, Subscribe, Notify. Dans Redis, si un événement est publié et qu’il n’y a
pas de composants ayant souscrit au préalable pour être notifiés par cet événement, alors
il est perdu à jamais. Afin de réaliser un modèle fidèle à ce comportement, nous avons
adapté notre brique de publication-souscription de base qui s’est avérée très générique,
et nous avons ajouté des places de contrôle afin de bloquer une publication qui n’a pas
de souscriptions. Les deux places de contrôle sont : SubscribeControl et ModRedis.
Leurs rôles est de générer, mettre à jour et comparer des listes des événements publiés
et des événements auxquels on souscrit.
Au moment de l’implémentation de RedisDG, il fallait prendre en considération ce
mécanisme propre à Redis. Ainsi, cette étape de modélisation nous a aidé énormément :
l’idée derrière l’ajout des places de contrôle, était d’avoir toujours des souscripteurs en
attente d’être notifiés. Au moment de développement de RedisDG, cette idée a été
comme une ligne directrice. De ce fait, les workers potentiels dans RedisDG, dès qu’ils
rejoignent le système, doivent souscrire à un événement. Un worker dans RedisDG
est composé, de manière concrète, de deux Threads : un premier qui gère l’exécution
d’une tâche et le deuxième qui gère la souscription afin de garantir la continuité du
fonctionnement du système.
Broker
WaitingTasks Coordinator
Monitor
TasksToDo Select
Volunteers
Checker
TasksToCheck
FinishedTasks
Emergency
4. Le Coordinator commence par publier les tâches indépendantes sur le canal Tasks-
ToDo.
5. Des Workers annoncent leur volontariat sur le canal VolunteerWorkers.
6. Le coordinateur sélectionne les Workers suivant certains critères.
7. Les Workers, à l’écoute au préalable sur le canal TasksToDo, commencent à exé-
cuter les tâches publiées. Cet événement d’exécution en cours est publié sur le
canal TasksInProgress.
8. Durant l’exécution, chaque tâche est sous la supervision du Monitor qui a pour
rôle de s’assurer du bon déroulement de l’exécution en vérifiant si le nœud est en
vie. Dans le cas contraire le Monitor re-publie les tâches qui ne sont pas arrivées
au bout de leur exécution sur le canal TasksToDo afin d’être relancées par d’autres
Workers.
9. Une fois l’exécution terminée, le Worker publie la tâche sur le canal TasksToCheck.
10. Le Checker vérifie le résultat retourné et publie la tâche correspondante sur le
canal FinishedTasks.
11. Le Coordinator vérifie les dépendances entre les tâches terminées et celles en
attente, et recommence à l’étape (4).
12. Une fois l’exécution terminée, le Coordinator publie un message sur le canal Emer-
gency afin de notifier tous les composants de la terminaison de l’application.
L’algorithme 1 présente les actions réalisées par le Broker. Le Broker prend comme
paramètre un graphe de tâches qui est représenté par un fichier batch. Il construit un
dictionnaire de dépendance et publie les tâches sur le canal WaitingTasks.
L’algorithme 2 présente le fonctionnement du coordinateur. D’abord, le coordinateur
doit s’abonner au canal FinishedTasks (ligne 1) afin d’être notifié des tâches terminées.
Cela implique qu’il est toujours en attende de tâches terminées. Ensuite, il vérifie le
dictionnaire de tâches publié par le Broker sur le canal WaitingTasks et il commence
par publier les tâches indépendantes sur le canal TasksToDo (ligne 5). Enfin, dès qu’il
y a un événement publié sur le canal FinishedTasks, le coordinateur met à jour son
dictionnaire de dépendances et re-publie les nouvelles tâches indépendantes sur le canal
TasksToDo (ligne 12).
L’algorithme 3 décrit les actions réalisées par un Worker. Un Worker doit, tout
d’abord, s’abonner au canal TasksToDo (ligne 1) afin d’être notifié par les nouvelles
tâches à faire. Ensuite, il procède à l’exécution d’une tâche (ligne 3). Il publie l’état de
106 CHAPITRE 5. RedisDG : modélisation, prototypage et validation expérimentale
Algorithm 2 Coordinator
1: [Link](F inishedT asks)
2: [Link](W aitingT asks)
3: for t ∈ WaitingTasks do
4: if t is independent then
5: [Link](t,TasksToDo)
6: end if
7: end for
8: while True do
9: for tf ∈ FinishedTasks do
10: for tw ∈ WaitingTasks do
11: if [Link](tf) then
12: [Link](tw,TasksToDo)
13: end if
14: end for
15: end for
16: end while
Algorithm 3 Worker
1: W [Link](T asksT oDo)
2: for t ∈ TasksToDo do
3: [Link](t)
4: [Link](t,TasksInProgress)
5: if t == f inished then
6: [Link](t,TasksToCheck)
7: end if
8: end for
la tâche en cours d’exécution sur le canal TasksInProgress (ligne 4). Une fois l’exécution
terminée, le Worker publie l’événement sur le canal TasksToCheck (ligne 5).
Dans l’algorithme 4, nous présentons les actions réalisées par le Monitor. Un Mo-
nitor doit s’abonner au canal TasksInProgress afin de superviser le déroulement de
l’exécution de chaque tâche (ligne 1). Si l’exécution d’une tâche échoue (pour n’importe
quelle raison), le Monitor demande la re-exécution en re-publiant la tâche sur le canal
TasksToDo (ligne 6).
L’algorithme 5 présente le fonctionnement du Checker. Le Checker doit s’abonner
à la file TasksToCheck afin d’être notifié par les tâches à vérifier. L’approche utilisée
pour faire de la certification des résultats est l’approche par duplication de tâches. Si
le Checker certifie que le résultat est correct, alors la tâche correspondante sera publiée
sur le canal FinishedTasks (ligne 4), sinon il demande la re-exécution en publiant la
5.4. Outils pour le monitoring d’activité 107
Algorithm 4 Monitor
1: M [Link](T asksInP rogress)
2: for t ∈ TasksInProgress do
3: while (t != finished) and (t = OK) do
4: [Link](t)
5: end while
6: if t =
Ó ok then
7: [Link](t,TasksToDo)
8: end if
9: end for
Algorithm 5 Checker
1: [Link](T asksT oCheck)
2: for t ∈ TasksToCheck do
3: if [Link](t) = OK then
4: [Link](t,FinishedTasks)
5: else
6: [Link](t,TasksToDo)
7: end if
8: end for
qu’il ne soit autorisé à s’exécuter. Une des passe compile le script en un module noyau
qui est chargé immédiatement. Dans le cas où le script a déjà été exécuté auparavant
et qu’aucun changement en ce qui concerne les composants n’a eu lieu (par exemple, en
ce qui concerne la version du compilateur, la version du noyau, le chemin bibliothèque,
contenu du script), SystemTap ne compile pas le script à nouveau, mais utilise les
fichiers *.c et *.ko du cache de SystemTap ( /.systemtap). Le module est déchargé
lorsque le script termine.
Exemple de script SystemTap : nous introduisons ici une partie du script que nous
avons développé ce qui nous permet d’introduire les principales notions de SystemTap.
L’utilisation de SystemTap se réalise par l’intermédiaire de scripts (fichiers texte
d’extension .stp par convention). Les scripts explicitent quels sont les types d’informa-
tions à recueillir, et ce qu’il faut faire une fois que l’information est recueillie. Les scripts
sont écrits dans le langage de script de SystemTap qui est similaire à AWK et C. Pour
la définition de la langue, voir http ://[Link]/systemtap/langref/.
L’idée essentielle derrière un script de SystemTap est de nommer des événements,
et de leur accoler des gestionnaires d’événements (des handlers dans la terminologies
Unix). Lorsque SystemTap exécute le script, il surveille certains événements. Lorsqu’un
événement se produit, le noyau Linux active le gestionnaire en tant que sous-routine,
puis recommence l’attente d’un événement. Ainsi, les événements servent de déclen-
cheurs pour les gestionnaires à exécuter. Les gestionnaires peuvent enregistrer des don-
nées spécifiées (pour cumuler le nombre de fois où apparaît un certain événement par
exemple) et imprimer à l’écran d’une certaine manière un résultat.
Le langage de SystemTap utilise seulement quelques types de données (entiers,
chaînes de caractères et tableaux associatifs de ces précédent types), et des structures
de contrôle (blocs, conditionnelles, boucles, fonctions). Les types ne sont pas déclarés
et ils sont vérifiés automatiquement à l’exécution.
Les Tapsets sont des bibliothèques de sondes et de fonctions pré-écrites qui peuvent
être utilisées dans les scripts SystemTap. Lorsqu’un utilisateur exécute un script de
SystemTap, SystemTap vérifie les événements et les gestionnaires de la sonde du script
à la bibliothèque de Tapsets. SystemTap charge ensuite les sondes et les fonctions
correspondantes avant de traduire le script en fichiers .c et .ko.
Cependant, contrairement aux scripts SystemTap, les Tapsets ne sont pas destinés
à l’exécution directe, ils constituent la bibliothèque à partir de laquelle d’autres scripts
peuvent être définis. Ainsi, la bibliothèque de Tapsets est une couche d’abstraction
conçue pour rendre plus facile, pour les utilisateurs, la tâche de définir des événements
et des fonctions. Les Tapsets fournissent des alias utiles pour les fonctions que les
utilisateurs peuvent vouloir spécifier comme événement. L’alias est la plupart du temps
plus facile à se rappeler que les noms des fonctions spécifiques du noyau qui peuvent
d’ailleurs varier entre versions du noyau.
110 CHAPITRE 5. RedisDG : modélisation, prototypage et validation expérimentale
1 #! /usr/bin/env stap
2 global reads, writes, total_io, total_io_w, total_io_r
3 probe [Link]
4 {
5 if (pid() == $1)
6 {
7 reads[pid()] += bytes_read
8 }
9 }
10 probe [Link]
11 {
12 if(pid() == $1)
13 {
14 writes[pid()] += bytes_written
15 }
16 }
17 /* Main probe and main program
18 *
19 * print IO processes every 5 seconds for pid() == $1
20 */
21 probe timer.s(5) {
22 {
23 w=writes[$1]
24 r=reads[$1]
25 total_io[$1] += w
26 total_io[$1] += r
27 total_io_w[$1] += w
28 total_io_r[$1] += r
29 delete reads
30 delete writes
31 }
32 probe begin {
33 print ("Collecting data... Type Ctrl-C to exit and display results\n")
34 }
35 probe end {
36 printf ("%16ds\t%10s\t%10s\t%10s\n", "Process", "KB-Read",
37 "KB-Written", "i/o-Total")
38 printf("%16d\t%10d\t%10d\t%10d\n", $1, total_io_r[$1]/1024,
39 total_io_w[\$1]/1024, total_io[$1]/1024)
40 delete reads
41 delete writes
42 delete total_io
43 delete total_io_w
44 delete total_io_r
45 }
Ce script permet de surveiller les activités des entrées/sorties sur le disque toutes les
5 secondes. probe begin est la fonction exécutée au début, probe end celle exécutée
5.4. Outils pour le monitoring d’activité 111
à la fin. $return est une variable locale qui stocke le nombre réel d’octets lus et écrits
par chaque processus à partir du système de fichiers. $return ne peut être utilisé que
dans les Probes de retour (par exemple, [Link] et [Link]). La fonction
pid() permet de rapporter l’identifiant du processus à surveiller. Il existe plusieurs
autres fonctions, mais les plus utilisées sont : uid() quel utilisateur fait tourner ce
code ? execname() quel est le nom de ce processus ? probefunc() dans quelle fonction
sommes-nous ?
écrire sur le disque par seconde, kB_ccwrs : le nombre de kilobytes sur le disque dont
l’écriture a été annulé par le processus (exemple : les fichiers cache).
L’option -T CHILD permet de préciser que les statistiques doivent être rapportées
sur le processus sélectionné et tous ses fils.
L’option -r 4 permet d’afficher le rapport des statistiques toutes les 4 secondes
Depuis la version 10.1.4 et un travail de Christophe Cérin, pidstat possède un mode
qui lui permet d’écrire une synthèse des activités du processus inspecté à la réception
d’un signal Unix. Cela nous est particulièrement utile dans notre cas comme nous le
verrons dans le prochain paragraphe.
1. class PidStatClass:
2. def __init__(self, pid):
3. args=["/usr/local/bin/pidstat","-p",pid,"-h","-u","-d","-r","4"]
4. p1 = [Link](args,stdout=[Link],shell=False)
5. preprocessed1, _ = [Link]()
6. [Link]()
7. [Link]()
8. [Link](preprocessed1)
9. [Link]()
Une autre technique de monitoring consiste à utiliser les fichiers « log » via le mo-
dule Python logging. Ce module définit des fonctions et des classes qui mettent en
œuvre un système flexible de journalisation des événements pour les applications et les
bibliothèques.
L’avantage principal d’avoir une API de journalisation fournie par un module de
bibliothèque standard, c’est que tous les modules Python peuvent participer à la jour-
nalisation, de sorte que votre journal d’application peut inclure vos propres messages
intégrés avec des messages de modules tiers. Le module logging fournit un grand
nombre de fonctionnalités et de flexibilité permettant de sauvegarder des messages de
type Debug, Info, Warning, Error ou Critical. Pour notre application, on souhaite avoir
à chaque message, une indication de l’heure, et éventuellement de la date, afin de pou-
voir par la suite utiliser ces fichiers log pour le traçage des courbes précisant les dates
de début et de fin de l’exécution d’une tâche. Il est possible de le faire, une fois pour
toute, de la façon suivante :
5.5. Implémentation et émulation 113
1. #!/usr/bin/python
2.
3. import logging
4. import time
5.
6. [Link](
7. filename=’[Link]’,
8. level=[Link],
9. format=’%(asctime)s %(levelname)s - %(message)s’,
10. datefmt=’%d/%m/%Y %H:%M:%S’,
11. )
1 8
Dictionnaire={
Tache1 : {prédécesseur1,..,prédécesseurN} ;
Tache2 : {prédécesseur1,..,prédécesseurN} ;
5.5. Implémentation et émulation 115
Tache3 : {prédécesseur1,..,prédécesseurN} ;
...}
Le deuxième thread est en permanence à l’écoute sur le canal Emergency afin de détecter
les signaux d’urgence. Si le message STOP est annoncé sur le canal alors le Broker est
aussitôt notifié, et dans ce cas il tue tous les processus qui lui sont associés.
Le Coordinator est géré par trois threads. Le premier est utilisé pour rester à l’écoute
d’un canal appelé VolunteerWorkers qui permet d’être notifié par les Workers volon-
taires et disponibles. Le Coordinator sélectionne les éventuels Workers et publie la
sélection sur le canal SelectVolunteers. Cette fonctionnalité imite le protocole pour la
sélection des Workers que l’on trouve dans n’importe quel système de grille de PCs.
Le second thread est utilisé pour rester à l’écoute du canal WaitingTasks, récupérer
le dictionnaire des dépendances, l’analyser et publier les tâches indépendantes sur le
canal TasksToDo. Il permet aussi de traiter les tâches terminées puisque le Coordinator
est au préalable à l’écoute du canal FinishedTasks. À l’arrivée d’une nouvelle tâche sur
ce canal le Coordinator met à jour le dictionnaire de tâches en attente en supprimant
la tâche annoncée comme terminée de la liste des prédécesseurs des tâches en attente,
dans le but de déceler de nouvelles tâches indépendantes.
Une fois que toutes les tâches sont terminées, le dictionnaire devient vide et le
Coordinator publie l’événement STOP sur le canal Emergency afin d’annoncer la fin de
l’application. Le troisième thread est en permanence à l’écoute sur le canal Emergency
afin de détecter les signaux d’urgence.
En parallèle, des Workers sont lancés. Un Worker est également géré par trois
threads. Le premier publie l’identité du Worker sur le canal VolunteerWorkers afin
d’annoncer son volontariat quand il est libre. Le deuxième est à l’écoute au préalable
sur le canal TasksToDo afin d’être notifié par de nouvelles tâches à exécuter. Il est
aussi à l’écoute sur le canal SelectVolunteers dans le but de détecter si le Worker a
été sélectionné pour démarrer une exécution. Dans l’affirmative, il lance l’exécution du
code respectif qui est téléchargé à partir du serveur de code Redis. Le serveur Redis se
trouve quelque part dans le Web, il n’est pas localisé sur la même machine utilisée pour
l’émulation. Le troisième thread est réservé à l’écoute sur le canal Emergency afin de
détecter les signaux d’urgence.
Une fois l’exécution de la tâche commencée, l’événement est publié par le Worker
dans le canal TasksInProgress. L’identifiant de la tâche, l’identifiant du processus et
l’adresse IP du Worker sont publiés sur le canal TasksInProgress afin de permettre la
surveillance du déroulement de l’exécution de la tâche. Lorsque l’exécution est terminée,
le Worker publie la tâche correspondante sur le canal TasksToCheck afin de lancer la
procédure de certification de résultat pour cette tâche.
Pour le Monitor, nous créons un processus de demande de surveillance et un pro-
cessus d’arrêt de la surveillance. Le premier est à l’écoute sur le canal TasksInProgress.
116 CHAPITRE 5. RedisDG : modélisation, prototypage et validation expérimentale
Quand un événement est publié dans ce canal, le Monitor extrait l’adresse IP du Worker
et vérifie si le nœud est en vie par un ping toutes les 2 secondes pendant toute la durée
de l’exécution de la tâche. Dans le cas où un Worker ne répond pas à une requête ping,
le Moniteur publie la tâche correspondante dans le canal TasksToDo pour qu’elle soit
attribuée à un autre Worker. Le second processus décide quand est-ce qu’il doit arrêter
la surveillance. Il est à l’écoute sur le canal TasksToCheck afin d’être averti par les
tâches qui sont déjà terminées, et tuer le processus de surveillance correspondant. Un
autre thread est réservé à l’écoute sur le canal Emergency afin de détecter les signaux
d’urgence.
D’autre part, le comportement et les résultats produits par les volontaires doivent
être examinés pour détecter des actions inappropriées et/ou des résultats erronés.
D’ailleurs, des résultats incorrects peuvent être dues à un dysfonctionnement maté-
riel ou logiciel, une mauvaise intention des utilisateurs, ou une combinaison de tous ces
facteurs. Ainsi, dans un tel environnement hostile, il faut assurer la fiabilité des calculs
effectués.
Le Checker a pour rôle de vérifier/certifier les résultats. En fait, plusieurs techniques
de certification des résultats existent dans la littérature. Ces techniques ont été classées
dans le livre [CF12] au niveau du chapitre 10 intitulé Security an Result Certification.
Dans RedisDG, nous avons choisi d’implémenter la technique par duplication qui s’ins-
pire de la méthode de « vote à la majorité ». Le principe consiste à dupliquer une tâche
un certain nombre de fois afin de l’exécuter sur des Workers différents et parvenir à
comparer les résultats retournés.
Dans RedisDG, nous procédons à la duplication du graphe de tâches k>1 fois.
Comme le montre la figure 5.4, le graphe de tâches présenté précédemment, présentant
le job MapReduce, est dupliqué deux fois. Le Checker, quand il reçoit une tâche, s’at-
tend à recevoir les duplicatas de cette tâche. Ainsi, Il construit un dictionnaire pour
chaque ensemble de tâches similaires. Nous utilisons la bibliothèque hashlib pour cal-
culer la valeur MD5 du fichier résultat d’une tâche qui est renvoyé par un Worker. Ainsi,
le dictionnaire des duplicatas est construit comme suit :
Dictionnaire={
FichierResultatTache1 : MD5 ;
FichierResultatTache1’ : MD5 ;
FichierResultatTache1" : MD5 ;
...}
Une fois l’ensemble des duplicatas d’une même tâche reçu par le Checker, ce dernier
peut commencer la comparaison des résultats en procédant à la comparaison des MD5.
Si le résultat retourné par tous les Workers est le même, alors on suppose que le résultat
est correct et la tâche sera publiée sur le canal FinishedTasks. Sinon, le résultat est
5.6. Intégration de RedisDG dans le Cloud SlapOS 117
2.0
2.1
2.2 6.0
6.1
3.0
6.2
3.1
8.0
3.2
1.0 8.1
4.0
8.2
4.1
4.2 7.0
7.1
5.0
7.2
5.1
5.2
Un système de type intergiciel de grille de calcul est basé sur le volontariat. Il permet
de lancer des applications scientifiques composées de plusieurs tâches et exécutées en
parallèle sur différentes machines. Ces systèmes sont basés sur une architecture client
serveur ; les tâches sont gérées par le serveur qui va les répartir sur un ensemble de
clients volontaires, Workers, ayant souhaités participer au projet. Chaque client va
ensuite remonter les résultats au serveur une fois sa tâche terminée.
La particularité de ces systèmes est d’être dynamique c’est-à-dire qu’ils peuvent
modifier leurs comportements au cours de leur fonctionnement. Ces modifications sont
le plus souvent liées à la soumission d’une nouvelle tâche, ou l’arrêt d’une autre. La sou-
mission d’une tâche nécessite l’exécution d’une succession de commandes particulières
et le téléchargement d’un ou de plusieurs fichiers. Notre application ne fournit pas un
portail Web permettant de faire l’administration à distance. L’idéal serait de fournir
un terminal avec l’instance, accessible par exemple avec une connexion SSH, mais cela
reste un cas moins intéressant car nous ne saurons pas, dans ce cas, bien limiter les accès
de l’utilisateur dans la partition. Dans un environnement comme SlapOS, on est donc
contraint d’automatiser toutes les actions qui pourront être réalisées pour l’utilisateur
(soumission du travail, arrêt de la tâche, etc.). Ainsi on devrait être en mesure de créer
une instance RedisDG avec des tâches initiales puis, contrôler et modifier l’instance au
cours de son fonctionnement pour que d’autres placements de tâches puissent se faire
sur les volontaires, ceci via SlapOS.
Le modèle de déploiement des applications dans SlapOS est basée sur une architec-
ture Components, Stack, Software comme le montre la figure 5.5 et comme cela a
était présenté dans la figure 3.6 du chapitre 3. Les Components sont tous les compo-
sants et toutes les dépendances dont on peut avoir besoin pour compiler l’application.
La Stack permet de faire un module générique pour le déploiement d’un type d’instance
précis. Dans le fichier ([Link]), on indiquera alors comment seront exploités les
composants et la stack et les recettes pour le déploiement de application.
Le fichier [Link] est le profil principal permettant de compiler, télécharger
les fichiers nécessaires et installer l’application avec toutes les dépendances, il crée le
Software Release. Le profil de l’instance appelée [Link] décrit, à
l’aide des recettes, le déploiement d’une instance de l’application dans une partition
SlapOS. C’est le fichier le plus important car, il permet de définir le type d’instance de-
mandée (coordinateur ou worker), déployer le serveur Redis lorsque cela est nécessaire,
et aussi démarrer le démon RedisDG.
Le déploiement de RedisDG dans SlapOS est réalisé grâce à une nouvelle recette
appelée [Link]:[Link] (voir figure 5.6). Elle est écrite en python.
À la fin du déploiement, des scripts exécutables sont générés permettant ainsi de
démarrer le démon RedisDG avec des paramètres définis par l’utilisateur. Chaque script
appelé wrapper est exécuté automatiquement par SlapOS et il est sous le contrôle d’un
démon spécifique appelé Watchdog. Le rôle du Watchdog est de garantir le fonctionne-
5.6. Intégration de RedisDG dans le Cloud SlapOS 119
{"config":PATH_OR_URL,
"files":{FILE_NAME:PATH_OR_URL,
FILE_NAME:PATH_OR_URL, ...}
}
Dans cet objet, config est le chemin ou l’URL du fichier XML utilisé pour décrire
notre application. files désigne la liste des fichiers d’entrée nécessaires à l’exécution
de l’application et décrits dans le fichier XML. Ainsi, du point de vue de l’utilisateur,
déployer une instance RedisDG nécessite deux paramètres : un pour le type de l’instance
demandée et l’autre pour la description du travail comme un objet JSON.
Pour conclure, nous insistons ici que tout le travail présenté ci-dessous est de la
responsabilité de l’utilisateur. Ce travail d’intégration est réalisé par l’ingénieur inté-
grateur, une fois pour toute. Ainsi l’utilisateur n’a qu’à utiliser l’intergiciel RedisDG
fournit comme étant un service dans le Cloud SlapOS.
120 CHAPITRE 5. RedisDG : modélisation, prototypage et validation expérimentale
1. [redis-dg]
2. recipe = [Link]:[Link]
3. python-bin = ${buildout:executable}
4. #Please provide here the main script of redis-dg
5. redisdg-script = ${redis-dg:location}/[Link]
6. wrapper = $${basedirectory:services}/redis_DesktopGrid
7. root-dir = $${buildout:directory}
8. work-directory = $${rootdirectory:srv}
9. tmp-dir = $${rootdirectory:tmp}
10. log-file = $${basedirectory:log}/[Link]
11. pid-file = $${basedirectory:run}/[Link]
12. #The list of files used in redisDG, one per line
13. job-desc = $${slap-parameter:job}
14. deamon = $${slap-parameter:deamon}
15. redis = $${redis:ipv6}
17.
18. eggs-directory = ${buildout:eggs-directory}
Bien que le Cloud SlapOS facilite le déploiement à large échelle, il peut tout de
même exister des risques d’échec du déploiement ou de perte de contrôle dûe à l’au-
tomatisation. Pour minimiser les risques, SlapOS propose des mécanismes permettant
de contrôler que le service a été correctement déployé. Un script appelé promesse sera
déposé dans un emplacement spécifique de la partition. Le script est écrit par l’intégra-
teur et selon une convention bien définit et il a pour rôle de tester que tous les services
sont bien fonctionnels (par exemple, une vérification qu’une URL est bien accessible).
Il sera ensuite exécuté par SlapOS pour vérifier que le déploiement s’est bien passé. Si
ce n’est pas le cas, l’instance sera redéployée à nouveau, dans le but de redémarrer ou
de redéployer les services qui n’ont par réussi leur précédente tentative de déploiement.
Il restera donc à être capable de consulter les fichiers log d’une application déployée
pour effectuer une vérification du bon fonctionnement ou pour des besoins d’administra-
tion. Bien que ceux-ci soient générées lors du fonctionnement des services, un utilisateur
externe ne peut consulter les log sans accéder directement à la partition. On a donc une
difficulté de suivi pour les applications qui ne sont pas utilisables en ligne de commande
comme dans le cas d’un site Web par exemple (pour résoudre cela, on pourra déployer
avec notre application une console Web tel que Shelinabox disponible dans le Cloud
SlapOS, permettant d’avoir un terminal depuis son navigateur web).
5.7. Conclusion 121
5.7 Conclusion
Alors que la plupart des approches de la littérature [CF12] ont eu besoin par le
passé de construire un certain nombre de couches avant la couche propre à l’intergiciel
de grille de PCs, notre système est conçu et développé en une seule couche. Ainsi, nous
repoussons les pertes en efficacité, vitesse et facilité de mise en œuvre. Notons aussi que
nous pouvons avoir plusieurs serveurs Redis ce qui présente un avantage au niveau des
propriétés d’équilibrage de charge.
Nous proposons un système avancé de grille de calcul, capable de fonctionner sur les
smartphones et les tablettes en plus des machines traditionnelles. En fait, d’après notre
expérience dans le domaine, l’intégration des intergiciels de grille de calcul existants
sur les petits appareils peut être extrêmement difficile, parce que ce genre de système
n’était pas conçu à la base pour intégrer ce type d’appareils présentant une configuration
assez spécifique. D’où le besoin de repenser les techniques de coordination, d’interaction,
d’exécution et de stockage de données dans les intergiciels de grille de calcul en termes de
nouvelles technologies qui soient beaucoup plus cohérentes avec les nouveaux appareils
mobiles.
Nous tenons à préciser que notre travail se concentre plutôt sur la coordination des
différents composants d’une grille de calcul, et non pas sur l’algorithme d’ordonnan-
cement des tâches. Par conséquent, nous pouvons utiliser n’importe quel algorithme
d’ordonnancement comme PAPS (Premier Arrivé Premier Servi) par exemple.
Il est important d’insister sur le fait que le protocole est entièrement basé sur
l’échange de messages et que le développement de RedisDG a été guidé par nos dif-
férents travaux de modélisation. Notre système sert à la validation des idées et des
choix effectués lors de la partie de la conception et de la modélisation.
Enfin, nous adoptons un point de vue centré sur l’utilisateur en considérant que la
technologie des grilles de calcul devrait être aussi simple que possible dans son utilisa-
tion. D’où le travail de l’intégration de RedisDG dans le cloud SlapOS afin de pouvoir
offrir les fonctionnalités d’une grille de PCs comme service Web.
Ce travail a fait l’objet de quelques publications internationales dans les conférences
SAC (28th ACM Symposium on Applied Computing, 2013 ) [ADCJ13] et GPC (Inter-
national Conference on Grid and Pervasive Computing, 2013 ) [ACJ13].
122 CHAPITRE 5. RedisDG : modélisation, prototypage et validation expérimentale
123
Chapitre 6
Noeud Données
se soit avéré être une ressource très utile pour la communauté, les systèmes de workflow
doivent être destinés à un usage général et ne doivent pas être conçus et évalués sur la
base d’un workflow unique.
précédent et la sortie produite est envoyée en entrée au niveau suivant dans le pipeline.
Des nœuds de distribution de données servent à deux fins : ils peuvent soit produire
des données de sortie qui sont consommées par plusieurs nœuds ou ils peuvent fonction-
ner sur de grands ensembles de données et les partitionner en petits sous-ensembles à
traiter par d’autres nœuds dans le workflow. La distribution des données appelée aussi
le partitionnement de données, est un concept assez fréquent dans les workflows. Si le
partitionnement des données implique en plus le calcul, les nœuds peuvent consommer
beaucoup de temps sur la ressource de calcul. Cependant, le partitionnement entraîne
une augmentation du parallélisme dans les niveaux ultérieures du workflow, et c’est en
effet la raison principale du partitionnement des données.
Les nœuds d’agrégation de données regroupent et traitent les sorties de plusieurs
nœuds et génèrent un produit de données combinées. Comme les nœuds d’agrégation
de données fonctionnent sur plusieurs entrées de données individuelles, ils peuvent po-
tentiellement consommer beaucoup de temps sur les ressources de calcul. En outre, ces
nœuds peuvent représenter une réduction du parallélisme du workflow. Dans certains
cas, les données agrégées à partir d’une étape précédente sont redistribuées à plusieurs
nœuds dans l’étape suivante. Même si le nœud de redistribution de données représente
un goulot d’étranglement potentiel, le parallélisme est de nouveau augmenté dans les
étapes ultérieures. Ces nœuds de redistribution des données existent dans plusieurs
workflows scientifiques et représentent un point de synchronisation pour le traitement
de données.
Les défis en terme de planification de workflow peuvent être divisés en deux par-
ties : la faisabilité et la performance. Dans le premier cas, nous devons trouver une
instance de workflow qui soit correctement exécutable, qui identifie les ressources et
les données nécessaires et qui gère les données obtenues en les mettant en scène sur
les emplacements de stockage appropriés. De toute évidence, des défauts dans l’envi-
ronnement d’exécution peuvent encore se produire, mais le workflow exécutable généré
par le processus de planification doit être correct, afin de minimiser les erreurs lors de
l’exécution [BCD+ 08a].
Les planificateurs de workflow peuvent également optimiser le workflow du point de
vue de la performance par ordonnancement des tâches individuelles et l’ensemble du
workflow sur les ressources d’une manière qui optimise les performances de workflow
global. On peut aussi augmenter la performance de l’ensemble du workflow en ordon-
nançant soigneusement les parties critiques du workflow. Dans les workflows traitant
des données intensives, il est important d’ordonnancer le calcul proche des données.
CHAPITRE 6. Validations expérimentales avec Grid’5000, SlapOS, RedisDG et
126 Pegasus
Comme cela est présenté à la figure 6.2, les actions précédentes sont réalisées par
les cinq sous-systèmes de Pegasus suivants :
- Le Mapper : il génère un workflow exécutable basé sur un workflow abstrait fourni
par l’utilisateur ou le système de composition des workflows. Il cherche les logiciels, les
données et ressources informatiques appropriées nécessaires à l’exécution du workflow.
Le Mapper peut aussi restructurer le workflow pour optimiser les performances et ap-
porte des transformations au gestionnaire de données.
- Local Execution Engine : il soumet les tâches définies par le workflow dans
l’ordre de leurs dépendances. Il gère les tâches par le suivi de leurs états et détermine le
démarrage d’exécution de chaque tâches. Il soumet ensuite les tâches à la file d’attente
de l’ordonnanceur local.
- Job Scheduler : il gère les tâches du workflow, supervise leurs exécutions sur les
ressources locales et distantes.
- Remote Execution Engine : il gère l’exécution d’une ou plusieurs tâches ; il peut
être structuré comme un sous-workflow sur un ou plusieurs nœuds de calcul distant.
- Monitoring component : c’est un démon de surveillance de l’exécution lancé
lorsque le workflow commence l’exécution. Il surveille le workflow en cours d’exécution,
analyse les historiques des tâches et les sauvegarde dans une base de données. Les bases
de données contiennent à la fois l’information sur les performances et sur la provenance
des données. Il envoie également des notifications à l’utilisateur lui indiquant l’échec, le
succès ou l’achèvement d’une tâche.
CHAPITRE 6. Validations expérimentales avec Grid’5000, SlapOS, RedisDG et
128 Pegasus
l’image.
Les différentes images sont traitées selon un algorithme utilisant la méthode des
moindres carrés par tâche mConcatFit. La tâche mConcatFit correspond à la description
d’une tâche d’agrégation de données, tout en étant une tâche de calcul intensif. Ensuite,
une tâche mBgModel doit déterminer une correction qui est à appliquer à chaque image
afin d’obtenir une bonne correspondance globale. Les tâches mBackground appliquent
la correction en arrière plan à chaque image à part. Les tâches mConcatFit et mBgModel
sont respectivement des tâches d’agrégation et de partition de données. Cependant, elles
peuvent être considérés comme un point de redistribution de données. Dans ce cas, il
n’y aura pas beaucoup de données partitionnées. Ainsi, la même correction en arrière
plan est appliquée à toutes les images.
La tâche mImgTbl agrège les données à partir de toutes les photos et créé une
table qui peut être utilisée par d’autres tâches dans le workflow. Ainsi, elle représente
une simple étape d’agrégation de données. La tâche mAdd ajoute toutes les images re-
projetées afin de générer la mosaïque finale en format FITS ainsi qu’une image de zone
qui peut être utilisée dans un calcul ultérieur. La tâche mAdd est la plus intensive en
terme de calcul dans le workflow. La taille de l’image FITS est réduite par la tâche
mShrink en calculant des moyennes de blocks de pixels. L’image réduite est par suite
convertie en format JPEG par la tâche mJPEG.
tâche les données d’entrée nécessaires, les données de sortie attendues, et les arguments
avec lesquels la tâche doit être invoquée. L’ensemble des données d’entrée/sortie et les
exécutables sont désignés par des identificateurs logiques.
La figure 6.4 présente une description Pegasus abstraite d’un workflow MONTAGE à
164 nœuds. On distingue bien 3 parties. La première partie concerne la spécification des
fichiers nécessaires à l’exécution de l’application. Il existe 3 types de fichiers : les fichiers
input, ce sont les fichiers nécessaires au démarrage de l’exécution de l’application, les
fichiers inout qui présentent les fichiers intermédiaires et enfin les fichiers output et qui
présentent le résultat final de l’exécution de l’application. La deuxième partie concerne
la description des jobs. Un job est une tâche à exécuter et il présente un nœud dans
le workflow. Chaque job est spécifié par son identifiant unique, le code à exécuter, les
arguments à faire passer pour ce code, la liste des fichiers d’entrée et celle des fichiers
de sortie. La troisième partie, quand à elle, s’intéresse à spécifier les parents de chaque
nœud fils afin d’établir les liens de dépendances.
Cette description, bien qu’ergonomique, n’est pas adaptée à notre système RedisDG.
C’est pour cela que nous avons implémenté une API Python permettant de générer une
description RedisDG à partir de la description Pegasus.
Comme présenté dans la figure 6.5 et comme détaillé dans le chapitre précédent,
RedisDG nécessite une description abstraite de l’application dans laquelle on spécifie les
nœuds, les arcs et les racines. Un nœud désigne une tâche, un arc désigne la dépendance
entre deux nœuds, et les racines désigne les tâches indépendantes qui seront lancées en
premier. Une tâche est spécifiée par son identifiant, le code qu’elle doit exécuter ainsi
que les arguments à passer, ses fichiers d’entrée ainsi que ceux de sortie et aussi les
caractéristiques de la machine sur laquelle on souhaite exécuter cette tâche.
Dans le tableau 6.1, nous présentons une instance de l’application MONTAGE pa-
ramétrée avec un degré de 2.0 que nous avons exécutée avec RedisDG. Cet exemple
présente un workflow à 1446 tâches et 3722 liens de dépendances. L’exécution de l’ap-
plication nécessite en tout 9423 fichiers d’entrée (y compris les fichiers intermédiaires)
et génère 2889 fichiers (y compris les fichiers intermédiaires).
L’exécution de MONTAGE sur RedisDG ne s’est pas déroulée sans problèmes. En
fait, lors de la récupération des fichiers sources (input) sur le site de la NASA, on s’est
aperçu que les noms de certains fichiers ne correspondent pas à la description XML.
Ainsi, il était impossible de lancer l’exécution.
Nous avons également été obligé de vérifier la correspondance entre la description
XML et les sources, adapter parfois la description XML, parfois les fichiers sources et
s’assurer que les noms de fichiers générés dans le XML étaient les fichiers attendus
par l’application. Cette tâche s’est avérée très laborieuse surtout quand il s’est agit
d’applications à plus de 1000 tâches (plus de 20000 lignes de code à parcourir et à
vérifier).
CHAPITRE 6. Validations expérimentales avec Grid’5000, SlapOS, RedisDG et
132 Pegasus
<? xml version = " 1.0 " encoding = " UTF -8 " ? >
< adag xmlns = " http: // pegasus . isi . edu / schema / DAX " >
<! - - Part 1 : Files Used -->
< filename file = " 2 mass - atlas . fits " link = " input " / >
...
< filename file = " p2mass - atlas . fits " link = " inout " / >
...
< filename file = " shrunken . jpg " link = " output " / >
<! - - Part 2 : Definition of Jobs -->
< job id = " ID000001 " name = " mProjectPP " version = " 3.0 " level = " 9 "
dv - name = " mProject1 " dv - version = " 1.0 " >
< argument >
-X
-x 1.03362
< filename file = " 2 mass - atlas . fits " / >
< filename file = " p2mass - atlas . fits " / >
< filename file = " big_region . hdr " / >
</ argument >=
< uses file = " 2 mass - atlas . fits " link = " input " transfer = " true " / >
< uses file = " p2mass - atlas . fits " link = " output " register = " false "
transfer = " false " / >
< uses file = " p2mass - atlas_area . fits " link = " output " register = " false "
transfer = " false " / >
< uses file = " big_region . hdr " link = " input " transfer = " true " / >
</ job >
....
< job id = " ID000164 " name = " mJPEG " version = " 3.0 " level = " 1 "
dv - name = " mJPEG1 " dv - version = " 1.0 " >
< argument >
- ct 1
- gray < filename file = " shrunken . fits " / >
min max gaussianlog
- out < filename file = " shrunken . jpg " / >
</ argument >
< uses file = " shrunken . fits " link = " input " transfer = " true " / >
< uses file = " shrunken . jpg " link = " output " register = " true "
transfer = " true " / >
< uses file = " dag . xml " link = " input " transfer = " true " / >
< uses file = " dag . xml " link = " output " register = " false "
transfer = " true " / >
< uses file = " images . tbl " link = " input " transfer = " true " / >
< uses file = " images . tbl " link = " output " register = " false "
transfer = " true " / >
</ job >
<! - - Part 3 : Control - Flow Dependencies -->
< child ref = " ID000037 " >
< parent ref = " ID000001 " / >
< parent ref = " ID000008 " / >
</ child >
...
</ adag >
Figure 6.4 – Extrait de la description Pegasus d’un workflow MONTAGE à 164 nœuds
6.4. Mise au point et exécution de MONTAGE avec RedisDG 133
Figure 6.5 – Extrait de la description RedisDG d’un workflow MONTAGE à 164 nœuds
CHAPITRE 6. Validations expérimentales avec Grid’5000, SlapOS, RedisDG et
134 Pegasus
Table 6.1 – Caractéristiques des tâches d’une instance de MONTAGE à 1446 Tâches
Un autre problème au niveau des arguments est apparu. Dans la description Pegasus,
pour certaines tâches, les arguments spécifiés se sont avérés très génériques, ce qui ne
permettait pas d’exécuter l’application. Il a été nécessaire de fournir, dans la description
RedisDG, des arguments plus spécifiques à l’application afin de pouvoir l’exécuter. Tout
ce travail de calibrage a été réalisé en collaboration avec l’équipe responsable du projet
MONTAGE 1 .
La figure 6.6 présente des images résultats de l’exécution de MONTAGE (instance
à 1446 tâches) sur RedisDG.
le niveau 2 de notre workflow. Nous constatons que la tâche 302 s’exécute en parallèle
avec la tâche 12 et de même pour les tâches 303 et 32. Cela correspond au début de
notre courbe.
Nous observons aussi le comportement de l’application au niveau des tâches consti-
tuant un goulot d’étranglement. Cela correspond aux tâches mConcatFit et mBgModel
de notre workflow.
Dans la figure 6.9 nous avons zoomé sur la dernière partie de la courbe de la fi-
gure 6.8. Cela correspond aux niveaux de 5 à 9 de notre workflow. À ce niveau nous
avons 301 tâches qui se lancent en parallèle.
6.5. Tests à large échelle sur Grid’5000 137
sition. En fait, comme précisé dans la section précédente, sur les 170 workers volontaires
pour participer à l’exécution de l’application, notre coordinateur a sélectionné les plus
rapides à lui répondre. Au final, il n’y a que 30 workers qui ont réellement participé à
l’exécution, soit 18%. Le principe même des Grilles de PCs est d’avoir une puissance de
calcul à disposition, alors que, d’après ces résultats, cette puissance de calcul est bien
là mais elle est clairement sous-exploitée.
Ainsi, ces résultats ont remis en question notre algorithme d’ordonnancement. Nous
avons cherché à implémenter une solution qui soit plus efficace au niveau de l’utilisation
des ressources. Ainsi, nous avons adopté un algorithme de « tourniquet » permettant
de faire le tour de tous les workers, les uns après les autres pour leur attribuer les
tâches. Dans ce cas, les workers continuent à publier leurs volontariats, le coordinateur
est notifié par toutes les annonces de volontariat, (il y a des notifications qui arrivent
plus rapidement que d’autres car cela dépend de la latence avec le coordinateur) mais
le coordinateur au lieu de sélectionner le premier arrivé, sélectionne à chaque fois un
worker qui n’a pas encore participé, lorsque tous les workers ont participé au moins une
fois, on recommence un niveau cycle jusqu’à épuisement des tâches à attribuer.
Comme premiers tests, nous avons relancé notre application MONTAGE (le work-
flow à 1446 nœuds) sur 200 machines réelles de la plateforme Grid’5000. La figure 6.10
résume le comportement de l’exécution et nous pouvons le comparer avec la figure 6.8.
Nous observons que l’allure de la courbe a complètement changé. Ceci est dû au de-
gré de parallélisme plus important. D’après les statistiques réalisées sur les fichiers Log
générés par RedisDG, nous constatons que la totalité des Workers, c-à-d les 200, ont
participé à l’exécution de l’application (mais pas forcément de façon égale). Comme
perspective à court terme, nous envisageons de visualiser le taux de participation de
chaque worker. Nous remarquons aussi que le temps total de l’exécution est passé de
16 minutes à 4 minutes, ce qui est flatteur pour notre politique d’ordonnancement.
Nous avons relancé la même application mais sur 340 machines. Nous constatons sur
la figure 6.11 que le degré de parallélisme s’est nettement amélioré. Les 340 workers ont
tous participé à l’exécution. Mais nous remarquons que le temps total de l’exécution
est supérieur à celui avec 200 machines. Cela est probablement dû à l’utilisation d’un
nœud peu performant pour les quatre dernières tâches séquentielles. D’un point de vue
général, si on veut maîtriser le temps d’exécution, il conviendrait de sélectionner les
workers selon des critères de performance et selon la tâche à réaliser. Nous reviendrons
sur ces aspects dans la conclusion de cette thèse.
Nous avons aussi observé des pertes de messages en réponse aux sollicitations du
coordinateur. Une situation de famine peut arriver dans le cas où il ne reste plus qu’un
seul worker pour terminer un cycle de l’algorithme du tourniquet et que les réponses de
participation de ce worker se perdent. Techniquement l’algorithme d’ordonnancement
devient complexe.
CHAPITRE 6. Validations expérimentales avec Grid’5000, SlapOS, RedisDG et
140 Pegasus
Figure 6.10 – Temps d’exécution du Workflow (1446 tâches) sur 200 workers
Figure 6.11 – Temps d’exécution du Workflow (1446 tâches) sur 340 workers
6.6. Tests à large échelle sur Grid’5000 en y déployant le Cloud SlapOS 141
ressources et des contraintes de SLA pour qu’un Cloud rivalise avec un cluster.
Le second objectif de cette expérimentation est de valider que RedisDG s’intègre
dans un Cloud, et peut être offert comme un service. Il nous semble que cela constitue
une innovation majeure qui ouvre de nombreuses perspectives comme cela sera souligné
dans la conclusion de thèse.
Nous avons vu dans la section précédente comment réaliser l’intégration de Re-
disDG dans Grid’5000. Pour le déploiement de SlapOS dans Grid’5000 il convient de
suivre le rapport technique [AT14] intitulé « Déploiement de la plateforme SlapOS dans
l’environnement Grid’5000 ». Nous ne revenons pas sur les aspects très techniques qui
sont développés dans ce rapport mais nous voudrions souligner le fait suivant. Comme
il s’agit de déployer un système complet (SlapOS) dans un système (Grid’5000), il
convient, avant de lancer l’application, de vérifier que SlapOS a bien été déployé et
configuré. Plutôt que d’utiliser le post-traitement possible avec Grid’5000 après un dé-
ploiement d’image, nous avons décidé pour ce travail de stopper l’automatisation du
traitement pour réaliser à la main les dernières vérifications d’usage et le lancement de
l’application MONTAGE.
Ainsi, après le déploiement de l’image SlapOS-Grid’5000, nous trouvons les trois
traitements les plus importants suivants que nous lançons depuis la machine frontale :
Nous pourrions ici envisager d’utiliser un lanceur parallèle comme Taktuk [CHR09]
pour réaliser par exemple l’enregistrement des volontaires auprès du master SlapOS
mais le problème vient que SlapOS n’a pas une interface pour signaler la fin d’une
configuration (par des signaux UNIX par exemple). Dans notre cas on pourrait imaginer
de tester de manière continue si une variable a bien été positionnée dans une base de
données ERP5 de SlapOS. Nous avons préféré programmer un endormissement de valeur
déterminée par la pratique et bien supérieur au temps de déploiement. Nous verrons plus
tard comment mieux capter ces détails d’implémentation spécifiques aux déploiements
de systèmes dans un système.
CHAPITRE 6. Validations expérimentales avec Grid’5000, SlapOS, RedisDG et
144 Pegasus
Figure 6.13 – Temps d’exécution du Workflow (1446 tâches) sur 360 workers déployés depuis
SlapOS
contraint de travailler sur le site de Lyon parce qu’il est le seul à offrir un tunnel IPv4-
IPv6, et aussi travailler avec des machines ayant au moins 8Go de RAM, alors nous
nous sommes contentés de 20 machines (le nombre maximal disponibles ayant cette
configuration). Ainsi cette expérience, s’est déroulée sur 20 machines × 20 partitions
SlapOS = 400 workers. Comme dans l’expérience de la section 6.5.3, nous avons aussi
changé l’algorithme d’ordonnancement « premier arrivé premier servi« pour utiliser celui
du « tourniquet » afin de faire participer tous les workers à l’exécution et pas uniquement
ceux qui ont le plus faible temps de latence.
La figure 6.14 présente la courbe correspondante à ce test. Nous remarquons que cet
algorithme nous fait gagner en temps total d’exécution. Nous passons de 22 minutes
pour l’expérience précédente à presque 7 minutes pour cette expérience.
Figure 6.14 – Temps d’exécution du Workflow (1446 tâches) sur 400 workers déployés depuis
SlapOS
de problèmes car nous pensons avoir fait le tour des problèmes techniques. Nous vou-
drions aussi souligner ici combien le travail de calibration et de mise au point devient
important lorsque l’on réalise le déploiement de systèmes dans un système. Automatiser
cette étape reste un problème difficile pour lequel nous pensons qu’il y a encore de la
matière scientifique à creuser.
147
Chapitre 7
7.1 Conclusion
Cette thèse est consacrée à revisiter le concept des Grilles de PCs en termes d’inter-
actions entre des composants venant du Web ou apparus récemment comme la notion
de Clouds. Il s’agit de pousser un peu plus loin le concept en se demandant par exemple
où l’on peut prendre de nos jours des ressources, où l’on peut déployer du calcul. Le
système produit, RedisDG, continue de reposer sur les composants historiques comme
l’ordonnanceur de tâches, la certification des résultats, la surveillance des nœuds, la
redondance des calculs,. . . et introduit de nouveaux composants comme les serveurs
de code ou de données. Le prototype est capable d’exécuter des graphes de tâches is-
sus de moteur de workflows bien connus comme Pegasus. Une partie de la validation
expérimentale permet de déployer à la demande le système RedisDG dans un Cloud
(SlapOS). C’est une caractéristique importante qui en fait un système unique (on sait
que plusieurs autres projets connus essaient aussi d’intégrer des ressources de Cloud à
leur système de grille de PCs).
Le protocole de coordination qui a été implémenté repose quant à lui sur une couche
de modélisation au moyen de réseaux de Petri qui nous guident pour faire des choix
d’implémentation et à avoir une confiance plus grande dans le comportement du système
par rapport à un système sans étapes de modélisation et de vérification abstraite. On
avait l’habitude, dans la communauté, de construire ces systèmes par des méthodes
ad-hoc. Ce travail de modélisation a permis de renforcer l’aspect de robustesse de notre
système permettant, ainsi, de mettre un premier pas vers un système de production,
libre, pouvant être utilisé comme solution d’expérimentation.
Nous affirmons que les briques de base d’un nouveau type de Grille de PCs sont
présentes dans RedisDG. Nous pouvons maintenant envisager un certain nombre de
raffinements sur ces briques de base. Ces raffinements constituent les perspectives de
notre travail.
148 CHAPITRE 7. Conclusion générale et perspectives
7.2 Perspectives
aussi de simulation fournit deux types de résultats. Premièrement il est montré que le
problème en question est inaproximable. Deuxièmement, les auteurs se tournent alors
vers des solutions à base d’heuristiques et il est montré que dans la pratique, par des
simulations exhaustives, que celles-ci se comportent bien sur des jeux d’essai tirés du
monde réel. Il s’agit en l’occurrence des traces d’activité des PCs sur Internet et des
travaux [IKM12] de Derrik Kondo à Grenoble.
Nous proposons de repartir de la modélisation du problème telle qu’elle est intro-
duite dans [YN14] afin de s’assurer que l’ordonnancement est équitable. Une définition
classique nous indique que l’ordonnancement équitable est une méthode d’affectation
des ressources à des travaux tels que les travaux obtiennent, en moyenne, une part
égale des ressources dans le temps. Dans les expériences à large échelle conduites pour
le workflow Montage sur plusieurs sites de Grid’5000 nous avons observé qu’avec l’or-
donnanceur actuel de RedisDG que certains nœuds obtiennent beaucoup plus de travail
que d’autres et ceci est dû à la latence réseau différentes entre les sites de Grid’5000.
En effet certains nœuds publient leurs annonces de participation plus rapidement que
d’autres et l’ordonnateur fonctionne en mode premier arrivé, premier servi. L’ordonnan-
cement équitable que nous proposons d’étudier est motivé par cette observation et doit
alors s’entendre comme une méthode d’affectation des ressources à des machines telles
que les machines obtiennent, en moyenne, une part égale de travaux dans le temps.
Le modèle initial des contraintes posées sur le problème dans [YN14] est donné à
la Table 7.1. La contrainte C1 est évidente : on ne peut déployer que sur des machines
disponibles. La contrainte C2 nous dit que les copies d’applications (pour gérer la ré-
silience) doivent être déployées sur des machines différentes. La contrainte C3 exprime
une contrainte de capacité sur les nœuds.
Nous proposons d’ajouter au modèle une contrainte pour signifier qu’à la fin de
l’exécution, le plan de déploiement est tel que toutes les machines ont reçu un nombre
équivalent de travaux . On peut aussi envisager une version plus contrainte en expri-
mant qu’à des périodes de temps régulièrement espacées, toutes les machines ont reçu
un nombre équivalent de travaux. Ensuite, nous nous proposons d’étudier expérimen-
talement la solution, à partir du simulateur déjà construit qu’il faudra adapter, et de
quantifier l’impact de ces nouvelles contraintes sur la consommation d’énergie.
150 CHAPITRE 7. Conclusion générale et perspectives
Pendant que nous écrivions cette thèse, SlapOS a évolué sur le plan du monitoring
des ressources. Le travail réalisé ne s’appuie pas sur SystemTap que nous avons introduit
dans un chapitre précédent mais s’appuie plutôt sur des outils proches de SysStat que
nous avons également introduits précédemment.
Dans la nouvelle version de SlapOS, un dossier var/data-log est crée, dans lequel
sont stockées en temps réel toutes les informations sur la consommation des partitions.
Les informations collectées concernent :
– la consommation CPU en temps réel ;
7.2. Perspectives 151
qu’il n’y a pas vraiment d’organe central dans son architecture. On pourrait à la limite
imaginer un réseau d’ overlay de démons Fluentd permettant de répartir et de consulter
les log à partir d’un point d’entrée. Il semblerait que du coté de la sortie d’information du
démon on puisse créer des réseaux en arbre avec des chemins multiples pour permettre
la résilience c.à.d pour aller du démon Fluentd à sa destination de manière sécurisée.
Nous proposons de modéliser ces aspects en comparant l’existant avec un protocole
qui peut être utilisé en sous main dans SlapOS et qui s’appelle Babel 2 développé par
notre collègue Juliusz Chroboczek de Paris 7. De plus nous avons vu qu’avec Redis il y
avait des limitations sérieuses de performance lorsque l’on voulait stoker des fichiers vo-
lumineux. Il est à craindre qu’il en soit de même avec Fluentd qui, comme Redis, est un
outil du monde du Web, prévu pour traiter beaucoup de requêtes mais pas volumineuses
et pas un outil pour le traitement intensif de masses de données importantes.
Puisque SlapOS permet l’agrégation de ressources de calcul sur Internet mais aussi
dans des data-centers, on pourrait imaginer de ne déployer la certification que sur les
nœuds qui sont exposés sur Internet, ceux dans les data-centers étant considérés comme
fiables. Techniquement cela semble réalisable à un coût de développement relativement
faible.
Par contre d’un point de vue théorique on peut par exemple se poser la ques-
tion des critères à mettre en place pour envoyer un code s’exécuter sur une machine
externe. Le problème de placement sous-jacent pourrait ensuite s’envisager avec des
techniques classiques d’optimisation combinatoire (ILP - Integer Linear Programming,
Heuristiques gloutones,. . . )
On peut aussi s’interroger sur la fraction de machines exposées sur Internet que l’on
peut s’autoriser afin d’assurer un « niveau de confiance » donné.
Peut-être même que nous avons déjà les technologies pour exécuter des applications
BOINC avec les navigateurs comme nœuds esclaves et sans la nécessité de compter sur
un véritable système d’exploitation distribué pour remplacer Linux / Windows. Cette
direction serait un moyen de parvenir à l’informatique durable en utilisant n’importe
quel dispositif multi-core à faible consommation d’énergie.
L’idée est ici de décentraliser l’architecture DG basée sur la participation de navi-
gateurs Web. Nous aimerions alors travailler pour la mise en œuvre une DG basée sur
les navigateurs Web. Qui joue le rôle de l’orchestration de services ? Avons-nous besoin
d’un réseau de recouvrement (à la PastryGrid) entre navigateurs ? Quel est le rôle d’un
ERP à la SlapOS ? Avons-nous besoin de coder BOINC en Javascript ou utiliser un
émulateur de PC écrit en Javascript ?
INRIA (Gilles Fedak) ont déposé en 2014 dans le cadre d’un appel d’offre franco-
tunisien. Il s’agit alors de modéliser le cycle de vie et à partir du modèle nous allons
pouvoir nous intéresser à des problématiques d’élasticité, d’outils facilitant la gestion
dans un Cloud.
Pour diminuer la complexité des cycles de vie des données, Active Data, développé
par INRIA à l’ENS-Lyon dans l’équipe Avalon, est un modèle de programmation visant
à automatiser et améliorer l’expressivité des applications de gestion de données. Une
collaboration informelle avec Tunis est en cours.
Active Data est un modèle de programmation et un environnement d’exécution qui
permet de programmer des applications en spécifiant le code qui sera exécuté pour
chaque étape du cycle de vie des données. Il fonctionne comme suit : les systèmes de
gestion des données exposent leur cycle de vie des données intrinsèque selon un forma-
lisme bien spécifié. Nous considérons que chaque création, modification ou suppression
d’une donnée par le système de gestion de données comme progression de la donnée
pendant son cycle de vie. Nous appelons transition le passage de la donnée d’un état à
un autre. Le modèle de programmation proposé par Active Data pourrait être considéré
comme à base de transitions.
Le programmeur fournit un code ou un gestionnaire de transition « transition hand-
ler » qui est exécuté à chaque fois qu’une transition est déclenchée. En d’autres termes,
quand une transition survient à une donnée, un message (ou un événement) est envoyé
aux autres nœuds du système pour les notifier de la transition, ce qui provoque l’exé-
cution du code transition handler. Le paradigme utilisé par Active Data pour propager
des transitions est basé sur le paradigme de publication-souscription. Les systèmes de
gestion de données publient les transitions à un service centralisé appelé Active Data
Service.
Le modèle se base sur les Réseaux de Petri, qui est un formalisme et un outil
graphique largement utilisé pour l’analyse des systèmes concurrents et pour le partage
des ressources comme nous l’avons vu dans cette thèse. Les réseaux de Petri peuvent
illustrer le cycle de vie des données d’une façon intuitive : les places, représentées par
des cercles sont les états du cycle de vie ; Les transitions, représentées par des rectangles
sont les opérations qui se produisent sur les données ; Les jetons dans les places, sont
les instances des données dans un état particulier du cycle de vie. Il est fréquent dans
les systèmes de traiter des réplicas de données. Chaque réplica de donnée est représenté
par un seul jeton du Réseau de Petri.
Active Data donne une vision orientée donnée ; il expose le cycle de vie des don-
nées afin de pouvoir faire coopérer plusieurs systèmes hétérogènes. En effet, la mise en
relation de différents systèmes est nécessaire pour traiter des volumes importants de
données, qui sont généralement acquises depuis différentes sources. Avec ActiveData, il
est possible de coordonner des actions entre ces différents systèmes tout en masquant
la complexité de cette tâche aux utilisateurs.
7.2. Perspectives 155
1. Des propriétés liées à l’évolution, dans le temps, des données (dans leur cycle
de vie) peuvent être exprimées avec des logiques temporelles et vérifiées avec un
model-checker.
2. Des propriétés spécifiques à l’environnement Cloud comme l’élasticité ou la “mul-
titenancy” peuvent aussi être considérées.
156 CHAPITRE 7. Conclusion générale et perspectives
157
Bibliographie
[BHK+ 14] Rüdiger Berlich, Marcus Hardt, Marcel Kunze, Malcolm P. Atkinson, and
David Fergusson. In Rajkumar Buyya, Tianchi Ma, Reihaneh Safavi-Naini,
Chris Steketee, and Willy Susilo, editors, ACSW Frontiers, 2007-02-14.
[BL99] Robert D. Blumofe and Charles E. Leiserson. Scheduling multithreaded
computations by work stealing. J. ACM, 46(5) :720–748, 1999.
[BLK83] J. Blazewicz, J.K. Lenstra, and A.H. Kan. Scheduling subject to resource
constraints. Discrete Applied Mathematics, 5 :11–23, 1983.
[BLR03] Olivier Beaumont, Arnaud Legrand, and Yves Robert. The master-slave
paradigm with heterogeneous processors. IEEE Trans. Parallel Distributed
Systems, 14(9) :897–908, 2003.
[BON] [Link]
[CDF 05] Franck Cappello, Samir Djilali, Gilles Fedak, Thomas Herault, Frédéric
+
PhD Forum, IPDPSW ’13, pages 974–983, Washington, DC, USA, 2013.
IEEE Computer Society.
[DGST09] Ewa Deelman, Dennis Gannon, Matthew Shields, and Ian Taylor. Work-
flows and e-science : An overview of workflow system features and capabi-
lities. Future Gener. Comput. Syst., 25(5) :528–540, may 2009.
[DON] [Link]
[DVJ+ 14] Ewa Deelman, Karan Vahi, Gideon Juve, Mats Rynge, Scott Callaghan,
Philip J. Maechling, Rajiv Mayani, Weiwei Chen, Rafael Ferreira da Silva,
Miron Livny, and Kent Wenger. Pegasus, a workflow management system
for science automation. Future Generation Computer Systems, (0) :–, 2014.
[EFGK03] Patrick Th. Eugster, Pascal Felber, Rachid Guerraoui, and Anne-Marie
Kermarrec. The many faces of publish/subscribe. ACM Comput. Surv.,
35(2) :114–131, 2003.
[EFT+ 06] T. Estrada, D.A. Flores, M. Taufer, P.J. Teller, A. Kerstens, and D.P.
Anderson. The effectiveness of threshold-based scheduling policies in boinc
projects. In e-Science and Grid Computing, 2006. e-Science ’06. Second
IEEE International Conference on, pages 88–88, Dec 2006.
[Euc] [Link]
[FC08] Bryan Ford and Russ Cox. Vx32 : Lightweight user-level sandboxing on the
x86. In USENIX 2008 Annual Technical Conference on Annual Technical
Conference, ATC’08, pages 293–306, Berkeley, CA, USA, 2008. USENIX
Association.
[FK99] Ian Foster and Carl Kesselman, editors. The Grid : Blueprint for a New
Computing Infrastructure. Morgan Kaufmann Publishers Inc., San Fran-
cisco, CA, USA, 1999.
[FKNT02] Ian Foster, Carl Kesselman, Jeffrey M. Nick, and Steven Tuecke. The
physiology of the grid : An open grid services architecture for distributed
systems integration. 2002.
[FL06] JoséLuiz Fiadeiro and Antónia Lopes. A Formal Approach to Event-Based
Architectures, volume 3922 of Lecture Notes in Computer Science. Springer
Berlin Heidelberg, 2006.
[FZRL09] Ian T. Foster, Yong Zhao, Ioan Raicu, and Shiyong Lu. Cloud computing
and grid computing 360-degree compared. CoRR, abs/0901.0131, 2009.
[Gar] [Link]
[GCGS91] Chiola Giovanni, Dutheillet Claude, Franceschinis Giuliana, and Haddad
Serge. On well-formed coloured nets and their symbolic reachability graph.
In ATPN’1991, page 373–396. Springer Verlag, 1991.
BIBLIOGRAPHIE 161
[GKK03] David Garlan, Serge Khersonsky, and Jung Soo Kim. Model checking
publish-subscribe systems. In Thomas Ball and Sriram K. Rajamani, edi-
tors, SPIN, volume 2648 of Lecture Notes in Computer Science, pages 166–
180. Springer, 2003.
[GLI] [Link]
[Gri] [Link]
[HAD] [Link]
[Hol03] Gerard J. Holzmann. Spin Model Checker, The : Primer and Reference
Manual. Addison-Wesley Professional, September 04, 2003.
[HP04] B. Hong and V.K. Prasanna. Distributed adaptive task allocation in hete-
rogeneous computing environments to maximize throughput. In Interna-
tional Parallel and Distributed Processing Symposium IPDPS’2004. IEEE
Computer Society Press, 2004.
[HSLL00] E. Heymann, M. A. Senar, E. Luque, and M. Livny. Adaptive scheduling
for master-worker applications on the computational grid. In R. Buyya and
M. Baker, editors, Grid Computing - GRID 2000, pages 214–227. Springer-
Verlag LNCS 1971, 2000.
[IJT06] Dennis B. Gannon Matthew Shields Ian J. Taylor, Ewa Deelman, editor.
Workflows for e-Science : Scientific Workflows for Grids. Springer ; 2007
edition, December 29, 2006.
[IKM12] Daniel Lázaro Iglesias, Derrick Kondo, and Joan Manuel Marquès. Long-
term availability prediction for groups of volunteer resources. J. Parallel
Distrib. Comput., 72(2) :281–296, 2012.
[JCD+ 13] Gideon Juve, Ann Chervenak, Ewa Deelman, Shishir Bharathi, Gaurang
Mehta, and Karan Vahi. Characterizing and profiling scientific workflows.
Future Generation Computer Systems, 29(3) :682–692, 2013. Special Sec-
tion : Recent Developments in High Performance Computing and Security.
[JK09] Kurt Jensen and Lars Michael Kristensen. Coloured Petri Nets - Modelling
and Validation of Concurrent Systems. Springer, 2009.
[JKW07] Kurt Jensen, Lars Michael Kristensen, and Lisa Wells. Coloured petri nets
and cpn tools for modelling and validation of concurrent systems. STTT,
9(3-4) :213–254, 2007.
[JMFJ07] Simon Tjell Joao Miguel Fernandes and Jens Baek Jorgensen. Require-
ments engineering for reactive systems with coloured petri nets : the gas
pump controller example. In In Proceedings of the 8th Workshop and Tu-
torial on Practical Use of Coloured Petri Nets and the CPN Tools, pages
207–222, October 22-24, 2007.
[Jou04] Jean-Pierre Jouannaud. Theorem proving languages for verification. In
Farn Wang, editor, ATVA, volume 3299 of Lecture Notes in Computer
Science, pages 11–14. Springer, 2004.
162 BIBLIOGRAPHIE
[Mon] [Link]
[MS94] H. Madeira and J.G. Silva. Experimental evaluation of the fail-silent beha-
vior in computers without error masking. In 24th Fault Tolerant Computing
Symposium FTCS-24, n/a, 1994.
[NAP] [Link]
[Opea] [Link]
[Opeb] [Link]
[Opec] [Link]
[OSG] [Link]
[Peg] [Link]
[PST04] Irk Pruhs, Jiri Sgall, and Eric Torng. On-line scheduling. In J. Leung, edi-
tor, Handbook of Scheduling : Algorithms, Models, and Performance Ana-
lysis, pages 15.1–15.43. CRC Press, 2004.
[RED] [Link]
[SACJ12] Walid Saad, Heithem Abbes, Christophe Cérin, and Mohamed Jemni. A
self-configurable desktop grid system on-demand. In Fatos Xhafa, Leonard
Barolli, and Kin Fun Li, editors, 3PGCIC, pages 196–203. IEEE, 2012.
[Sar02] Luis F. G. Sarmenta. Sabotage-tolerance mechanisms for volunteer com-
puting systems. Future Generation Computer Systems, 18 :561–572, 2002.
[SBB+ 99] Philippe Schnoebelen, Béatrice Bérard, Michel Bidoit, François Laroussi-
nie, and Antoine Petit. Vérification de logiciels : techniques et outils du
model-checking. Vuibert, April 1999.
[Sga98] J. Sgall. On line scheduling-a survey. In On-Line Algorithms, Lecture Notes
in Computer Science 1442, pages 196–231. Springer-Verlag, Berlin, 1998.
[SSCC11] Jean-Paul Smets-Solanes, Christophe Cérin, and Romain Courteaud. Sla-
pos : A multi-purpose distributed cloud operating system based on an erp
billing model. In Jacobsen et al. [JWH11], pages 765–766.
[Sys] [Link]
[TER] [Link]
[Try12] Denis Trystram. Les riches heures de l’ordonnancement. Technique et
Science Informatiques, 31(8-10) :1021–1047, 2012.
[VBP03] P. Vicat-Blanc Primet. High performance grid networking in the datagrid
project. special issue Future Generation Computer Systems, January 2003.
[YN14] Paolo Gianessi Congfeng Jiang Yanik Ngoko, Christophe Cérin. Energy-
aware service provisioning in volunteers clouds. International Journal of
Big-Data Intelligence (IJBDI), 2014.
[ZGB03] Luca Zanolin, Carlo Ghezzi, and Luciano Baresi. An approach to model
and validate publish/subscribe architectures, 2003.
164 BIBLIOGRAPHIE
165
Annexe A
167
168
Impact sur Détails du monitoring Exécution et codage
la mémoire
-Impact :Faible - Opérations : Prédire l’utilisation - Instrumentation statique
Kernel (valeurs du Kprobe qui dépend des breakpoints - Permet à LTTng ou SystemTap
marker immédiates) - Inconvénients : Les Markers masquent de suivre les informations
2007 - Des parties du l’instrumentation dans le code source : générées par les points probes.
code seraient pénaliser les conventions et la modification - Modification du code source facile :
dynamiquement sauf si monitoring de tout l’arbre du noyau il contient lui-même les markers.
Annexe B
Le login et le mot de passe sont demandés, utiliser le login "demo" et le mot de passe
"demo" correspondant à un compte utilisateur pré-configuré par défaut dans l’image du
master. slapos node format –now, permet de vérifier le bon fonctionnement.
[buildout]
eggs-directory = /opt/slapgrid/c601293946e22731a4eade123386bd2a/eggs
develop-eggs-directory = /opt/slapgrid/c601293946e22731a4eade123386bd2a/develop-eggs
newest = false
offline = false
parts =
publish-connection-informations
redis
redis-dg
[rootdirectory]
recipe = [Link]:mkdirectory
etc = ${buildout:directory}/etc/
srv = ${buildout:directory}/srv/
var = ${buildout:directory}/var/
bin = ${buildout:directory}/bin/
tmp = ${buildout:directory}/tmp/
[basedirectory]
recipe = [Link]:mkdirectory
services = ${rootdirectory:etc}/service/
run = ${rootdirectory:var}/run/
log = ${rootdirectory:var}/log/
[master-passwd]
recipe = [Link]:[Link]
storage-path = ${rootdirectory:etc}/.passwd
bytes = 4
[redis]
recipe = [Link]:[Link]
server_bin = /opt/slapgrid/c601293946e22731a4eade123386bd2a \
/parts/redis/bin/redis-server
ipv6 = ${slap-network-information:global-ipv6}
port = 6379
use_passwd = ${slap-parameter:use_passwd}
pid_file = ${basedirectory:run}/[Link]
server_dir = ${rootdirectory:srv}
passwd = ${master-passwd:passwd}
config_file = ${rootdirectory:etc}/[Link]
log_file = ${basedirectory:log}/[Link]
wrapper = ${basedirectory:services}/redis_server
[redis-dg]
<= redis
recipe = [Link]:[Link]
python-bin = /opt/slapos/parts/python2.7/bin/python2.7
wrapper = ${basedirectory:services}/redis_DesktopGrid
root-dir = ${buildout:directory}
work-directory = ${rootdirectory:srv}
tmp-dir = ${rootdirectory:tmp}
log-file = ${basedirectory:log}/[Link]
pid-file = ${basedirectory:run}/[Link]
[slap-parameter]
use_passwd = false
job = {"config":"/opt/slapgrid/c601293946e22731a4eade123386bd2a \
/parts/redis-dg/Montage_1446.xml", "files": {}}
#Define type of instance to request. manager | worker | all
deamon = all
REDISDG="[Link] \
/slapos/master/software/redisdg/[Link]"
ID_COMP=$(cat /etc/opt/slapos/[Link] | egrep computer_id.*= | awk ’{print $3}’)
for i in $(seq $1)
do
slapos supply $REDISDG $ID_COMP
slapos request "$2 RedisDGWorker $i" "$REDISDG"
--node "computer_guid=$ID_COMP"
--parameters "deamon=worker"
sleep 20
done
REDISDG="[Link] \
/slapos/master/software/redisdg/[Link]"
ID_COMP=$(cat /etc/opt/slapos/[Link] | egrep computer_id.*= | awk ’{print $3}’)
slapos supply $REDISDG $ID_COMP
slapos request "$1 RedisDG Master" "$REDISDG"
--node "computer_guid=$ID_COMP"
--parameters "deamon=manager"