¨

CAP teorém

CAP teorém poprvé formuloval informatik Eric Brewer v roce 2000. Teoreticky dokazuje, že distribuovaná databáze (běžící na více uzlech/serverech naráz) nemůže současně zaručit Konzistenci, Dostupnost a Odolnost vůči rozdělení.

Tento princip je naprosto zásadní při návrhu moderních cloudových aplikací a výběru databázových technologií (SQL vs. NoSQL).

Tři pilíře CAP

Název je akronymem pro tři vlastnosti:

C - Consistency (Konzistence): Každé čtení z libovolného uzlu vrátí nejaktuálnější zápis. Všichni klienti vidí ve stejný okamžik stejná data, bez ohledu na to, ke kterému serveru jsou připojeni.

A - Availability (Dostupnost): Každý požadavek na systém obdrží odpověď (o úspěchu či selhání), i když jsou některé uzly v síti nedostupné. Systém je vždy „v provozu“.

P - Partition Tolerance (Odolnost vůči rozdělení): Systém pokračuje v práci i v případě, že dojde k přerušení komunikace mezi servery (tzv. network partition).

Proč nelze mít všechno?

V distribuovaném světě je Partition Tolerance (P) nutností – sítě nejsou stoprocentně spolehlivé. Pokud nastane rozdělení sítě (servery spolu nemluví), musíme si vybrat:

1. **CP (Consistency + Partition Tolerance):** Zvolíme konzistenci. Pokud servery nemohou synchronizovat data, systém raději odmítne požadavek (stane se nedostupným), aby předešel zobrazení neaktuálních dat.
2. **AP (Availability + Partition Tolerance):** Zvolíme dostupnost. Systém odpoví uživateli daty, která má aktuálně k dispozici, i když riskuje, že nejsou nejnovější, protože synchronizace s ostatními uzly selhala.

Poznámka: Kombinace CA (Konzistence + Dostupnost) je možná pouze v systémech, které nejsou distribuované (běží na jednom stroji), protože tam nemůže nastat rozdělení sítě.

Praktické příklady a databáze

Výběr mezi těmito vlastnostmi definuje charakter konkrétních databázových systémů:

Typ	Priorita	Příklady	Vhodné pro
CP	Konzistence	MongoDB, Redis, Google Spanner	Bankovní systémy, inventury.
AP	Dostupnost	Cassandra, DynamoDB, CouchDB	Sociální sítě, komentáře, nákupní košíky.
CA	Bez sítě	Tradiční RDBMS (MySQL, PostgreSQL)	Aplikace běžící na jednom serveru.

Moderní pohled: PACELC

Protože k rozdělení sítě (P) nedochází neustále, byl CAP teorém rozšířen o model PACELC. Ten říká: Pokud nastane rozdělení (Partition), volíme mezi Dostupností (Availability) a Konzistencí (Consistency). Else (jinak, v běžném stavu), volíme mezi Latencí (Latency) a Konzistencí (Consistency).

Tento model lépe vystihuje realitu, kde se často obětuje trocha konzistence pro bleskovou rychlost odezvy (nízkou latenci), i když síť funguje perfektně.

Související pojmy: Distribuované systémy, Databáze, SQL, NoSQL, Latence, Caching, Cloud Computing.