Kontejnerizace
Dnes kolem sebe slýcháváme plno populárních slov, jako jsou Docker, kontejnerizace, Kubernetes nebo microservices. Co všechny tyto pojmy znamenají?
Kontejner je spuštěná aplikace spolu se vším, co k běhu potřebuje. Obsahuje tedy kód aplikace spolu s běhovým prostředím a systémovými knihovnami, aby mohl být spuštěn kdekoliv.
Docker je kontejnerizační prostředí. Díky němu můžeme kontejnery vytvářet, spouštět, spravovat a přenášet.
Kubernetes je orchestrační nástroj. Umožňuje nám spojit několik serverů s Dockerem, aby se chovaly jako “jeden velký Docker” a přidá k nim mnoho zajímavých funkcí.
Microservices je druh architektury aplikací, kdy jsou dílčí funkcionality aplikace rozděleny do nezávislých aplikací, často provozovaných v kontejnerech.
Proč tyto technologie používat? Jaké problémy řeší?
Ač si to mnoho vývojářů nechce připustit, tak levý sloupec častokrát odráží reálný stav vyvíjených aplikací. V pravém sloupci je ideální stav, jak by vývoj aplikace měl vypadat.
Problémy mnoha aplikací
- Dlouhé udržování aplikace (min 15 let), pomalé nebo i nemožné změny.
- Jedna chyba může znehybnit celou aplikaci a těžko se hledá.
- Aktualizace OS nebo prostředí mohou negativně ovlivnit chod aplikace.
- Škálování nahoru — jeden velký server.
- Vývojář musí řešit vzájemnou kompatibilitu prostředí, ve kterých aplikace běží.
- Na každém stroji musíme mít speciálně uzpůsobené prostředí nebo kód.
- Jeden tým, který musí ve všech krocích kooperovat.
- Složitá nebo žádná dokumentace — složité zaučení nového programátora.
- Sněhová koule — nabalující se funkce.
- Pevně dané technologie a její verze.
- Při aktualizaci se musí upravit celá aplikace.
- Při deploymentu paralelní verze je třeba nový server.
Stav, který chceme
- Rychlé a interaktivní změny, nasazování nových funkcí i technologií.
- Chyba shodí jen jednu malou část a zbytek aplikace funguje bez problému.
- Kontejnerizace zaručuje konzistentní prostředí i po aktualizacích.
- Škálování ven - přidáváme kontejnerizaci.
- Nezajímá nás, kde aplikace běží, bude vždy kompatibilní s uživatelským prostředím.
- Kontejner bude na všech zařízeních stejný a jeho chování také.
- Samostatné týmy/vývojáři.
- Dílčí aplikace jsou jednoduché a to i na pochopení — rychlé zaučení.
- Možné revoluce u jednotlivých aplikací.
- Svoboda ve volbě, každá část může používat vlastní technologie a jejich verze nezávisle.
- Při nasazení paralelní verze stačí nový kontejner.
- Efektivní využití zdrojů a snížení nákladů.
Má to vůbec nějaké nevýhody?
Ano, přechod z tradičních vývojových prostředí k těmto moderním trendům Vás bude stát určité úsilí, rádi Vám s tím pomůžeme.
Schéma — trojvrstvá monolitická aplikace na fyzickém stroji či VPS x kontejner trojvrstvé aplikace v architektuře microservices.