Consensus Tous les processeurs doivent se mettre d`accord

publicité
Consensus
Tous les processeurs doivent se mettre d’accord sur
une sortie en se basant sur leurs entrées qui ne sont
pas nécessairement les mêmes.
Exemple : Dans une base de données distribuées il
faut se mettre d’accord sur un commit ou un abort
d’une transaction.
Ce qui est important est que tous les processeurs arrivent à la même conclusion. La décision prise est
moins importante.
En l’absence des défaillances, les processeurs peuvent voter et se mettre d’accord sur la valeur majoritaire.
Les processeurs doivent se mettre d’accord sur une
valeur qui a un rapport avec les entrées - sinon le
problème est trivial - tout le monde décide 0.
1
Le problème : Le processeurs non défaillants doivent
se mettre d’accord sur la valeur d’un bit.
n processeurs p0, . . . , pn−1
xi est l’entrée du processeur pi
yi est la sortie du processeur pi (i.e. la décision prise
par pi) Note : une décision est non réversible.
yi = y pour tout i où pi est non défaillant.
2
Une solution au problème doit satisfaire les conditions
suivantes :
- termination - chaque processeur qui fonctionne
correctement doit prendre une décision (affecter
une valeur à yi)
- accord - tous les processeurs qui fonctionnent correctement décident de la même valeur (affecter la
même valeur à yi)
- validité - si tous les processeurs proposent la même
valeur v (xi = v pour tout i) alors chaque processeur
qui fonctionne correctement doit décider de cette
valeur (yi = v).
3
Modèle A :
- systéme synchrone
- commmunication par échange de messages
- chaque processeur peut envoyer un message à
chacun des autres processeurs (topologie du réseau)
- au plus f processeurs qui crash (Si un processeur
crash, un ensemble aléatoire de ses messages
est envoyé juste avant qu’il ne crash.)
- pas de défaillances en communication
4
Mesures de l’efficacité de la solution
- nombre de phases nécessaires (en fonction de f )
- taille maximum d’un message
- la f -robustesse - nombre maximum de processeurs
qui peuvent être défaillant (en fonction de n)
5
Algorithme 0
Algorithme exécuté par le processeur pi, i 6= 1
Phase 1
1 Ne rien envoyer
2 Recevoir une valeur x1 de p1
3 y i = x1
Algorithme exécuté par le processeur p1
Phase 1
1 Envoyer x1 à tout le monde
2 Ne rien recevoir
3 y i = x1
L’Algorithme 0 est-il correct?
Validité et Accord : oui
Termination : Non - si p1 crash, il n’envoie pas de
message (ou seulement quelques-uns) et les autres
ne recoivent aucune valeur et donc ils ne peuvent rien
décider.
6
Algorithme 1
Algorithme exécuté par processeur pi
1
2
3
3
Phase 1
Envoyer xi à tous les autres processeurs
Recevoir la valeur xj de pj , pour tout j 6= i
Calculer la valeur, x, qui apparaît le plus souvent
parmi les valeurs reçues
yi = x.
L’Algorithme 1 est-il correct?
Termination et validité : oui
Accord : non - L’ensemble des valeurs reçues par
chaque processeur n’est pas necessairement la même.
(Quand un processeur tombe en panne, il envoie un
sous-ensemble de ces messages.)
Exemple : les valeurs reçues par des proceseurs. Seuls
processeurs p1, p3 et p4 sont non défaillants.
processeur 1 :
processeur 3 :
processeur 4 :
0 0 0 1 1 - - - - 0 0 0 1 1 - - - - - 0 - 1 1 0 0 1 1 7
Algorithme 2
Algorithme exécuté par processeur pi
1
2
3
4
Phase 1
Envoyer xi à tous les autres processeurs
Recevoir la valeur xj de pj , j 6= i
Calculer x, la plus petite valeur reçu
yi = x
Est-ce que l’Algorithme 2 est correct?
Termination et Validité : oui
Accord : Non - tous les processeurs qui fonctionnent
correctement ne décident pas de la même valeur. Soit
vj le (seul) processeur qui propose la plus petite valeur.
Si vj est défaillant et il envoie xj à certains processeurs
mais pas à tous, xj sera choisi par certains processeurs
mais pas tous.
8
Algorithme Consensus Simple
Vi est l’ensemble de valeurs vus par le processeur pi
Algorithme exécuté par processeur pi
1
2
3
4
Initialement Vi = {xi}
Pendant phase k
Envoyer toutes les valeurs v ∈ Vi qui n’ont pas encore été envoyées par pi à tous les processeurs
Recevoir un ensemble de valeurs Sj de pj , j 6= i
Ajouter tous les valeurs de Sj à Vi
Si k = f + 1 alors yi = min(Vi)
Note : Les processeurs connait f .
9
Exemple : processeur 3 est défaillant. Il envoie un
message a processeur 1 pendant phase 1 et il crash.
proc
x
1
9
2
8
phase 1
proc 1 envoie
proc 2 envoie
proc 3 envoie
proc 4 envoie
3
7
9
8
7
9
4
9
a
a
a
a
tout
tout
proc
tout
le monde
le monde
1 et il crash
le monde
proc 1 recoit 8, 7 et 9
proc 2 recoit 9 et 9
proc 4 recoit 9 et 8
phase 2
proc 1 envoie 7 et 8 a tout le monde
proc 2 envoie 9 a tout le monde
proc 4 envoie 8 a tout le monde
proc 1 recoit 9 et 8
proc 2 recoit 7 et 8
proc 4 recoit 7, 8 et 9
tout le monde decide 7
10
L’Algorithme 3 est correct !
Termination : oui. L’algorithme termine après f + 1
phases.
Validité : oui. Si toutes les valeurs proposées sont les
mêmes, tous les ensembles Vi contiennent une seule
valeur qui sera la minimum.
Proposition (Accord) : Pour chaque paire de processeurs
pi et pj qui fonctionnent correctement, Vi = Vj à la
fin de la phase f + 1.
Justification : Il suffit de montrer que, si x ∈ Vi à la fin
de la phase f + 1, alors x ∈ Vj à la fin de la phase
f + 1, pour chaque Vi, Vj non défaillant.
Soit r la première phase où x a été reçue par un
processeur pi non défaillant. x est ajoutée à Vi dans
la phase r (r = 0 si x = xi).
Cas 1: r ≤ f . Alors pi envoie x à tout le monde
pendant la phase r + 1 ≤ f + 1. Donc x est ajouté
à Vj pendant la phase r + 1 ≤ f + 1. A la fin de la
phase f + 1, tous les processeurs non défaillant ont
x.
11
Cas 2: r = f + 1. Soit pj un processeur non défaillant qui recoit x pour la première fois pendant la
phase f + 1. Pendant la phase 1 x a été envoyée par
un processeur pi1 , pendant la phase 2 par pi2 etc.
jusqu’à la phase f + 1 où x a été envoyé à pj par
pif +1 . Chaque processeur envoie une valeur particulière au plus 1 fois, donc les processeurs pi1 . . . pif +1
sont tous distincts. Au moins un de ces processeurs
est non défaillant. Mais ce processeur ajoute x à son
ensemble pendant une phase ≤ f < r = f + 1 qui
est une contradiction (on a dit qu’aucun processeur
recoit x avant la phase r).
12
Téléchargement