Počnimo s naivnom definicijom "apatridije", a zatim polako napredujmo do rigoroznijeg i stvarnijeg pogleda.
Aplikacija bez državljanstva je ona koja ne ovisi o postojanoj pohrani. Jedino za što je odgovoran vaš klaster je kôd i ostali statički sadržaji koji su na njemu hostirani. To je to, nema mijenjanja baza podataka, nema upisa i nema preostalih datoteka kada se mahuna briše.
Aplikacija sa statusom, s druge strane, ima nekoliko drugih parametara na koje bi trebala paziti u klasteru. Postoje dinamičke baze podataka koje se, čak i kad je aplikacija izvan mreže ili se briše, zadržavaju na disku. Na distribuiranom sustavu, poput Kubernetesa, ovo postavlja nekoliko problema. Detaljno ćemo ih razmotriti, ali prvo razjasnimo neke zablude.
Usluge bez državljanstva zapravo nisu 'apatrid'
Što znači kad kažemo stanje sustava? Pa, razmotrimo sljedeći jednostavan primjer automatskih vrata.
Vrata se otvaraju kad senzor prepozna nekoga tko se približava i zatvaraju se kad senzor ne dobije odgovarajući ulaz.
U praksi je vaša aplikacija bez državljanstva slična ovom gore navedenom mehanizmu. Može imati mnogo više stanja nego samo zatvorena ili otvorena, i mnogo različitih vrsta unosa, što ga čini složenijim, ali u osnovi istim.
Komplicirane probleme može riješiti samo primanjem unosa i izvođenjem radnji koje ovise i o ulazu i o stanju u kojem se nalazi. Broj mogućih stanja je unaprijed definiran.
Dakle, apatridnost je pogrešan naziv.
Aplikacije bez državljanstva u praksi također mogu malo varati spremajući detalje o, recimo, klijentovim sesijama na samog klijenta (HTTP kolačići su sjajan primjer), a i dalje imaju lijepo apatridstvo zbog čega će besprijekorno raditi na klasteru.
Na primjer, detalji klijentove sesije, poput proizvoda koji su spremljeni u košaricu, a nisu odjavljeni, mogu se pohraniti na klijentu i sljedeći put kada sesija započne s tim se relevantnim detaljima prisjeća.
Na Kubernetesovom klasteru aplikacija bez državljanstva nije povezana s trajnom pohranom ili volumenom. Iz operativne perspektive, ovo je sjajna vijest. Različite mahune diljem klastera mogu raditi neovisno s više zahtjeva koji im istovremeno dolaze. Ako nešto pođe po zlu, možete jednostavno ponovno pokrenuti aplikaciju i vratit će se u početno stanje s malo zastoja.
Usluge sa statusom države i CAP teorem
S druge strane, državne službe morat će se brinuti zbog puno, puno rubnih slučajeva i čudnih problema. Pod je popraćen s najmanje jednim volumenom i ako su podaci u tom volumenu oštećeni, to se nastavlja čak i ako se cijeli klaster ponovno pokrene.
Na primjer, ako izvodite bazu podataka na klasteru Kubernetes, sve mahune moraju imati lokalni volumen za spremanje baze podataka. Svi podaci moraju biti u savršenoj sinkronizaciji.
Dakle, ako netko izmijeni unos u bazu podataka, a to je učinjeno na pod A, a zahtjev za čitanje dođe na pod B da vidi te izmijenjene podatke, tada pod B mora prikazati te najnovije podatke ili vam poslati poruku o pogrešci. To je poznato kao dosljednost.
Dosljednost, u kontekstu Kubernetesove skupine, znači svako čitanje prima najnovije upisivanje ili poruku o pogrešci.
Ali ovo rezanje protiv dostupnost, jedan od najvažnijih razloga za distribuirani sustav. Dostupnost podrazumijeva da vaša aplikacija funkcionira što je moguće bliže savršenstvu, danonoćno, uz što manje pogrešaka.
Može se tvrditi da sve ovo možete izbjeći ako imate samo jednu centraliziranu bazu podataka koja je odgovorna za rješavanje svih trajnih potreba za pohranom. Sad smo se vratili na jednu točku neuspjeha, što je još jedan problem koji bi Kubernetesovi klasteri uopće trebali riješiti.
Morate imati decentraliziran način spremanja trajnih podataka u klasteru. Obično se naziva mrežnom particijom. Štoviše, vaš klaster mora biti sposoban preživjeti neuspjeh čvorova koji izvode aplikaciju sa statusom. Ovo je poznato kao tolerancija particije.
Bilo koja usluga (ili aplikacija) s statusom koja se izvodi na Kubernetesovom klasteru mora imati ravnotežu između ova tri parametra. U industriji je poznat kao CAP teorem gdje se uzimaju u obzir kompromisi između dosljednosti i dostupnosti u prisutnosti mrežne particije.
Daljnje reference
Za daljnji uvid u CAP teorem možda biste željeli pogledati ovaj izvrstan govor Bryana Cantrilla, koji mnogo bliže proučava pokretanje distribuiranih sustava u proizvodnji.