Wdrożenia IT

Wdrożenia IT

Przeważnie wdrażanie systemów informatycznych powinno być wspierane przez odpowiednią dokumentację oraz specjalistyczne oprogramowanie. Istnieje wiele specjalistycznych narzędzi do służących do śledzenia błędów (np. Git) oraz mechanizmy zarządzania projektami (np.: PRINCE2). Bez wątpienia istotnym elementem jest infrastruktura teleinformatyczna w tym zakresie oraz zagadnienia związane z chmurą obliczeniową tzw. cloudem.

Chmury, poza wspólną cechą, jaką jest ekstremalna wydajność i dostępność zasobów mocy obliczeniowej na żądanie, są od siebie różne. Istnieją różne technologie wirtualizacji (np.: VMware, KVM, Microsoft Hyper-V), model świadczenia usługi: chmurę publiczną, prywatną czy hybrydową, a także zdecydować o poziomie wsparcia z zewnątrz

Coraz częściej podmioty decydują się na oferty Centrów Danych lub korzystają z chmur globalnych, takie jak Microsoft Azure i Azure Stack oraz AWS.

Wiele polskich firm bazuje jeszcze na tradycyjnych rozwiązaniach, tj. kolokacja, serwery dedykowane. Mimo to powoli, lecz konsekwentnie testują rozwiązania chmurowe.

Potrzeba rozwojowa jest niebywale duża i współpraca z biznesem jest niezbędna.

W ramach zdobycia powyższych kompetencji można wskazać następujące programy szkoleniowe poprzez indywidualne programy realizowane przez doświadczonych praktyków i akredytowanych Trenerów :

  • Microsoft (Data Services, Azure, Excel VBA)
  • Narzędzia Atlassian (JIRA, Confluence)
  • Inne szkolenia technologiczne (Java, SQL, Bazy Danych, Python, Linux itp.)

Era wdrożeń tradycyjnych: 

Początkowo aplikacje uruchamiane były na fizycznych serwerach. Nie było możliwości separowania zasobów poszczególnych aplikacji, co prowadziło do problemów z alokacją zasobów. Przykładowo, kiedy wiele aplikacji jest uruchomionych na jednym fizycznym serwerze, część tych aplikacji może zużyć większość dostępnych zasobów, powodując spowolnienie działania innych. Rozwiązaniem tego problemu mogło być uruchamianie każdej aplikacji na osobnej maszynie. Niestety, takie podejście ograniczało skalowanie, ponieważ większość zasobów nie była w pełni wykorzystywana, a utrzymanie wielu fizycznych maszyn było kosztowne.

Era wdrożeń w środowiskach wirtualnych:

Jako rozwiązanie zaproponowano wirtualizację, która umożliwiała uruchamianie wielu maszyn wirtualnych (VM) na jednym procesorze fizycznego serwera. Wirtualizacja pozwalała izolować aplikacje pomiędzy maszynami wirtualnymi i osiągnąć pewien poziom bezpieczeństwa, jako że informacje związane z jedną aplikacją nie były w łatwy sposób dostępne dla pozostałych.

Wirtualizacja pozwala lepiej wykorzystywać zasoby fizycznego serwera i lepiej skalować, ponieważ aplikacje mogą być łatwo dodawane oraz aktualizowane, pozwala ograniczyć koszty sprzętu oraz ma wiele innych zalet. Za pomocą wirtualizacji można udostępnić wybrane zasoby fizyczne jako klaster maszyn wirtualnych „wielokrotnego użytku”.

Każda maszyna wirtualna jest pełną maszyną zawierającą własny system operacyjny pracujący na zwirtualizowanej warstwie sprzętowej.

Era wdrożeń w kontenerach: 

Kontenery działają w sposób zbliżony do maszyn wirtualnych, ale mają mniejszy stopnień wzajemnej izolacji, współdzieląc ten sam system operacyjny. Kontenery określane są mianem „lekkich”. Podobnie, jak maszyna wirtualna, kontener posiada własny system plików, udział w zasobach procesora, pamięć, przestrzeń procesów itd. Ponieważ kontenery nie są związane z leżącymi poniżej warstwami infrastruktury, mogą być łatwiej przenoszone pomiędzy chmurami i różnymi dystrybucjami systemu operacyjnego.

Zdecydowaną przewagą Docker’a nad wirtualizacją jest możliwość uruchomienia aplikacji w wydzielonym kontenerze, ale bez konieczności emulowania całej warstwy sprzętowej i systemu operacyjnego. Docker uruchamia w kontenerze tylko i wyłącznie proces(y) aplikacji i nic więcej. Efektem jest większa efektywność wykorzystania zasobów sprzętowych, co przy rozproszonych aplikacjach instalowanych do tej pory na kilkunastu bądź kilkudziesięciu wirtualnych maszynach przynosi konkretne oszczędności.

