Kubernetes

Stavové a bezstavové aplikácie na serveri Kubernetes

Stavové a bezstavové aplikácie na serveri Kubernetes
dôležitým kritériom, ktoré je potrebné zvážiť pred spustením novej aplikácie v produkcii, je základná architektúra aplikácie. V tejto súvislosti sa často používa pojem, že aplikácia je „bez štátnej príslušnosti“ alebo že je „stavová“. Oba typy majú svoje vlastné výhody a nevýhody. Keď budeme hovoriť o aplikácii alebo službe bežiacej v produkcii, budeme mať v pozadí klaster Kubernetes. Môžete si nainštalovať vlastný klaster Kubernetes do cloudu alebo ho môžete nechať spustiť ako jeden uzol vo svojom počítači, aby ste si s ním mohli vyskúšať.

Začnime s naivnou definíciou „bez štátnej príslušnosti“ a potom pomaly pokračujme k dôslednejšiemu a skutočnejšiemu pohľadu.

Bezstavová aplikácia je aplikácia, ktorá závisí od nepretržitého ukladania. Jediná vec, za ktorú je zodpovedný váš klaster, je kód a ďalší statický obsah, ktorý je na ňom hostený. To je všetko, žiadne zmeny v databázach, žiadne zápisy a žiadne zvyšky súborov po odstránení modulu.

Stavová aplikácia má na druhej strane niekoľko ďalších parametrov, o ktoré sa má v klastri starať. Existujú dynamické databázy, ktoré na disku pretrvávajú, aj keď je aplikácia offline alebo odstránená. V distribuovanom systéme, ako je Kubernetes, to vyvoláva niekoľko problémov. Pozrime sa na ne podrobne, najskôr si však objasnime niektoré mylné predstavy.

Služby bez štátnej príslušnosti nie sú v skutočnosti „bez štátnej príslušnosti“

Čo to znamená, keď hovoríme o stave systému? Pozrime sa na nasledujúci jednoduchý príklad automatických dverí.

Dvere sa otvoria, keď senzor zistí, že sa niekto blíži, a zatvoria sa, keď senzor nedostane žiadny relevantný vstup.

V praxi je vaša aplikácia bez štátnej príslušnosti podobná vyššie uvedenému mechanizmu. Môže mať oveľa viac stavov, ako je iba uzavretý alebo otvorený, a tiež veľa rôznych typov vstupu, čo ho robí zložitejším, ale v podstate rovnakým.

Môže vyriešiť komplikované problémy iba prijatím vstupu a vykonaním akcií, ktoré závisia od vstupu aj od „stavu“, v ktorom sa nachádza. Počet možných stavov je preddefinovaný.

Bez štátnej príslušnosti je teda nesprávne pomenovanie.

Aplikácie bez štátnej príslušnosti môžu v praxi tiež trochu podvádzať ukladaním podrobností napríklad o reláciách klienta na samotnom klientovi (skvelým príkladom sú súbory cookie HTTP) a stále majú peknú bezstavovosť, vďaka ktorej by mohli bezchybne bežať v klastri.

Napríklad podrobnosti o relácii klienta, napríklad to, aké produkty boli uložené v košíku a neboli odhlásené, je možné uložiť všetky na klienta a pri ďalšom spustení relácie sa tieto príslušné podrobnosti tiež pamätajú.

V klastri Kubernetes nemá bezstavová aplikácia spojené žiadne trvalé úložisko alebo zväzok. Z prevádzkového hľadiska je to skvelá správa. Rôzne pody v celom klastri môžu pracovať nezávisle s viacerými požiadavkami, ktoré na ne prichádzajú súčasne. Ak sa niečo pokazí, stačí reštartovať aplikáciu a vráti sa do pôvodného stavu s malými prestojmi.

Stavové služby a veta o SPP

Stavové služby sa na druhej strane budú musieť starať o veľa a veľa okrajových prípadov a podivných problémov. Pod modul je sprevádzaný najmenej jedným zväzkom a ak sú údaje v tomto zväzku poškodené, potom pretrvávajú, aj keď sa reštartuje celý klaster.

Napríklad ak spúšťate databázu v klastri Kubernetes, všetky pody musia mať lokálny zväzok na uloženie databázy. Všetky údaje musia byť v dokonalej synchronizácii.

Takže ak niekto upraví záznam do databázy, a to bolo urobené v priečinku A, a v priečinku B sa zobrazí požiadavka na čítanie, aby sa tieto upravené údaje zobrazili, musí modul B zobraziť tieto najnovšie údaje alebo zobraziť chybové hlásenie. Toto sa nazýva konzistencia.

Dôslednosť, v kontexte klastra Kubernetes znamená každé prečítanie prijme posledný zápis alebo chybovú správu.

Ale toto škrie proti dostupnosť, jedným z najdôležitejších dôvodov existencie distribuovaného systému. Dostupnosť znamená, že vaša aplikácia funguje čo najbližšie k dokonalosti, ako je to možné, nepretržite a s čo najmenšou chybou.

Niekto môže namietať, že sa tomu všetkému môžete vyhnúť, ak máte iba jednu centralizovanú databázu, ktorá je zodpovedná za zvládnutie všetkých pretrvávajúcich potrieb ukladania. Teraz sa vraciame k jedinému bodu zlyhania, čo je ďalší problém, ktorý by mali klastre Kubernetes v prvom rade vyriešiť.

Musíte mať decentralizovaný spôsob ukladania trvalých údajov v klastri. Bežne sa označuje ako sieťové rozdelenie. Okrem toho musí byť váš klaster schopný prežiť zlyhanie uzlov, na ktorých je spustená stavová aplikácia. Toto je známe ako tolerancia priečok.

Akákoľvek stavová služba (alebo aplikácia), ktorá sa spúšťa v klastri Kubernetes, musí mať rovnováhu medzi týmito tromi parametrami. V priemysle je známa ako veta CAP, kde sa kompromisy medzi konzistenciou a dostupnosťou zvažujú za prítomnosti sieťového rozdelenia.

Ďalšie odkazy

Pre ďalší pohľad na teóriu CAP si môžete prečítať túto vynikajúcu prednášku Bryana Cantrilla, ktorý sa oveľa bližšie zameriava na fungovanie distribuovaných systémov vo výrobe.

Hry Ako používať AutoKey na automatizáciu hier pre Linux
Ako používať AutoKey na automatizáciu hier pre Linux
AutoKey je obslužný program na automatizáciu stolných počítačov pre systémy Linux a X11, programovaný v programoch Python 3, GTK a Qt. Pomocou jeho fu...
Hry Ako zobraziť počítadlo FPS v hrách Linux
Ako zobraziť počítadlo FPS v hrách Linux
Hranie na systéme Linux získalo veľký tlak, keď spoločnosť Valve v roku 2012 oznámila podporu systému Linux pre klienta Steam a ich hry. Od tej doby s...
Hry Ako sťahovať a prehrávať Sid Meier's Civilization VI v systéme Linux
Ako sťahovať a prehrávať Sid Meier's Civilization VI v systéme Linux
Úvod do hry Civilization 6 predstavuje moderné poňatie klasického konceptu predstaveného v sérii hier Age of Empires. Myšlienka bola dosť jednoduchá; ...