“Distribuovaný systém je soubor nezávislých počítačů (uzlů), které se uživatelům jeví jako jeden jediný systém.”
- Tanenbaum
Spolupráce: Uzly samy o sobě úkol nezvládnou (nebo by to trvalo dlouho). Musí si práci rozdělit.
Middleware: Aby to fungovalo, existuje softwarová vrstva (nad operačním systémem, ale pod aplikací), která řeší, že data jsou jinde, pády uzlů a formátování zpráv. Bez middlewaru je to jen síť počítačů, ne distribuovaný systém.
Message Passing: Protože nemáme sdílenou paměť, veškerá synchronizace a výměna dat se děje posíláním jedniček a nul po drátě.
Proč implementovat distribuovaný systém.
“Distribuovaný systém je takový systém, kde selhání počítače, o kterém jste ani nevěděli, že existuje, může způsobit nefunkčnost vašeho vlastního počítače.”
- Leslie Lamport
[!note] Chceme se obecně vyhnout centralizovaným věcem Tedy globálním hodinám, centralizovaným uzlům, myšlence že všechny uzly mají přístup ke všem informacím
[!important] U návrhu distribuovaného systému by se mělo předejít předpokladům že:
- Síť je spolehlivá,zabezpečená, homogenní, má nulovou latenci a neomezenou kapacitu
- Topologie se nemění
- Je jeden administrátor
Zde definujeme logické uspořádání komponent a jejich role.
V distribuovaných systémech má stavovost zásadní význam, protože stav není soustředěn na jednom místě, ale je rozprostřen mezi více uzly, které spolu komunikují přes síť. To přináší nové problémy, které v lokálním systému vůbec neexistují.
Spolehlivost distribuovaného systému popisuje, nakolik lze systému důvěřovat, že bude dlouhodobě poskytovat správnou službu navzdory chybám, poruchám a nepředvídatelným podmínkám prostředí.
V distribuovaných systémech chybí sdílená paměť a globální hodiny. To vede k nutnosti explicitní koordinace procesů. Řešíme dva hlavní okruhy problémů:
Distribuovaná sdílená paměť je softwarová vrstva (middleware), která umožňuje procesům na různých uzlech přistupovat k datům tak, jako by byly v jedné společné RAM, přestože ve skutečnosti probíhá pod kapotou posílání zpráv (message passing).
Tato sekce řeší, jak efektivně využívat hardware (CPU, paměť) napříč celým systémem.