==== Election dans un graphe quelconque ====
=== Maillage complet et diffusion ===
Soit l'algorithme du plus fort (bully algorithme) de Garcia-Molina:
Le site initiateur P_{i_0} diffuse le message El\left(c_{i_0},i_0\right) à tous les processus. Puis il attend.
A la réception d'un El\left(c_k,k\right) un processus P_i répond
* Ack(i) à P_k si sa capacité c_i est inférieur ou égale à c_k
* El\left(c_i,i\right) en diffusion si sa capacité est strictement supérieur à c_k
- Appliquer l'algorithme sur l'exemple suivant : c1=5, c2=Y, c3=9, où P1 initie l'éléction.
- Quel est le pire des cas (en terme de messages échangés)?
- Même question pour N processus
^ De ^ Message ^ A ^ Pourquoi ^
| P1 | El(5,1) | P2 | Init |
| P1 | El(5,1) | P3 | Init |
| P2 | El(7,2) | P1 | El de P1 |
| P2 | El(7,2) | P3 | El de P1 |
| P3 | El(9,3) | P1 | El de P1 |
| P3 | El(9,3) | P2 | El de P1 |
| P1 | Ack(1) | P2 | El de P2 |
| P1 | Ack(1) | P3 | El de P3 |
| P2 | Ack(2) | P3 | El de P3 |
| P3 | El(9,3) | P1 | El de P2 |
| P3 | El(9,3) | P2 | El de P2 |
| P1 | Ack(1) | P3 | El de P3 |
| P2 | Ack(2) | P3 | El de P3 |
On a des élections en cascade et à répétition parce que les sites reposent la question aux sites qui ont déjà répondu ''Ack''. Qui plus est, il n'y a pas de mécanisme pour déclencher Proclamation : faut dire que le site qui reçoit ''Ack'' de tous les autres sites soit proclame "c'est moi le plus fort!", soit dit à l'initiateur de le faire.
Pire des cas : le site le plus faible initie. Voyons pourquoi :
* Lorsque le site le plus fort diffuse une élection,
* il envoie N-1 messages,
* il reçoit N-1 ''Ack''.
* => 1 élection
* Lorsque c'est le deuxième plus fort,
* il envoie N-1 messages,
* il reçoit N-2 ''Ack'',
* mais il fait diffuser une élection par #1 (le plus fort), donc N-1 messages de plus et N-1 ''Ack'' (dont le sien).
* => 2 élections
* De même, le 3e diffuse une élection qui entrainera des élections diffusées par #1 et #2, et celle de #2 entrainera une autre de #1.
* => 4 élections
* Si le k-ième site diffuse une élection, il en suivra k-1 autres qui entraineront k-2 autres, et ainsi de suite jusqu'à une dernière diffuser par #1:
* nombre d'élections si ''k'' initie : \displaystyle 1 + (k-1) + (k-2) + ... + 1 = 1+ \sum_{i=1}^{k-1} i = \frac{\left(k-1\right)k}{2}+1
* n-1 messages envoyés par élection (ou diffusion, plus exactement).
* total messages : élections * msg/élection = \displaystyle \left(\frac{\left(k-1\right)k}{2}+1 \right) \times \left(k-1\right)=O\left(k^3\right), maximisé lorsque k=N, le rang du plus faible.
* Quant aux acquittements, FIXME : à terminer, mes notes sont un peu légères en cette partie.
=== Completer l'Algorithme ===
* Lorsqu'un site aura reçu Ack() de tous les autres sites, il Proclame()
* Lorsque l'initiateur aura soit Proclamé, soit reçu la proclamation, il informe le demandeur.
=== Réduire le Trafic ===
Pour réduire le nombre de messages:
* solution radicale : on ne cascade pas les élections, on répond à l'initiateur--un seul aller-retour. Mais là on abandonne l'esprit du protocole, non?
* empêcher les sites de diffuser l'élection après avoir émis un ''Ack()'' car il ne peut pas être le futur gagnant -- combien ça réduit?
==== Navigation ====
[[algo_dist_2|]] -- [[algo_dist_4|]]