Konteneryzacja


Dzisiaj słyszymy wokół nas wiele popularnych słów, takich jak Docker, kontenery, Kubernetes czy microservices (mikrousługi). Co oznaczają te wszystkie pojęcia?

Kontener to działająca aplikacja wraz ze wszystkim, czego potrzebuje do uruchomienia. Zawiera kod aplikacji wraz ze środowiskiem wykonawczym i bibliotekami systemowymi, dzięki czemu można go uruchomić w dowolnym miejscu.

Docker to środowisko kontenerowe. Dzięki niemu możemy tworzyć, uruchamiać i przenosić kontenery, jak również nimi zarządzać.

Kubernetes to instrument do orkiestracji. Pozwala nam podłączyć kilka serwerów do Dockera, aby działały jak „jeden duży Docker”, dodając do nich wiele ciekawych funkcji.

Mikrousługi to rodzaj architektury aplikacji, w której częściowe funkcjonalności aplikacji są podzielone na niezależne aplikacje, często obsługiwane w kontenerach.

Dlaczego powinienem korzystać z tych technologii? Jakie problemy rozwiązują? W czym oddadzą nam przysługę?

Chociaż wielu programistów nie powie tego głośno, lewa kolumna często odzwierciedla rzeczywisty stan tworzonych aplikacji. Prawa kolumna to idealny stan, który powinien zostać osiągnięty przy tworzeniu aplikacji.

Problemy wielu aplikacji:

  • Długie utrzymanie aplikacji (min. 15 lat), powolne lub wręcz niemożliwe zmiany
  • Jeden błąd może unieruchomić całą aplikację i jest trudny do znalezienia
  • Aktualizacje systemu operacyjnego lub środowiska mogą niekorzystnie wpływać na działanie aplikacji
  • Skalowanie w górę - jeden duży serwer
  • Deweloper musi pracować nad kwestią wzajemnej kompatybilności środowisk, w których działają aplikacje
  • Musimy mieć specjalnie przystosowane środowisko lub kod na każdym komputerze
  • Jeden zespół, który musi współpracować na wszystkich etapach
  • Skomplikowana dokumentacja lub brak dokumentacji - skomplikowane szkolenie nowego programisty
  • Kula śnieżna - nawarstwiające się funkcje
  • Narzucone technologie i ich wersje
  • Podczas aktualizacji należy zmodyfikować całą aplikację
  • W przypadku deploymentu wersji równoległej niezbędny jest nowy serwer
 

Stan, który chcemy osiągnąć:

  • Szybkie i interaktywne zmiany, wdrażanie nowych funkcji i technologii
  • Błąd wpłynie tylko na jedną małą część, a reszta aplikacji działa bez problemu
  • Kontenery zapewniają spójne środowisko nawet po aktualizacjach
  • Skalowanie w górę - dodajemy kontenery
  • Nie musi nas interesować, gdzie aplikacja będzie działać, zawsze będzie kompatybilna ze środowiskiem użytkownika
  • Kontener będzie taki sam na wszystkich urządzeniach, jego zachowanie również
  • Poszczególne zespoły/programiści
  • Podaplikacje są proste, można je szybko zrozumieć - szybka nauka
  • Możliwe rewolucje w poszczególnych aplikacjach
  • Wolność wyboru, każda część może korzystać z własnej technologii i ich wersji niezależnie
  • Podczas wdrażania wersji równoległej wystarczy nowy kontener
  • Efektywne gospodarowanie zasobami i redukcja kosztów

Czy ma to w ogóle jakieś wady?

Tak, przejście z tradycyjnych środowisk programistycznych na te nowoczesne trendy będzie od Ciebie wymagać wysiłku, ale z przyjemnością Ci w tym pomożemy.

Schemat — trójwarstwowa aplikacja monolityczna na maszynie fizycznej lub trójwarstwowa aplikacja kontenerowa VPS x w architekturze microservices.