Replikace
- Používá se k zajištění dostupnosti, spolehlivosti a odolnosti vůči selhání.
 - Princip spočívá v tom, že určitá část dat nebo služeb je duplikována a tyto kopie jsou umístěny na více uzlech.
 - Cílem replikace:
- minimalizovat dopady chyb,
 - zvýšit dostupnost,
 - zlepšit výkonnost DS.
 
 - Např. Cache-ování, CDN (Content Deliver Network), DNS, …
 
Konzistence
- Problém konzistence je spojen s akcí čtení z různých replik zároveň. Může se stát, že se dostaneme k rozdílným datům (zpoždění, cache, …)
 - Typ konzistence nám říká, jaké data dostaneme při čtení z různých replik.
 
Typy konzistence
- Silná konzistence
- Při čtení z různých replik dostaneme vždy stejná data.
 - Jako kdyby byly změny propagovány okamžitě.
 
 - Kauzální konzistence
- Klade důraz na respektování kauzálních vztahů mezi operacemi.
 - Pokud operace ovlivňuje operaci , pak je třeba zajistit, aby byla provedena dříve než ().
 - Je slabší jak silná konzistence, ale silnější než sekvenční.
 
 - Sekvenční konzistence
- Některé repliky mohou být pozadu, ale změny jsou stále ve stejném pořadí.
 - To vyvolává však problém, že při sekvenční konzistenci klient může číst nejprve od uzlu, který je aktuální a následně od uzly, který je pozadu.
 
 - Eventuální konzistence
- Připouští dočasnou nesrovnalost mezi replikami dat
 - avšak zároveň zaručuje, že v konečném důsledku budou všechny repliky dosahovat konzistence.
 - Typické cache-ování.
 - Vhodné například pro počítání návštěvníků.
 
 
Replikace za pomocí Raft algoritmu
- Zahrnuje vytvoření replik a řízení jejich stavu a replikačních operací.
 - Raft je algoritmus pro dosažení shody mezi uzly v systému ohledně stavu nebo hodnoty.
 
Postup:
- Zvolí se lídr.
 - Klient zasílá požadavky na provedení operace lídrovi.
 - Každý uzel udržuje svůj log (seznam operací, které mají být vykonány, …).
 - Lídr třídí požadavky do svého logu a pošle tuto informaci ostatním uzlům.
 - Pokud lídr obdrží potvrzení od většiny, provede operaci a pošle informaci ostatním uzlům. Ti poté provedou operaci.
 
- Logy jednotlivých uzlů nemusí být stejné. Musí řešit lídr:
- Kromě operace je zaslán index logu.
 - Pokud je nějaký index přeskočen je ohlášeno lídrovi.
 - Lídr udržuje informace o dalším indexu každého uzlu, pokud dojde k překročení, sníží index a pošle opět data (pokud je stále přeskočený, situace se opakuje).
 
 
Problém při volbě lídra
- Může být zvolen lídr s neaktuálním logem.
 - Při volbě uzel hlasuje pro kandidáta pouze pokud je log kandidáta aktuálnější (nebo stejně aktuální) jak jeho vlastní.
 - Aktuálnost je měřena volebním obdobím (pozdější vyhrává) a délkou logu (delší vyhrává)
 - Lídr NIKDY nepřepisuje svůj log, pouze přidává.
 
Chain replikace
- Máme řetězec uzlů, první je head a poslední tail.
 - Head obstarává zápis a tail čtení.
 
Postup:
- Head přijme požadavek a předá sousedovi (všechny uzly si ukládají zprávu do logu).
 - Zpráva se dostane až k tail a poté její potvrzení cestuje zpátky k head (zpráva se provádí).
 
- 
Je silně konzistentní.
 - 
Existuje samostatný (centrální) uzel dedikovaný na správu řetězce (jak se zachovat při výpadu, atd.) server
 - 
Může selhat až uzlů, při délce řetězce .
- Pokud selže head uzel je nahrazen svým následníkem.
 - Pokud selže tail uzel je nahrazen svým předchůdcem.
 - Pokud selže mezilehlý uzel propojení sousedních.
 
 - 
