Obsah

Zadání

Distribuované systémy II: Synchronní a asynchronní systémy, problém shody. Volba v distribuovaném prostředí. Detekce ukončení.

Vypracování

V synchronním systému jsou jednotlivé uzly synchronizovány pomocí absolutního nebo logického času. Logický čas nemusí být shodný s absolutním, ale zajišťuje uspořádání dějů v celém systému. Příkladem je využití Lamportových časových známek (relace „událo se dříve než“): každý proces má vlastní logické hodiny, na událostech vrámci procesu je relace zajištěna triviálně, synchronizace probíhá jako součást zasílání zpráv mezi procesy (každý správa má časovou známku, pokud má příjemce menší čas, nastaví si čas na čas zprávy + 1). Dodatečnou podmínkou je aby dvě události nenastali ve stejný čas.

Jako příklad synchronzace absolutním časem je možné uvážiť NTP protokol.

V asynchronním systému jsou požadavky na časové uspořádání událostí mnohem slabší. Udáslosti probíhající na jednotlivých uzlech mají své uspořádání dle logických hodin uzlu a žádná zpráva nemůže být doručena dřív, než byla odeslána. Pořadí paralelních a na sobě nezávisících událostí nemusí být z pohledu systému vůbec stanoveno a pojem „doba trvání události“ nemá prakticky žádný význam.

V asynchronním systému neexistuje horní hranice pro čas potřebný k jednomu kroku procesu nebo doručení zprávy a neexistují synchronizované hodiny.

Problém shody

Mějme systém o n procesech, každý má stav 1 nebo 0. Každý proces může komunikovat s ostatníma, komunikace je spolehlivá ale může trvat libovolně dlouho. Proces buď funguje správně nebo se zhroutil. Cílem je aby se všechny procesy shodli na 1 nebo 0. Musí existovat případ shody pro obě možnosti.

Silná shoda: výsledný stav musí být výchozím stavem alespoň jednoho procesu, žádné dva procesy se neliší ve výsledním stavu, každý proces se v konečném čase rozhodne pro nějaký stav a toto rozhodnutí je nerevokovatelné.

Slabá shoda: žádné dva procesy se neliší ve stavu, může dojít ke shodě na různých stavech, alespoň některé procesy se v konečném čase rozhodnou pro nějaký stav a toto rozhodnutí je nerevokovatelné.

V asynchronních systémech nelze v konečném čase dosáhnout shody. Není totiž možné rozlišit mezi pomalým a zhrouceným procesem. V praxi je toto překonáváno zavedením timeoutů a ignorováním/zabitím pomalých procesů.

Problém shody je řešitelný pro fault tolerantní broadcast:

Základní spolehlivý

Je ho možno zkonstruovat pomocí dvoubodových primitiv send a receive.

Vlastnosti:

FIFO broadcast

Zprávy od jednoho vysílajícího musí být doručeny ve stejném pořadí, v jakém byly vyslány.

Příčínný (causal) broadcast

Jestliže odeslání zprávy m příčinně předchází zprávu m', pak žádný správný proces nedoručí zprávu m' dříve než m.

Atomický broadcast

Zajišťuje úplné uspořádání na všech zprávách. Neexistuje v asynchronních systémech.

Praktickou realizací je Time Reliable Broadcast, který zavádí horní limit pro na čas do ktorého se zpráva musí doručit (dosažitelné v synchronních sítích).

Failure detectors

Zavádějí částečnou synchronizaci, aplikace se od nich dozví které procesy nekomunikují.

Vlasnosti failure detectoru:

Perfektní failure detector:

Zeslabení perfektního detektoru:

Problém shody je možné vyřešit použitím perfektního nebo i nejslabšího failure detektoru.

Malicious procesy

Existuje algoritmus (gossip news, drby), který dokáže dosáhnout shody pokud maximálně třetina procesů lže / je chybných.

Volba v distribuovaném prostředí

Volba (šéfa) v distribuovaném prostředí představuje proces označení jednoho nebo více uzlů konzistentním předvídatelným způsobem. Takhle označené uzly můžou převzít například roli synchronizátoru komunikace v celém prostředí nebo dělit práci mezi uzly.

Univerzální naivní algoritmus předpokládá existenci unikátních identifikátorů uzlů: každý uzl vyšle svoje ID a pak přeposílá dál všemi směry už je vyšší ID než jaké bylo naposledy obdrženo. Pokud uzl obdrží nižší nebo stejné ID jako naposledy, nic nedělá. Uzl se deaktivuje pokud dostane ze všech směrů stejné ID (a reaktivuje se, pokud dostane vyšší).

Efektivnější algortimy (u kterých je taky snadnější pozorování dokončení procesu) vyžadují jisté znalosti o distribuovaném prostředí:

Pro příklad si vezměme algoritmus volby šéfa na jednosměrném kruhu pro uzly s identifikátory: každý uzl pošle svoje ID a přeposílá dál jen ID, které je vyšší než jaké obdržel doposud nebo jeho vlastní. Jakmile uzl obrží svoje ID, tak ho pošle znovu jako potvrzení volby a po opětovném přijmutí algoritmus končí. Algoritmus použije v nejhorším případě n^2 zpráv.

Podobné algoritmy je možné využít za jistých okolností i k „diagnostice“ prostředí - například nalezení mrtvé komunikace nebo mrtvého uzlu.

Tyhle algoritmy jsou využitelné hlavně v P2P sítích, které používají stromovou, kruhovou, mřížkovou nebo hybridní strukturu.

Detekce ukončení

Ukončení nastává, když jsou všechny uzly systému pasivní (čekají na přijetí zprávy). Dijkstra-Scholten algoritmus má jednoho iniciátora, který buduje strom výpočtu (vnitřní uzly jsou procesy, listy jsou zprávy). Po spracování všech potomků (zpráv / podprocesů) proces upovědomí svého rodiče, že je pasivní a odpojí se. Nakonec obdrží iniciátor potvrzení od všech svých potomků a tím má potvrzeno, že byl výpočet ukončen.

Předměty

FI:PA160 Počítačové sítě a jejich aplikace II (jaro 2010), prof. RNDr. Luděk Matyska, CSc.

FI:IV100 Paralelní a distribuované výpočty (podzim 2011), doc. RNDr. Rastislav Královič, Ph.D.

Použitá literatura

-

Vypracoval

DevelX - Martin Jurča

stav - 95 %