Zarządzanie tożsamością i dostępem użytkownika, czyli o co chodzi z IDP?
Czym jest tożsamość użytkownika? Z czego wynika potrzeba zarządzania dostępem w firmie? Jak działa tzw. IDP? Odpowiedź na te pytania znajdziesz w artykule.
Dzisiaj opowiemy wam, czym właściwie jest wirtualizacja, jakie są jej rodzaje oraz przedstawimy wam informacje o dobrych zasadach projektowych zaproponowanych przez firmę Redhat w 2017 roku, które dotyczą kontenerów wdrażanych w środowiskach orkiestracyjnych, w tym chmurowych. Bardzo podobne zasady obserwujemy w całym świecie informatyki, w tym w programowaniu np. DRY, KISS czy zasady SOLID. Jeśli chcesz przeczytać o czystym kodzie, to zachęcamy do zapoznania się z naszą serią dotyczącą Clean Code.
Aby zrozumieć na czym polega wirtualizacja w systemach operacyjnych należy wyjaśnić podstawowe pojęcie dotyczące tego zagadnienia – hypervisor, inaczej hipernadzorca. Jest to komponent oprogramowania, który umożliwia tworzenie i zarządzanie maszynami wirtualnymi (VM) na fizycznej maszynie. Hipernadzorca znajduje się pomiędzy fizycznym sprzętem (hardware) a maszynami wirtualnymi i umożliwia równoczesne uruchamianie wielu systemów operacyjnych na pojedynczej maszynie.
Istnieją dwa podstawowe rodzaje hypervisorów:
Type 1 Hypervisor (Bare Metal Hypervisor) – spotykany częściej w rozwiązaniach serwerowych, w tym w centrach danych. Działa on bezpośrednio na fizycznym sprzęcie, bez potrzeby hostującego systemu operacyjnego. Ma bezpośredni dostęp do zasobów sprzętowych. Przykładami oprogramowania działającymi w ten sposób są np. Microsoft Hyper-V, Citrix XenServer oraz VMware ESXi.
Type 2 Hypervisor (Hosted Hypervisor) – spotykany częściej na komputerach użytkowników. Działa on na hostującym systemie operacyjnym (host OS). Polega na nim w celu zarządzania zasobami sprzętowymi, a także dostarcza dodatkową warstwę abstrakcji. Przykładami oprogramowania działającymi w ten sposób są: VMware Workstation, Oracle VirtualBox i Parallels Desktop.
Rysunek 1 – architektura typu 2 kontra typu 1, źródło vgyan.in
Wirtualizacja jest powszechną techniką w informatyce, która polega na tworzeniu instancji sprzętu lub oprogramowania na jednym fizycznym systemie komputerowym. Inaczej mówiąc chodzi o symulowanie istnienia zasobów logicznych, które korzystają pod spodem z komponentów fizycznych. Celem wirtualizacji jest efektywne wykorzystanie zasobów sprzętowych oraz umożliwienie izolacji różnych środowisk i aplikacji, co może prowadzić do poprawy wydajności, bezpieczeństwa oraz ułatwiać zarządzanie. Istnieją różne podziały wirtualizacji jak np. parawirtualizacja oraz pełna wirtualizacja.
W podejściu pełnej wirtualizacji hypervisor pełni replikuje hardware. Główną korzyścią tej metody jest zdolność do uruchamiania oryginalnego systemu operacyjnego bez żadnych modyfikacji. W trakcie pełnej wirtualizacji system operacyjny gościa pozostaje całkowicie nieświadomy faktu, że jest zwirtualizowany. To podejście korzysta zarówno z takiej techniki jak wykonanie bezpośrednie (mniej kluczowe komendy korzystają z kernela z pominięciem hypervisora) jak i z translacji binarnej, czyli tłumaczenia komend. W rezultacie zwykłe instrukcje CPU są wykonywane bezpośrednio, podczas gdy bardziej wrażliwe instrukcje CPU są dynamicznie tłumaczone. Aby poprawić wydajność, hypervisor może przechowywać w pamięci podręcznej niedawno przetłumaczone instrukcje.
W parawirtualizacji natomiast, hypervisor nie symuluje podlegającego sprzętu. Zamiast tego dostarcza mechanizm hypercalls. System operacyjny gościa wykorzystuje je do wykonania wrażliwych instrukcji CPU. Ta technika nie jest tak uniwersalna jak pełna wirtualizacja, ponieważ wymaga wykonania modyfikacji w systemie operacyjnym gościa, jednak zapewnia lepszą wydajność. Warto dodać, że system operacyjny gościa zdaje sobie sprawę, że jest zwirtualizowany.
Rysunek 2 – Różnica między wirtualizacją i parawirtualizacją
Konteneryzacja natomiast to rodzaj wirtualizacji na poziomie systemu operacyjnego, gdzie kontenery dzielą się zasobami tego samego systemu operacyjnego, zachowując jednocześnie pewną izolację między sobą. W porównaniu do innych form wirtualizacji, kontenery wprowadzają minimalny narzut (ze względu na współdzielony system hosta), co oznacza, że zużycie dodatkowych zasobów jest znacznie niższe niż w przypadku maszyn wirtualnych. Zasoby mogą być przydzielane i zwalniane w pełni dynamicznie przez system operacyjny hosta. Niestety, separacja kontenerów jest ograniczona w porównaniu do klasycznych rozwiązań wirtualizacyjnych.
Rysunek 3 – Wirtualizacja kontra konteneryzacja, źródło blackmagicboxes.com
Najpopularniejsze sposoby wykorzystania technologii konteneryzacji to:
Rysunek 4 – porównanie kontenera aplikacyjnego, systemowego oraz wirtualnej maszyny, źródło: nestybox
Nested virtualization
Ciekawym rozwiązaniem jest także nested virtualization. Z pomocą kontenerów systemowych lub maszyn wirtualnych możemy wprowadzić dodatkową warstwę abstrakcji. Po prawej możemy zobaczyć architekturę zbudowaną w oparciu o bare-metal (bez host OS), trzy kontenery systemowe oraz Docker Engine.
Rysunek 5 – przykład konteneryzacji oraz zagnieżdżonej wirtualizacji, źródło docker.com
Aplikacje w dzisiejszych czasach można kategoryzować i dzielić ze względu na różne technologie czy architektury wykonania. Jednym z najbardziej jaskrawych i znanych podziałów jest architektura monolityczna kontra mikroserwisowa. Ta druga jest mocno powiązana z kontenerami, gdzie aplikacja jest wdrożona na dziesiątki, a nawet setki czy tysiące kontenerów (Netflix posiada ponad 1000 mikroserwisów). Kontenerami zarządza orkiestrator oraz narzędzia platformy chmurowej na której taka aplikacja jest wdrożona. Takie aplikacje często nazywamy cloud-native ze względu na to, że były projektowane przy założeniu, że będą działać w chmurze. Przewidują więc awarie, działają oraz skalują się w niezawodny sposób, nawet gdy ich podstawowa infrastruktura napotyka na zakłócenia czy awarie.
W celu wsparcia aplikacji cloud-native Redhat w 2017 roku zaproponował zasady dotyczące kontenerów aplikacyjnych, które można porównać choćby do zasad Solid w programowaniu obiektowym. Zasady brzmią następująco:
Wszystkie obrazki dotyczące dobrych zasad zostały zaczerpnięte z dokumentu udostępnionego przez firmę RedHat.
https://dzone.com/whitepapers/principles-of-container-based-application-design
Mamy nadzieję, że w tym wyczerpującym artykule udało nam się przybliżyć Wam tematy związane z konteneryzajcą oraz wirtualizacją. Zachęcamy do zapoznania się także z linkami ze źródeł, które w bardziej szczegółowy sposób tłumaczą omówienie w tym artykule zagadnienia. Jeśli zainteresowała Cię tematyka konteneryzacji polecamy naszą serię artykułów na temat Docker’a.
Źródła:
Zarządzanie tożsamością i dostępem użytkownika, czyli o co chodzi z IDP?
Czym jest tożsamość użytkownika? Z czego wynika potrzeba zarządzania dostępem w firmie? Jak działa tzw. IDP? Odpowiedź na te pytania znajdziesz w artykule.
Bezpieczeństwo
Hej, hej... Programisto, to kolejny artykuł dla Ciebie! Druga część artykułu na temat wzorców projektowych. Poznaj Adapter oraz Memento.
Programowanie
Programisto, to artykuł dla Ciebie! Łap garść przydatnych informacji na temat wzorców projektowych.
Programowanie