Problém, když selže centrální uzel (server), musíme jej také replikovat.
 - 
Zásadní rozdíl oproti replikací s volbou lídra:
- Všechny uzly mají k dispozici replikovaná data.
 - Tail může poskytnout data pro čtení bez nutnosti kontaktovat ostatní uzly.
 - Latence (jeden pomalý uzel zpomalí celý řetězec).
 
 - 
Možnost povolení čtení na mezilehlých uzlech oslabí silnou konzistenci na sekvenční.
- Mezilehlé uzly udržují více verzí dat (dirty a clean).
 - Při propagaci k tail označeno dirty, při propagaci k head označeno jako clean.
 - Při požadavku na čtení je poslána clean verze dat, nebo je kontaktován tail s dotazem na poslední potvrzenou verzi.
 
 
CAP a PACELC teorém
CAP teorém
- Síťovým problémům se nedá vyhnout.
 - Když nastane rozpad (P) můžeme zachovat:
- dostupnost (Availability),
 - konzistenci (Consistency).
 - Nelze zachovat obojí.
 
 
- Rozšířením CAP teorému získáme PACELC.
 
PACELC teorém
- Pokud (tolerance rozdělení na části), pak výběr mezi (dostupnost) a (konzistence), jinak (else) výběr mezi (latence) a (konzistence).
 - Doplňuje CAP teorém tím, že zohledňuje nejen situaci, kdy dochází k výpadku sítě (partition tolerance), ale také situace bez výpadků, kdy musí být upřednostněna buď latence (Latency), nebo konzistence (Consistency)
 
CALM teorém
- Zaměřuje se na souvislost mezi konzistencí dat a monotonií logických formulí v DS.
 - Tvrdí, že DS, který udržuje monotónní růst logických formulí, bude dosahovat nějaké formy konzistence bez nutnosti používat silně konzistentní mechanismy.
 
Monotonie
- Monotónní operace jsou takové, které nemění svůj výsledek v závislosti na počtu opakování nebo načítání (např. sjednocení).
 - Pokud jsou operace monotónní, pak se jejich aplikací opakovaně nebo v různém pořadí nedojde k narušení konzistence dat.
 
*Navíc z hodin s panem doktorem Trnečkou.
Poznámky
- Shodu lze implementovat pomocí replikace.
 - Shoda obecně vyžaduje broadcast/multicast protokol, který garantuje pořadí operací.
 - Typy broadcast/multicast protokolů:
- Best-effort - uzel pošle zprávu všem ostatním, pokud neselže, jsou zprávy doručeny všem uzlům.
 - Reliable - každý proces přeposílá obdrženou zprávu, když ji obdrží poprvbé, fungující uzly obdrží zprávu.
 - Gossip - náhodné přeposílání.
 
 
Odbočka: Distribuce obsahu
- Obecně je potřeba popsat, jak vypadá aktualizace dat
- Pouze notifikace, že došlo ke změně
- Výhoda: menší zátěž
 - Používá se pokud je mnoho update a málo read (může být proveden update několikrát bez čtení = zbytečné).
 
 - Přenesení celých dat
- Nevýhoda: pomalé
 - Výhodné pokud je často read)
 
 - Operace, která má být vykonána
- Vyžaduje výpočetní výkon na replikách
 
 
 - Pouze notifikace, že došlo ke změně
 
Odbočka: Protokoly
- Push
- Aktualizace je propagována k replikám, aniž by se ptali
 - Vyžaduje evidenci replik
 
 - Pull
- Aktualizace je propagována na dotaz klienta
 - Může dojít k přetížení hlavní repliky
 
 - Kompromis
- Push v pravidelných intervalech
 - Pokud není proveden, klient provede pull
 
 
Odbočka: Detekce selhání
- 
Řešíme dva body:
- Úplnost
 - Přesnost
 
 - 
Úplnost
- Silná: Každý chybný uzel je detekován každým funkčním uzlem.
 - Slabá: Každý chybný uzel je detekován alespoň jedním funkčním uzlem.
 
 - 
Přesnost
- Silná: Žádný funkční uzel není označen jako chybný
 - Slabá: Alespoň jeden funkční uzel není označen jako chybný