• Aucun résultat trouvé

Mise en œuvre des groupes auto-organisants

Partie III – Mise en œuvre et évaluation 101

8.3 Mise en œuvre des groupes auto-organisants

copies de la donnée. Il est possible de demander à ce qu’il n’y ait qu’une copie dans la grappe du processus, dans ce cas aucune garantie de tolérance aux fautes n’est offerte.

Le noyau JUXMEMcherche alors autant de pairs fournisseurs que nécessaire. Les méca-nismes mettant en œuvre cette recherche sont détaillés dans [64]. Quand les pairs fournis-seurs ont été trouvés, avant d’instancier la pile logicielle coté client, des requêtes d’alloca-tion sont envoyées à chacun des fournisseurs sélecd’alloca-tionnés. Chaque requête contient la liste des fournisseurs sélectionnés sous forme d’une liste contenant les listes des fournisseurs de chaque groupe. Ces listes sont utilisées pour initialiser les listes de membres des groupes.

Dans la mise en œuvre présentée ici, un nœud appelé nœudsérialisateurordonnance les mes-sages pour son groupe. À l’initialisation, pour chaque groupe, le fournisseur apparaissant en premier sur la liste reçue est considéré comme nœud sérialisateur.

Quand les piles logicielles ont été instanciées sur les fournisseurs, ceux-ci retournent des acquittements au client ayant effectué la requête d’allocation. Le client reste bloqué dans l’attente de tous les acquittements3. Quand tous les acquittements attendus ont été reçus, la pile logicielle client pour cette donnée est instanciée et le processus applicatif ayant appelé la primitive d’allocation est débloqué.

Communication de groupe. Conserver la cohérence des différentes copies d’un groupe alors que des accès concurrents sont effectués nécessite d’ordonnancer les accès. En effet, si toutes les copies sont modifiées par les mêmes actions, et ce dans le même ordre, elles évolueront toutes de la même manière.

La diffusion atomique des messages définie à la section 3.3.2 garantit que tous les mes-sages envoyés à un groupe seront pris en compte par chacun des membres de ce groupe dans le même ordre. Plusieurs implémentations de la diffusion atomique existent. Au chapitre 5, nous avons décrit un mécanisme de diffusion atomique s’appuyant sur un algorithme de consensus utilisé pour décider de l’ordre de prise en compte des messages. Nous présentons ici une autre mise en œuvre consistant à utiliser un nœud sérialisateur qui a la responsabilité de déterminer cet ordre pour les autres nœuds en numérotant tous les messages de diffusion.

Ainsi, pour chaque groupe, un nœud sérialisateur est choisi. Tous les messages destinés au groupe lui sont adressés. Il a en charge de les diffuser au groupe de manière à ce que chacun des membres les traitent dans le même ordre. Avant d’acquitter le message à l’émet-teur, le nœud sérialisateur attend qu’une majorité des membres de son groupe en ait ac-quitté la diffusion. En cas de défaillance du nœud sérialisateur, au moins la moitié des autres membres ont une copie à jour. De plus, dans notre mise en œuvre, les listes de membres sont ordonnées de la même manière sur chacun des membres4: cela permet de choisir le prochain membre non-défaillant dans la liste comme nouveau nœud sérialisateur. Le nouveau nœud sérialisateur diffuse alors un message pour récupérer les numéros de version de chaque co-pie afin de pouvoir re-propager la ou les mises à jour nécessaires. Durant un changement de nœud sérialisateur, le groupe est inaccessible. Quand les éventuelles mises à jour néces-saires ont été propagées, le nœud sérialisateur publie son identifiant rendant ainsi le groupe à nouveau accessible.

3Un mécanisme de délai de garde est utilisé afin de supporter les fautes lors de l’allocation.

4À l’allocation elles sont initialisées dans le même ordre, et chaque ajout/retrait s’effectue via une diffusion atomique.

8.3 – Mise en œuvre des groupes auto-organisants 115

GDG émission d’un message

acquittement au GDG

Grappe B

Grappe A du message

G L G

L G

LDG A

LDG B

1

2

3

3

3 2

3

3 4 4

4 4

4 5

5

6

L G

L G

L

FIG. 8.7 – Diffusion des messages envoyés aux GDG.

La figure 8.7 représente la diffusion au sein des GDG. Les membres de ces groupes sont eux-mêmes des groupes : les LDG. Le mécanisme de diffusion des messages au sein des GDG est le même que celui des LDG, la diffusion au sein d’un GDG est donc hiérarchique.

1. Le nœud sérialisateur du GDG (qui est le nœud sérialisateur du LDG sérialisateur du GDG) diffuse les messages à tous ses membres, c’est-à-dire les LDG, donc les nœuds sérialisateurs des LDG (2) ;

2. les nœuds sérialisateurs des LDG diffusent les messages à leurs membres (3) et at-tendent des acquittements, comme décrit ci-dessus (4) ;

3. les nœuds sérialisateurs des LDG acquittent les messages dès qu’ils ont reçus suffisam-ment d’acquittesuffisam-ments (5) ;

4. le GDG peut alors considérer le message comme diffusé, et l’acquitter (6).

8.3.2 Auto-organisation des groupes

En cas de faute, les groupes doivent se ré-organiser afin de pouvoir continuer à assu-rer les mêmes garanties de tolérance aux fautes. De nouveaux fournisseurs peuvent alors remplacer les fournisseurs défaillants.

Comme expliqué à la section 8.1.3, les groupes sont prévenus des fautes par l’intermé-diaire de détecteurs de fautes. Lorsqu’une faute est détectée, le nœud sérialisateur (ou le nouveaunœud sérialisateur en cas de défaillance du nœud sérialisateur lui-même) diffuse de manière atomique la décision d’évincer le nœud fautif à tout le groupe. Cela permet d’as-surer le changement de “vue”. Une recherche est ensuite lancée afin de remplacer le four-nisseur défaillant. Entre temps, le groupe continue son fonctionnement avec un membre en

moins. Quand le nouveau fournisseur est trouvé, le nœud sérialisateur gèle les communica-tions du groupe le temps d’introduire le nouveau membre. Les requêtes arrivant sont alors mises en attente sur chacun des membres du groupe, le temps que laréparationse termine.

Celle-ci comprend le transfert de l’état du protocole de cohérence ainsi que de la donnée sur le nouveau membre, et la diffusion de la nouvelle liste de membres à l’ensemble du groupe.

Il est ainsi possible de tolérer un très grand nombre de fautes, supérieur à la taille initiale des groupes, à condition que les occurrences de fautes ne soient pas trop fréquentes et que les groupes aient le temps de se reconfigurer.