Docker zastępuje wirtualizację przez stosowanie czegoś co nazywa się konteneryzacją. Konteneryzacja polega na tym, że umożliwia uruchomienie wskazanych procesów aplikacji w wydzielonych kontenerach, które z punktu widzenia aplikacji są odrębnymi instancjami środowiska uruchomieniowego. Każdy kontener posiada wydzielony obszar pamięci, odrębny interface sieciowy z własnym prywatnym adresem IP oraz wydzielony obszar na dysku, na którym znajduje się zainstalowany obraz systemu operacyjnego i wszystkich zależności / bibliotek potrzebnych do działania aplikacji.

Przykładowo uruchamiając aplikację Java na Apache Tomcat, to obraz kontenera zawiera zainstalowany system operacyjny (pewnie jakieś Ubuntu lub CentOS), zainstalowaną maszynę Java oraz Apache Tomcat i paczkę WAR z aplikacją. Jedynym uruchomionym procesem staje się wtedy wirtualna maszyna Javy z Tomcat’em i dedykowaną aplikacją.

Kontenery Docker’a działają niezależnie od siebie i do chwili, w której świadomie wskażemy zależność pomiędzy nimi, nic o sobie nie wiedzą. Jeśli przykładowo chcemy dla naszej aplikacji uruchomić bazę danych, to jest taka możliwość i polega to na tym, że uruchamiamy kolejny kontener z bazą i tworzymy połączenie sieciowe pomiędzy kontenerami.

Zmorą każdego programisty jest tworzenie środowiska deweloperskiego na potrzeby każdego kolejnego projektu. Wiadomo, że każdy projekt będzie działać na innej bazie danych, innym kontenerze aplikacji z inną listą dodatkowych usług, które do czasu pojawienia się narzędzi typu Vagrant instalowane były bezpośrednio na laptopie programisty. Utrzymanie kilku środowisk dla wielu projektów bywało niemożliwe. Vagrant w pewien sposób rozwiązuje ten problem przez tworzenie wirtualnego środowiska instalowanego za pomocą odpowiednich skryptów, ale to rozwiązanie nie rozwiązuje wszystkich problemów: nadal napisać skrypty instalujące wszystkie zależności, no i potrzebny jest mocny sprzęt żeby udźwignął pełne środowisko w trybie wirtualizacji. Kilka takich środowisk na laptopie może też skutecznie zająć całą przestrzeń dyskową.

Z pomocą przychodzi Docker, który pozwala zbudować środowisko deweloperskie bez wirtualizacji i przy odrobinie szczęścia bez większego wysiłku związanego z instalacją oprogramowania. Docker pozwala wykorzystywać gotowe obrazy zainstalowanych systemów, aplikacji i baz danych, które zostały wcześniej przygotowane i umieszczone w publicznym rejestrze – https://hub.docker.com/explore/. Dzięki temu, jeśli jest potrzeba używania PostgreSQL, Redis czy RubyOnRails albo Wildfly, jest duża szansa na to, że gotowy obraz będzie można pobrać z repozytorium i nie tracić czasu na jego przygotowanie. Można również zbudować własny obraz bazując na jednym z bardziej generycznych zawierających tylko zainstalowany system operacyjny (Ubuntu, Fedora, itp…) lub zainstalowane środowisko uruchomieniowe (Java, Python czy ASP.NET).

Widać więc wyraźnie, że środowisko deweloperskie można zbudować z gotowych obrazów zawierających zainstalowane kontenery i usługi. Mechanizm budowana obrazów kontenerów możemy wykorzystać w drugą stronę i dostarczać nasze konkretne aplikacje w postaci obrazów. Bez względu na technologię wykorzystaną w aplikacji, obraz kontenera będzie dostarczany w identyczny sposób co upraszcza procedury instalacyjne. W zasadzie każda instalacja może ograniczyć się do pobrania wskazanych obrazów na środowisko docelowe i ich uruchomienie. Administratorzy środowisk nie muszą być nawet do końca świadomi co uruchamiają, a przy odrobinie szczęścia sam proces dostarczania aplikacji może zostać zautomatyzowany przez odpowiednie narzędzia.

Na koniec najważniejsze: Docker działa tylko na jądrze Linux i pozwala uruchamiać tylko aplikacje przeznaczone dla Linux’a, ale dla wszystkich użytkowników Windows i Mac jest przygotowane narzędzie Docker Toolbox, które pozwala zainstalować Docker’a w minimalnej maszynie wirtualnej pod kontrolą VirtualBox’a.

Jeśli ktoś chciałby spróbować Docker’a bez instalacji, jest taka możliwość: wszyscy najważniejsi dostawcy chmury publicznej oferują już gotowe maszyny wirtualne z preinstalowanym Docker’em. Amazon AWS, Azure i DigitalOcean są tego najlepszym przykładem.

kontakt@e-detect.pl tel.:+48 791 910 931