Distribuovaný systém
Distribuovaný systém je takový systém (softwarový systém, kolekce procesorů, atd.), ve kterém jsou jeho jednotlivé komponenty propojeny sítí. Tyto komponenty pak mezi sebou komunikují pomocí posílání zpráv. Smyslem distribuovaného systému je spolupráce všech jeho komponentů k dosažení nějakého společného cíle, případně koordinovat používání sdílených zdrojů mezi jednotlivými uživateli a poskytovat jim podporu v podobě komunikačního nástroje. Jednotlivé prvky systému se nazývají uzly.
Mezi nejčastější příklady distribuovaného systému, kromě počítačové sítě obecně, je Service Oriented Architecture, Massive Multiplayer Online hry, peer-to-peer aplikace, nebo specializované vědecké distribuované výpočty, na kterých pracuje nějaká skupina procesorů.
Historicky slovo “distribuovaný” v pojmech jako “distribuovaných systém”, “distribuované programování” a “distribuovaných algoritmus” původně odkazovalo na počítačové sítě kde byly jednotlivé stroje fyzicky distribuovány po nějaké geografické oblasti. Dnes se pojem “distribuovaný” používá v širším významu - typicky když máme na mysli autonomní procesy, které běží na jednom počítači a komunikují mezi sebou zasíláním zpráv.[1]
Charakteristika
Hlavní charakteristikou distribuovaných systémů je absence sdílené paměti (čímž se liší od paralelních systémů) a nepřítomnost centrálního časového mechanismu (hodin). Každý uzel tedy používá svou vlastní paměť (viz obrázek) a události v systému nastávají asynchronně (abstrahovány od explicitního vyjádření času nastávají události nepředvídatelně). Systém se pak navenek tváří jako jednotný celek (například Internet vidíme jako jednu celistvou síť, to samé u MMORPG hry atd.).
Důležitou vlastností systému je zachování jeho funkčnosti při výpadku jednoho nebo několika uzlů – zdroje, resp. úkoly jsou přerozděleny mezi ostatní uzly systému. Výpadek může zhoršit chování systému. Aby se zachovala funkčnost, musí být distribuována i data v několika kopiích.
Struktura systému (topologie, počet uzlů nebo latence) nemusí (a často není) známa předem (tedy před jeho vytvořením). Tato struktura se také může měnit v čase běhu programu (například počet uzlů se během času často mění).
Neméně zajímavou vlastností je to, že každý uzel zná jen část struktury distribuovaného systému (viz například dynamické směrování v Internetu). Tato vlastnost není podmínkou, u architektury master/slave obvykle master zná celou síť. Ale její výhodou je, že se (případné) změny nemusí propagovat do celé sítě a systém je odolnější, neobsahuje single point of failure (viz nejblíž fault-tolerant system).
Distribuované algoritmy
Algoritmy použité pro řízení distribuovaného systému nazýváme distribuované algoritmy. Pokud jsou distribuované algoritmy použity speciálně pro výměnu informací mezi množinou kooperujících uzlů a pro řízení jejich komunikace, jsou nazývány protokoly (protokol transportu dat, protokol zřízení spojované služby apod.).
Požadavky na algoritmy v distribuovaných systémech:
- Bezpečnost (Safety) = Nothing bad happened yet. Přechody mezi jednotlivými stavy systému způsobené algoritmem nesmí způsobit nežádoucí stav (zhroucení systému).
- Živost (Liveness) = Something good eventually happens. Posloupností stavových přechodů je postupně dosahováno žádoucího stavu.
- Férovost = Musí se dostat na každého, resp. každý uzel v konkrétní prioritní třídě (pokud je definována) musí být obsloužen férově.
Distribuované algoritmy jsou typicky prováděny souběžně. Různě oddělené částmi algoritmu jsou spuštěny současně na samostatných procesorech, které mají omezené informace o tom, co ostatní části algoritmu zrovna dělají. Jedním z hlavních problémů při vývoji a provádění distribuovaných algoritmů je úspěšně koordinovat chování nezávislých částí algoritmu tváří v tvář hrozbě selhání procesoru a nespolehlivého komunikační spojení. Volba vhodného distribuovaného algoritmu pro řešení daného problému tedy závisí na obou hrozbách.
Distribuovaný program je potom takový konkurentní (souběžný) program, který předpisuje, aby procesy komunikovaly výhradně prostřednictvím zasílání zpráv. Název je odvozen od faktu, že program je typicky prováděn v systému s distribuovanou pamětí. Distribuovaným výpočtem pak rozumíme realizaci distribuovaného algoritmu v distribuovaném výpočetním systému. Distribuovaný program implementovaný pomocí zasílání zpráv však může být prováděn i v multiprocesoru se sdílenou pamětí nebo dokonce i v systému s jediným procesorem pracujícím v multitaskingovém režimu
Reference
- KLIMEŠ, Cyril. Distribuované systémy. Texty pro distanční studium.. [s.l.]: Ostravská univerzita v Ostravě Dostupné v archivu pořízeném dne 2014-07-14. Archivováno 14. 7. 2014 na Wayback Machine