Konzistence popisuje jak moc mají různé uzly stejný (nebo kompatibilní) pohled na data a stav systému.
Problém zajištění konzistence vzniká jako přímý a nevyhnutelný důsledek replikace.
Konzistence není binární (ano/ne), ale je to spektrum. Můžeme mít stav, který je:
Výběr toho, “jak moc” konzistentní stav potřebujeme, definují modely konzistence distribuovaného systému.
Model, který se snaží nekonzistenci zcela eliminovat (nebo ji skrýt před uživatelem). Systém garantuje, že všechny uzly vidí ve stejný okamžik stejná data.
Princip: Chová se to jako jeden jediný počítač. Jakmile je operace zápisu potvrzena klientovi, kdokoliv a kdekoliv, kdo si data přečte, musí vidět tuto novou hodnotu.
Model, který akceptuje nekonzistenci výměnou za rychlost a dostupnost. Systém negarantuje, že čtení vrátí nejnovější hodnotu. Může vrátit starou (stale) hodnotu.
Záruka: Systém většinou garantuje pouze to, že se data nakonec sjednotí (pokud přestanou chodit nové zápisy).
Nekonzistence je stav, kdy se data v různých replikách téhož systému liší. Není to nutně chyba, ale přirozená vlastnost distribuovaného systému v čase mezi zápisem a synchronizací.
Definice: Systém je nekonzistentní, pokud čtení stejné datové položky (x) na různých uzlech (N1,N2) vrátí ve stejný okamžik různé hodnoty.
Příčina: Zpoždění sítě (latency). Informace o změně (“Zapsal jsem 5”) cestuje k ostatním uzlům rychlostí sítě, ne okamžitě.
Příklad:
[!warning] Riziko Pokud nekonzistence trvá příliš dlouho nebo není řízena, může vést k logickým chybám (např. výběr peněz z účtu, kde už nejsou, protože bankomat A nevěděl o výběru z bankomatu B).
[!note] Důsledek
- nelze spolehlivě provádět okamžité globální kontroly („všichni hotovo?“)
Stav distribuovaného systému
[! note] Důsledek
- stav se mezi uzly rozchází (inconsistent state)
3. Replikovaný stav
Aby byl distribuovaný systém spolehlivý (když jeden uzel shoří, data nezmizí) a rychlý (data jsou blízko uživatele), musíme data replikovat (kopírovat na více uzlů). Tím implicitně vzniká nekonzistence.
V distribuovaných systémech se tedy nevyhneme s nekonzistencí stavu systému. Perfektní konzistence je nemožná nebo extrémně drahá. Řešením jsou #Modely konzistence.