-
Lídr = koordinátor, iniciátor (jiná role než ostatní uzly).
-
Uzly se musí “domluvit” kdo bude lídr.
-
Úzce souvisí se vzájemným vyloučením:
- Vzájemným vyloučením je možné zvolit lídra.
- Lídr zajišťuje vzájemné vyloučení.
-
Předpoklady:
- Existuje identifikátor uzlu.
- Uzly o sobě navzájem vědí.
- Uzly mohou vypadnout.
Bully algoritmus
-
Cílem je zvolit nejsilnější (nejvyšší) proces na základě jejich identifikátoru.
-
Detekce potřeby nového lídra:
- Každý proces v DS pravidelně kontroluje, zda je stávající lídr stále dostupný.
- Pokud proces zjistí, že lídr nereaguje (nekomunikuje), považuje to za detekci potřeby nové volby lídra.
Průběh:
- Zahájení volby lídra:
- Proces, který zjistí nedostupnost lídra, začne volbu nového lídra tím, že pošle žádost o volbu
(ELECTION message)
všem procesům s vyšším identifikátorem než má sám.- Reakce ostatních procesů:
- Procesy, které obdrží žádost o volbu, mohou buď potvrdit, že nejsou zájemci o stání se lídrem, nebo mohou začít sami volbu, pokud mají vyšší identifikátor.
- Vítězný proces:
- Proces s nejvyšším identifikátorem mezi těmi, kteří obdrželi žádost o volbu, se stane novým lídrem.
- Tento proces zašle zprávu informující o svém vítězství
(COORDINATOR, message)
všem ostatním procesům.- Aktualizace informací:
- Ostatní procesy aktualizují své informace o aktuálním lídrovi na základě nových zpráv.
- Pokud některý z nich zjistí, že má vyšší identifikátor než nový lídr, může zahájit svou vlastní volbu.
-
Bully algoritmus funguje dobře v situacích, kdy potřebujeme rychle zvolit nového lídra v reakci na výpadek stávajícího.
-
Časová složitost je , kde je počet procesů v systému.
- Může být neefektivní ve velkých DS.
-
Existuje i varianta, kdy se vybírá lídr s nejnižším identifikátorem. Poté se zprávy posílají všem co mají nižší identifikátor atd.
Ring algoritmus
- Ring algoritmus pro volbu lídra v DS je založen na kruhové topologii.
Průběh:
- Zahájení volby:
- Proces, který rozhodne, že je třeba zahájit volbu lídra (například po detekci výpadku stávajícího lídra), pošle “lístek” se svým identifikátorem sousedovi.
- Předávání zpráv:
- Každý proces, který obdrží “lístek” a porovná zda je jeho identifikátor větší než ten na lístku.
- Pokud ano, přepíše a pošle dál, pokud ne pošle pouze dál.
- Detekce vítěze:
- “Lístek” cirkuluje v kruhu, dokud nenarazí na proces, který započal volby.
- Tento proces pak zprávu vyhodnotí a informuje všechny uzly o výsledku (pošle další “lístek”).
- Potvrzení lídra:
- Každý proces přijímá příchod zprávy o novém lídrovi a aktualizuje svůj stav o identifikátor nového lídra.
- Opět existuje varianta, kdy se volí lídr s nejnižším identifikátorem.
Raft algoritmus
-
Moderní (2014) a především jednoduchý algoritmus, implementovaný v mnoha jazycích.
-
Je založen na většinové shodě.
-
Běžně se používá pro replikaci dat, avšak lze použít i pro samotnou volbu lídra.
-
Stavy uzlů:
- Leader, Následovník, Kandidát
-
Term = Volební období.
-
Split-vote = nikdo nezískal (restart, náhodné zpoždění)
Průběh:
- Inicializace:
- Každý uzel v DS začíná ve stavu “Follower” (následovník).
- Vyvolání voleb - následovník:
- zvýší svůj term,
- stane se kandidátem,
- hlasuje sám pro sebe,
- požádá o hlas všechny ostatní (zašle zprávu).
- Uzel obdrží zprávu o hlas:
- Když kandidát (follower je podobný) obdrží zprávu
RequestVote
, zkontroluje, zda je volební období žádajícího kandidáta větší než jeho vlastní.- Pokud je období větší, aktualizuje svoje období, přejde do stavu následníka a hlasuje pro kandidáta.
- Pokud je term stejný nebo menší, žádost o hlasování zamítne.
- Výsledek:
- Vyhraje volby:
- kandidát dostane většinu hlasů,
- prohlásí se leaderem.
- Jiný kandidát se prohlásí leaderem (zpráva) a:
- má term větší nebo roven mému návrat k následovnictví.
- má term menší než můj odmítnu ho.
- Dlouho nevyhrává nikdo - timeout restart voleb.
Další pojmy:
- Časový limit voleb:
- Každý uzel čeká na náhodný časový limit voleb.
- Pokud uzel během tohoto časového limitu neobdrží zprávu od lídra nebo jakéhokoli kandidáta, přejde do stavu “kandidát” a zahájí nové volební období.
- Heartbeats:
- Jakmile se uzel stane vůdcem, zasílá periodicky zprávy všem následovníkům, aby si udržel své vedení a zabránil zahájení nových voleb.
- Ztráta lídra:
- Pokud následovník neobdrží Heartbeat během určitého časového limitu, přejde do stavu kandidáta a zahájí nové volební období.
- Omezení volebního období:
- Každé nové volební období v Raft algoritmu je vyhrazeno pro jednu volbu lídra. To znamená, že každá volba lídra má svoje vlastní volební období.
Problémy volby lídra:
- V některých případech nechceme vybírat lídra pouze podle identifikátoru. Je nutné zohlednit i například:
- Polohu
- Výkon uzlu
- Latenci
- …
- Například v Ad-hoc sítích chceme najít lídra s určitými parametry (toho nejlepšího).
Ad-hoc sítě
- Ad-hoc síť = bezdrátová a decentralizovaná síť na bázi P2P.
Postup:
- Libovolný uzel (source) zahájí volby (pošle zprávu
ELECTION
)- Pokud uzel obdrží
ELECTION
poprvé, udělá z odesílatele svého rodiče a pošleELECTION
všem sousedům (kromě rodiče). PřijetíELECTION
potvrdí až, dojde k potvrzení od sousedů.- Pokud uzel obdrží
ELECTION
od jiného uzle než od svého rodiče pouze ji potvrdí.- List potvrdí přijetí
ELECTION
a zašle informace o svých možnostech (stav baterie, rychlost, …) rodiči.- Informace (vždy nejlepší volba) se propagují sítí zpět k source uzlu.
*Navíc od pana doktora Trnečky
Odbočka: Broadcast
- Broadcast představuje poměrně velkou zátěž (velký počet zaslaných zpráv).
- Vhodné je použít například Gossip protokol (někdy také epidemic protokol)
- Propagace:
- Každý uzel posílá zprávu náhodným uzlům.
- Po určitém počtu konverguje.
- Agregace:
- Každý uzel si nastaví proměnnou na pouze nastaví na .
- Když konverguje nastaví své na .
- Z průměru hodnoty je možné odhadnout počet uzlů v síti.
- Propagace: