Si aucune hypothèse supplémentaire n'est adoptée, il est
prouvé que le problème d'accord élémentaire n'admet pas de
solution déterministe dans un système réparti asynchrone dès
lors qu'un processus au moins est susceptible de connaître
une défaillance de type panne franche. Notre axe de recherche
principal est donc naturellement consacré à l'étude des
solutions permettant de contourner ce résultat
d'impossibilité principalement les solutions déterministes
fondées sur les détecteurs de défaillances.
-
Solvabilité du consensus
Afin de contourner le résultat d'impossibilité nous
avons suivi trois directions. Le première direction,
initiée par Chandra et Toueg, consiste à enrichir le
système sous-jacent par des détecteurs de défaillances.
Dans [16], nous nous intéressons à de nouvelles
classes de détecteurs de défaillances dont la portée est
restreinte. Plus précisément, on suppose que les
propriétés de complétude (respectivement, d'exactitude)
telles que définies classiquement par Chandra, Hadzilacos
et Toueg ne portent pas sur l'ensemble des processus
corrects mais seulement sur k (respectivement, k') processus corrects parmi eux. On
donne les conditions sous lesquelles ces détecteurs
restreints sont équivalents à leurs homologues de portée
maximale. Dans [28],
les restrictions ne portent plus seulement sur les
processus corrects mais sur tout processus. Les
détecteurs de défaillance sont donc encore plus simples à
mettre en oeuvre. [46] présente une introduction à des
détecteurs de défaillances pour résoudre le problème de
la diffusion fiable (plus simple à résoudre que le
consensus). Ces derniers peuvent être mis en oeuvre
moyennant une majorité de processus corrects.
Une autre faÇon de contourner le résultat
d'impossibilité consiste à affaiblir le problème (la
terminaison est seulement probabiliste). Ben-Or a été le
premier à trouver une solution probabiliste au problème
du consensus binaire. Tout comme Aguilera et Toueg, nous
avons exploré dans [26]
une approche hybride pour résoudre le problème du
consensus. La solution proposée combine dans la même
structure algorithmique deux sources possibles de
terminaison. La première, déterministe, est fondée sur
des détecteurs de défaillances. La seconde, probabiliste,
est fondée sur le tirage aléatoire. A cause de sa
composante probabiliste, le protocole hybride ne résout
que le consensus binaire. Nous avons donc proposé un
protocole simple qui résout le consensus multi-valué en
utilisant un protocole de consensus binaire comme brique
de base [14]. Afin d'éviter cet empilement
protocolaire, nous avons proposé un protocole de
consensus multi-valué purement probabiliste [38].
Nous avons introduit une nouvelle approche dans la
résolution du problème du consensus dans les systèmes
répartis asynchrones [43].
Un vecteur d'entrée au problème du consensus est le
vecteur constitué des n
valeurs proposées par les n processus. Si V est l'ensemble des valeurs qui
peuvent être proposées alors il existe | V|n vecteurs d'entrée
possibles au consensus. Une manière de circonvenir le
résultat d'impossibilité consiste à n'autoriser qu'un
sous-ensemble S de ces
vecteurs. Le premier résultat que nous proposons est un
protocole de consensus générique, paramétré par
S, pour le modèle à
mémoire partagée. Ce protocole garantit la propriété
d'accord du consensus quel que soit le vecteur d'entrée.
La propriété de terminaison est satisfaite soit en
l'absence de défaillances soit lorsque le vecteur
d'entrée appartient au sous-ensemble S. Nous avons donné une condition
nécessaire et suffisante que doit vérifier un
sous-emsemble de vecteurs d'entrée pour résoudre le
problème du consensus. Ces travaux effectués pour le
modèle à mémoire partagée ont été étendus au modèle de
communication par messages.
Les pannes franches ne constituent qu'un cas
particulier de comportement défaillant. Aussi, concevoir
des protocoles répartis capables de résister à un
comportement erroné arbitraire des processus constitue un
réel défi, compte-tenu de la possibilité d'attaques
malveillantes ou d'erreurs logicielles imprévues. Par
conséquent, être capable de construire un protocole
masquant les défaillances arbitraires au-dessus de
protocoles tolérant les pannes franches constituerait une
avancée majeure dans le domaine de l'ingénierie
logicielle. Nous avons exploré une approche
méthodologique générale permettant de telles
constructions [20]. Elle s'applique au cas des
protocoles dont tous les processus ont le même programme
et échangent régulièrement des messages. Cette approche,
modulaire, est basée sur l'encapsulation de la détection
de défaillances de tout type dans des modules
spécifiques. Elle peut constituer un point de départ pour
la conception d'outils de transformation automatique.
Cette méthodologie a été appliquée au problème du
consensus [19].
-
Solutions au problème du consensus
Nous nous sommes principalement intéressés aux
solutions déterministes s'appuyant sur des détecteurs de
défaillances appartenant aux classes
et

. La classe des détecteurs de
défaillances forts (dénotée
) regroupe tous les détecteurs
de défaillances qui ont pour propriétés de suspecter les
processus défaillants (propriété de complétude) mais de
ne pas suspecter au moins un des processus non
défaillants (propriété d'exactitude). La classe des
détecteurs de défaillances faibles (dénotée

) regroupe quant à elle tous
les détecteurs de défaillances qui vérifient la même
propriété de complétude mais ne satisfont la propriété
d'exactitude qu'après un laps de temps indéterminé. De
fait, les détecteurs de défaillances appartenant à ces
deux classes sont intrinsèquement non fiables puisqu'ils
peuvent suspecter arbitrairement des processus corrects.
Bien que faibles, les propriétés d'exactitude
caractérisant ces deux classes sont suffisantes pour
permettre de résoudre le problème du consensus si au
moins un processus est correct (classe
) ou si au moins une majorité
de processus est correcte (classe

).
Plusieurs protocoles de consensus fondés sur la classe
ont été conÇus par le passé,
dont un très simple que nous avons proposé récemment
[27] . Certains d'entre-eux requièrent
systématiquement n
étapes de calcul (n
étant le nombre de processus), chaque étape nécessitant
l'émission de n ou
n2 messages.
D'autres protocoles permettent une prise de décision au
plus tÔt (dans ce cas, le nombre d'étapes de calcul
dépend du nombre de défaillances détectées) mais
requièrent n2
messages à chaque étape de calcul. Une de nos
contributions [21,22] a consisté à définir un
protocole de consensus fondé sur la classe
qui permet des décisions au
plus tÔt. Chaque étape de calcul nécessite 3(n - 1) messages. De fait, le
protocole que nous proposons est particulièrement
efficace en temps et en nombre de messages. Ce protocole
a été adapté aux détecteurs de défaillances de la classe

et généralisé afin de
permettre, lorsque cela est nécessaire, une nouvelle
réduction du nombre d'étapes de calcul au prix bien
évidemment d'un accroissement du nombre de messages
échangés par étape. Le compromis qui résulte du choix
d'un schéma d'échange de messages peut être modifié à
chaque pas d'itération. Ainsi le nombre de messages
échangés par pas de communication peut varier de
O(n) (schéma centralisé)
à O(n2)
(schéma totalement décentralisé) [41].
En plus de ce premier degré de liberté, nous proposons
dans [42], un protocole générique qui peut
s'adapter aisément aux deux classes de détecteurs de
défaillances

et
. Différentes instantiations
du protocole général permettent de retrouver des
protocoles existants (par exemple, celui de Chandra et
Toueg) ainsi que de nouveaux protocoles. Cette approche,
également intéressante par son aspect méthodologique,
permet de comprendre les fondements conceptuels de cette
famille de protocoles. Ceci est rendu possible par la
caractérisation de deux ensembles de processus qui, pour
un pas d'itération donné, assurent respectivement les
propriétés de vivacité et de sûreté. Cette approche
permet également de montrer que, contrairement a une idée
admise, les estampilles utilisées dans le protocole de
Chandra et Toueg peuvent être bornées.
Un des défauts des protocoles fondés sur la classe

réside dans le fait qu'à une
étape donnée seule la valeur du coordonnateur peut être
décidée. Si nous considérons le cas favorable où tous les
processus proposent la même valeur, il est malgré tout
possible de ne pas décider avant longtemps si la
propriété d'exactitude met du temps à se vérifier. Nous
avons donc défini un protocole [36]
qui permet aux processus de décider en une étape de
communication dans des circonstances favorables.
Celles-ci apparaissent lorsque (n - f ) processus proposent
la même valeur (où f est
le nombre maximal défaillances). Le protocole requiert la
condition f <
n/3. Il est montré que, dans le cas
général, cette condition est nécessaire. Cette condition
peut être affaiblie à f <
n/2 au prix d'une étape de communication
supplémentaire.
-
Autres problèmes d'accord
Le consensus est un problème d'accord élémentaire dont
la définition simple est unanimement reconnue par tous.
Il s'agit d'un problème purement théorique qui permet
d'abstraire différents problèmes d'accord. La simplicité
de ce problème permet, lors de son étude, de se focaliser
uniquement sur le résultat d'impossibilité qui est
associé à tout problème d'accord. En pratique, ceci ne
signifie pas pour autant qu'un service de consensus est
le dénominateur commun idéal à partir duquel on peut
toujours dériver des solutions efficaces à des problèmes
d'accord plus complexes. Diverses variantes au problème
du consensus ont donc été explorées. Le but poursuivi est
de concevoir une brique de base parfaitement adaptée au
problème d'accord que l'on désire résoudre.
Parmi les variantes possibles au problème du
consensus, nous avons étudié le problème du calcul d'une
donnée globale cohérente (un vecteur comportant une
entrée par processus). L'importance du problème nous a
conduit à rechercher un protocole spécifique, efficace en
temps, utilisable uniquement si on dispose de détecteurs
de défaillances parfaits [12,23]. Ce protocole permet des
décisions au plus tÔt. Soit t le nombre maximal de pannes
pouvant se produire et soit f le nombre de pannes effectives
(f < t). Dans
le pire des cas, le protocole termine après
min(2f + 2, t +
1) tentatives. De plus, ce protocole ne nécessite
pas d'échange d'information sur la perception locale des
pannes. Ce travail présenté à la conférence ICDCS'00
(International conférence on Distributed Computing
Systems) s'est vu attribué le "Best Paper Award".
Le problème du "k-Set
Agreement" généralise le problème du consensus en ce sens
qu'il ne limite pas l'ensemble des valeurs de décision à
une seule mais à k
valeurs, il est de ce fait moins dur à résoudre. Dans un
système asynchrone composé de n processus et où au plus
f d'entre eux peuvent
être défaillants, le problème du "k-Set Agreement" peut être
facilement résolu si f <
k. Il a par ailleurs été démontré qu'aucune
solution déterministe n'existe lorsque f
k.
Nous avons montré dans [28]
que les détecteurs de défaillances de Chandra et Toueg ne
sont pas minimaux pour résoudre le ``k-Set Agreement'' nous avons donc
étudié une approche fondée sur les détecteurs de
défaillances à portée réduite. Dans [45]
nous présentons une approche probabiliste pour résoudre
ce problème. Le protocole proposé ne nécessite pas la
connaissance a priori de
l'ensemble des valeurs proposables. Dans les deux cas,
nous avons mis en évidence un aspect contre-intuitif du
problème : plus ``k'' augmente moins on tolère de
défaillances. Cependant, on gagne sur l'aspect
impossibilité puisque dans la solution déterministe on a
besoin de détecteurs de défaillances plus faibles. Tout
comme dans le cas du consensus, on a présenté dans
[44] un protocole fondé sur une restriction
sur la composition de l'ensemble des valeurs proposées
qui permet de résoudre ce problème quel que soit
f. En l'occurrence, nous
avons montré que s'il existe parmi toutes les valeurs
proposées un sous-ensemble de k valeurs proposées par plus de
(kn + f )/(k +
1) processus alors le problème du "k-Set Agreement" a une solution.
-
Prise en compte des contraintes temporelles
Notre objectif est de maîtriser la terminaison des
protocoles exécutés en permettant de gérer au mieux une
durée maximale d'exécution.
Un protocole fondé sur l'ordre causal garantit que si
deux messages sont causalement liés et ont les mêmes
destinataires, alors ces messages sont remis (à
l'application) selon leur ordre d'émission. Cette
garantie permet de simplifier sensiblement le
développement d'applications distribuées. Pour empêcher
la violation de l'ordre causal, deux techniques
existent : soit on force un message à attendre les
messages ``(en retard'') dont il dépend, soit les
messages ``en retard'' sont annulés. Il est clair que
pour un système temps réel, la première approche n'est
pas satisfaisante. En effet dès qu'un message dépasse son
échéance, tous les messages qui en dépendent vont
forcément dépasser leur échéance. Nous proposons
dans [31] une abstraction originale de
l'ordre causal fondé sur les échéances des messages. Deux
implémentations sont proposées dans le contexte des
communications de groupe (diffusion générale et diffusion
sélective).
-
Gestion de la composition d'un groupe
Le concept de groupe est de plus en plus utilisé pour
concevoir des couches logicielles permettant de supporter
l'exécution d'applications réparties fiables. Ce
paradigme recouvre deux services de base, à savoir, un
service de gestion de la composition du groupe et un
service de communication de groupe. Un groupe est un
ensemble de processus coopérant à la réalisation d'une
tâche commune. Étant donné que de nouveaux processus
peuvent souhaiter rejoindre le groupe, que des membres du
groupe peuvent souhaiter le quitter ou connaître des
défaillances de type panne franche, la composition du
groupe doit pouvoir évoluer de faÇon dynamique.
L'ensemble des processus qui constituent le groupe à un
instant donné est appelé la vue courante du groupe.
Dans [40], nous nous intéressons aux
problèmes de la spécification et du développement d'un
service de gestion de la composition du groupe ne
tolérant qu'une partition primaire (une seule vue à un
instant donné). Nous proposons tout d'abord une
spécification du problème. Ensuite, nous présentons un
protocole qui satisfait cette spécification dans un
système réparti asynchrone équipé de détecteurs de
défaillances. Le service de gestion de la composition du
groupe via une partition primaire est obtenu en
spécialisant de manière appropriée un protocole d'accord
générique. Pour cela, nous avons défini un cadre général
dans lequel la définition d'un problème d'accord
particulier est fixée par le biais de 6 paramètres. Le
protocole proposé par Chandra et Toueg pour résoudre le
problème du consensus à l'aide de détecteurs de
défaillance appartenant à la classe

constitue l'ossature du
protocole générique proposé. Les extensions offertes par
ce nouveau service d'accord permettent notamment aux
membres d'un groupe de processus de décider unanimement
sur une collection de valeurs proposées (plutÔt que sur
une seule des valeurs proposées) tout en autorisant les
processus à effectuer de multiples propositions (plutÔt
qu'une seule au démarrage du protocole d'accord).