Ilustrovaný Důkaz CAP Teorém
SZP Věta je zásadní věta v distribuovaných systémů, které státy jakýkoliv distribuovaný systém může mít maximálně dvě z těchto tří vlastností.
- konzistence
- dostupnost
- tolerance oddílů
Tato příručka shrnuje specifikaci Gilberta a Lynche a důkaz věty CAP s obrázky!
co je věta CAP?
věta CAP uvádí, že distribuovaný systém nemůže být současně konzistentní, dostupný a tolerantní k oddílům. Zní to dost jednoduše, ale co to znamená být konzistentní? k dispozici? oddíl tolerantní? Sakra, co přesně myslíte distribuovaným systémem?
V této části představíme jednoduchý distribuovaný systém, a vysvětlit, co to znamená pro tento systém k dispozici, v souladu, a oddíl tolerantní. Formální popis systému a tří vlastností naleznete v dokumentu Gilberta a Lynche.
distribuovaný systém
uvažujme o velmi jednoduchém distribuovaném systému. Náš systém se skládá ze dvou serverů, $G_1$ a $G_2$. Oba tyto servery sledují stejnou proměnnou $v$, jejíž hodnota je zpočátku $v_0$. $G_1$ a $G_2$ mohou komunikovat mezi sebou a mohou také komunikovat s externími klienty. Takhle vypadá náš systém.
klient může požádat o zápis a čtení z libovolného serveru. Když server obdrží požadavek, provede všechny výpočty, které chce, a poté odpoví klientovi. Například, zde je to, jak vypadá zápis.
a tady je to, co čtení vypadá.
Teď, že jsme dostali náš systém založen, pojďme na to, co to znamená pro systém musí být konzistentní, k dispozici, a oddíl tolerantní.
konzistence
zde je návod, jak Gilbert a Lynch popisují konzistenci.
žádné operace čtení, které začíná po operaci zápisu dokončí se musí vrátit, že hodnoty, nebo výsledek později psát provoz
V konzistentní systém, jakmile klient zapíše hodnotu na server a dostane odpověď, že očekává, že se dostat, že hodnotu (nebo čerstvější) hodnoty zpět z jakéhokoliv serveru se to čte.
zde je příklad nekonzistentního systému.
Náš klient píše, $v_1$, $G_1$ a $G_1$ uznává, ale když to čte z $G_2$, to bude zastaralé údaje: $v_0$.
na druhé straně je zde příklad konzistentního systému.
V tomto systému, $G_1$ kopíruje její hodnotu na $G_2$ před odesláním potvrzení klienta. Když tedy klient čte z $G_2$, získá nejaktuálnější hodnotu $v$: $v_1$.
dostupnost
zde je návod, jak Gilbert a Lynch popisují dostupnost.
každou žádost, kterou obdrží non-selhání uzlu v systému musí vyústit v reakci
k dispozici V systému, pokud náš klient odešle požadavek na server a server má nehavarované, pak server se nakonec musí reagovat na klienta. Server nesmí ignorovat požadavky klienta.
tolerance oddílů
zde je návod, jak Gilbert a Lynch popisují oddíly.
síť bude umožněno přijít libovolně mnoho zpráv odeslaných z jednoho uzlu do druhého.
To znamená, že všechny zprávy, $G_1$ a $G_2$ posílat jeden druhému může být zrušen. Pokud by byly všechny zprávy zrušeny, náš systém by vypadal takto.
náš systém musí být schopen správně fungovat i přes libovolné síťové oddíly, aby byl tolerantní k oddílům.
Důkaz
Teď, když jsme seznámili se s pojmem konzistence, dostupnost, a partition tolerance, můžeme dokázat, že systém nemůže zároveň mít všechny tři.
Předpokládejme pro rozpor, že existuje systém, který je konzistentní, dostupný a tolerantní k oddílům. První věc, kterou uděláme, je rozdělit náš systém. Vypadá to takto.
dále máme požadavek klienta, aby $v_1$ byl zapsán na $G_1$. Vzhledem k tomu, náš systém je k dispozici, $G_1$ musí reagovat. Vzhledem k tomu, že síť je rozdělena, $G_1$ nemůže replikovat svá data na $G_2$. Gilbert a Lynch nazývají tuto fázi provádění $ \ alpha_1$.
dále máme náš klient vydat read request na $G_2$. Znovu, protože náš systém je k dispozici, $G_2$ musí reagovat. A protože síť je rozdělena, $G_2$ nemůže aktualizovat svou hodnotu z $G_1$. Vrací $v_0$. Gilbert a Lynch nazývají tuto fázi provádění $ \ alpha_2$.
$G_2$ vrací $v_0$ našemu klientovi poté, co klient již napsal $v_1$ na $G_1$. To je nekonzistentní.
Jsme předpokládali, že konzistentní, k dispozici, oddíl tolerantní systém existoval, ale jen jsme ukázali, že existuje provedení pro jakýkoli takový systém, ve kterém systém působí nekonzistentně. Žádný takový systém tedy neexistuje.