Kontejnerizace


Dnes kolem sebe slýcháváme plno populárních slov, jako jsou Docker, kontejnerizace, Kubernetes nebo microservices. Co to všechno 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.