Bare Metal, wirtualizacja czy kontenery?
10 stycznia 2024
Różne podejścia do budowy systemów serwerowych
W poniższym wpisie postaramy się zwrócić uwagę na najważniejsze różnice pomiędzy rozwiązaniami stosowanymi w ramach infrastruktury serwerowej, takimi jak: Bare Metal (“goły metal”), wirtualizacja (VM, Virtual Machine) oraz konteneryzacja (kontenery, containers).
Bare Metal.
Serwer w postaci fizycznego komputera
Chronologicznie, pierwszym popularnym rozwiązaniem było korzystanie z tzw. Bare Metal, jeśli chodzi o infrastrukturę serwerową.
Bare Metal to popularne określenie występujące w żargonie branżowym oznaczające serwer w postaci fizycznego komputera (np.: hardware + host operating system + (app1 + app2 + My SQL)).
Zalety rozwiązania bare metal
Zaletą rozwiązania typu Bare Metal jest pełna kontrola nad zasobami sprzętowymi serwera. Dla aplikacji wymagających najwyższej wydajności w kontekście sprzętu takie rozwiązanie dawało spory poziom kontroli administratorowi.
Serwery typu Bare Metal są fizycznie odizolowane. Izolacja wnosi korzyść w postaci braku oddziaływania zjawiska tzw. “głośnego sąsiada” (noisy neighbour problem).
Taki problem występuje, gdy jedna z hostowanych na danym serwerze aplikacji wykorzystuje bardzo dużą część zasobów tego serwera (np. 90% network bandwith lub 95% CPU). We wspomnianej sytuacji aplikacje znajdujące się na jednym serwerze fizycznym nie będą negatywnie doświadczały nadmiernej aktywności aplikacji na innym serwerze (np. zużycie procesora).
Izolacja wnosi wysoki poziom bezpieczeństwa. W przypadku omawianego rozwiązania ataki typu “side-channel” nie są możliwe. Ataki side-channel bazują na określonych natywnych dla nowoczesnych procesorów charakterystykach, co pozwala w pewnych okolicznościach uzyskać dostęp z jednej maszyny wirtualnej do drugiej.
Dlatego w pewnych okolicznościach, w ramach narzuconych polityk bezpieczeństwa, rozwiązanie Bare Metal może być brane pod uwagę, jako droga na uzyskanie oczekiwanego efektu.
Wady rozwiązania Bare Metal
Największą wadą rozwiązania Bare Metal jest wysoki poziom kosztów organizacji środowiska serwerowego, jak również wysoki poziom kosztów zarządzania.
Wyraźną trudnością, która związana jest z rozwiązaniami Bare Metal jest duże ograniczenie skalowania infrastruktury serwerowej.
Zakup nowego sprzętu (hardware) wymaga czasu, a wdrożenie serwera nie jest możliwe bez wykwalifikowanej kadry administratorów IT.
Wirtualizacja
Emulacja komputera fizycznego
Wirtualizacja to emulacja komputera fizycznego, pozwalająca na uruchomienie wielu maszyn wirtualnych na pojedynczym serwerze (czyli na jednym serwerze fizycznym). Architektura rozwiązania uwzględnia elementy takie jak: hardware + host operating system + hypervisor + virtual machines.
Hypervisor pozwala na zarządzanie maszynami wirtualnymi, dzięki stworzeniu warstwy abstrakcyjnej pomiędzy hardware (sprzętem), a maszynami wirtualnymi.
Dzięki temu wiele systemów operacyjnych może pracować obok siebie. Każda maszyna wirtualna posiada swój własny system operacyjny, który utrzymuje działanie usług zlokalizowanych na danej maszynie wirtualnej.
W tym miejscu warto wspomnieć o “bare metal hypervisor”, który pozwala na bezpośrednie kontrolowanie sprzętu, bez konieczności polegania na “host operating system”. Architektura rozwiązania uwzględnia elementy: hardware + hypervisor + virtual machines.
Hypervisor ma pełną kontrolę nad sprzętem i uzyskiwana jest dzięki temu wyższa wydajność. Sprzęt wymagany do tego rodzaju wdrożeń jest zwykle droższy.
Technologia wirtualizacji przeszła już długą drogę i doświadczyła etapów rozwoju oraz optymalizacji. Obecnie możemy tworzyć maszyny wirtualne o różnej wielkości w celu dopasowania do wymagań hostowanej usługi.
Począwszy od maszyn z przydzielonymi niewielkimi zasobami (np. tylko kilka corów CPU, kilka GB pamięci RAM), a skończywszy na maszynach high-performance z przydzielonymi setkami corów CPU oraz wieloma TB pamięci RAM.
Zalety maszyn wirtualnych
Jedną z ważnych korzyści płynących z korzystania z wirtualizacji jest redukcja kosztów utrzymania infrastruktury serwerowej.
Zasoby serwerowe są wykorzystywane w wyższym stopniu w stosunku do Bare Metal. Maszyny wirtualne korzystają z jednej platformy sprzętowej (wiele usług na jednym serwerze fizycznym).
Kolejną istotną zaletą jest łatwość skalowania, zarówno pionowego, jak i poziomego.
Dla wybranych maszyn wirtualnych można zmieniać przydzielone zasoby (np. RAM, CPU,), co wnosi elastyczność w zakresie wprowadzania na bieżąco zmian w odniesieniu do potrzeb. Jest to tzw. skalowanie pionowe (zmiana ilości przydzielonych zasobów dla istniejącej maszyny wirtualnej). Skalowanie poziome to łatwość dodawania kolejnych maszyn wirtualnych w odpowiedzi na pojawiające się potrzeby w firmie.
Warto również wspomnieć o ułatwieniu, jakim jest możliwość przeniesienia istniejącej maszyny wirtualnej na inny zestaw sprzętowy, nawet bez wyłączania pracy maszyny wirtualnej (ciągłość dostępu do usługi).
Wady wirtualizacji
Jednym z problemów, który może być wskazany w kontekście wirtualizacji, jest wspomniany wcześniej w tekście problem “głośnego sąsiada” (noisy neighbour).
Pewna wrażliwość na opisane zagadnienie może w wyjątkowych okolicznościach wpływać na wydajność pracy danej aplikacji (danej maszyny wirtualnej).
Maszyny wirtualne działające na danym serwerze fizycznym współdzielą dostępne fizyczne rdzenie CPU.
Wspomina się również o podatności na ataki wykorzystujące podatności ukryte w procesorach, czyli ataki side-channel (przykłady: meltdown lub spectre).
Kontenery
Lekka wersja wirtualizacji
Kontener to lekka i samodzielna paczka zawierająca aplikację wraz z wszystkimi zależnościami (np. biblioteki, framework, runtime, itd.). Architektura rozwiązania zawiera elementy takie jak: hardware + host operating system + container engine + container + container + container…
Uznaje się, że konteneryzacja to lekka wersja wirtualizacji. Podobnie jak przy wirtualizacji, system zwiera serwer fizyczny (hardware) wraz z systemem operacyjnym (host operating system).
Jednak zamiast wirtualizacji z wykorzystaniem hypervisora, realizowana jest wirtualizacja systemu operacyjnego za pomocą dedykowanego oprogramowania określanego mianem container engine.
Zalety kontenerów
Dzięki container engine możemy uruchomić wiele kontenerów (containers), które stanowią osobne, odizolowane środowiska dla aplikacji.
Container engine pozwala na szybkie zapewnianie zasobów potrzebnych do działania aplikacji. Co ważne, zasoby niezbędne do działania danej aplikacji są zestawione razem, dzięki czemu aplikacja może działać wszędzie.
Kontenery są skalowalne oraz mobilne. Uznaje się, że kontenery są lekkie i wymagają mniej zasobów do działania w porównaniu do maszyn wirtualnych. Innymi słowy, porównując w prosty sposób, dany serwer fizyczny może pomieścić więcej kontenerów niż maszyn wirtualnych.
Ze względu na to, że dany kontener pracuje jako natywny proces systemu operacyjnego (host operating system), uzyskiwana jest możliwość szybszego uruchomienia.
To wszystko ma wpływ na łatwość wdrożenia oraz utrzymania kontenerów, nawet przy większej skali infrastruktury serwerowej.
Wady kontenerów
Można uznać, że kontenery są potencjalnie mniej bezpieczne ze względu na współdzielenie tego samego systemu operacyjnego w architekturze systemu.
Izolacja kontenerów zależna jest zatem od elementów podstawowych na poziomie wspomnianego systemu operacyjnego. To powoduje możliwość wystawienia środowiska na większą liczbę podatności zależnych od bezpieczeństwa systemu operacyjnego.
Kontener wewnątrz maszyny wirtualnej
W odniesieniu do wspomnianych wyżej kwestii bezpieczeństwa, jest możliwość, by uruchomić kontenery wewnątrz maszyny wirtualnej.
Zmniejszamy wówczas liczbę dostępnych płaszczyzn ataków. Bezpieczeństwo wzrasta kosztem elastyczności, co pokazuje jak ważnym zagadnieniem jest kompromis w kontekście nowoczesnego planowania i utrzymywania infrastruktury serwerowej w firmie.