Czym jest wirtualizacja? #
Wirtualizacja to tworzenie wirtualnej wersji urządzenia lub zasobu, takiego jak system operacyjny, sieć lub urządzenie pamięci masowej. W kontekście chmury obliczeniowej oznacza to możliwość uruchomienia kilku różnych systemów operacyjnych, na kilku odrębnych maszynach wirtualnych (VM – virtual machine), które działają na jednej lub wielu maszynach fizycznych.
Na przykład, zamiast pięciu różnych komputerów/serwerów możemy uruchomić jedną maszynę fizyczną, na której odpalimy pięć maszyn wirtualnych, każdą z innym systemem operacyjnym.
Zalety i wady wirtualizacji #
Zalety wirtualizacji:
- Pozwala na optymalne wykorzystanie sprzętu (można np. wygasić VM, które obecnie nie są potrzebne, a włączyć inne, które akurat są),
- Pozwala uzyskać wysoką dostępność (VM dostępne cały czas niezależnie od hosta pod spodem),
- Łatwość przywracania (np. z backupu od razu jako gotowa maszyna wirtualna na VMware vCenter),
- Łatwe tworzenie nowych VM (z szablonów, wzorów),
- Możliwość przeniesienia kosztów związanych z utrzymaniem fizycznego sprzętu na kogoś innego,
- Łatwość w skalowaniu serwisów opartych o wirtualizację (stworzenie i dodanie kolejnej VM do klastra),
- Ekologia – mniejsze zużycie prądu przy przeniesieniu zasobów do chmury.
Wady wirtualizacji:
- Duża inwestycja w sprzęt na początku, aby uruchomić infrastrukturę potrzebną dla VM,
- Niższa wydajność aplikacji na VM w porównaniu z taką zainstalowaną bezpośrednio na sprzęcie fizycznym,
- Mogą pojawić się problemy z określeniem licencji dla zwirtualizowanych aplikacji czy serwisów,
Zastosowanie wirtualizacji #
Wirtualizacja znajduje zastosowanie w większości dziedzin, m.in. w takich obszarach, jak:
- Księgowość
- Przetwarzanie danych
- Tworzenie aplikacji (Kubernetes, Docker)
- Sklepy internetowe
- Logistyka
- Media, newsy
- Streaming video / muzyki
- Przechowywanie dokumentów
Rodzaje wirtualizacji #
Istnieją trzy główne rodzaje wirtualizacji:
- Wirtualizacja sprzętowa,
- Wirtualizacja pulpitu,
- Wirtualizacja na poziomie systemu operacyjnego.
Wirtualizacja sprzętowa, czyli podstawa chmury #
Wynikiem wirtualizacji sprzętowej jest maszyna wirtualna, która z punktu widzenia użytkownika działa i wykonuje operacje tak samo jak system zainstalowany na fizycznym sprzęcie. Oprogramowanie zainstalowane na maszynie wirtualnej jest całkowicie niezależne od systemu operacyjnego hypervisora (nadzorcy), czyli oprogramowania, które zarządza maszynami wirtualnymi, dba o ich poprawne działanie i separację.
Istnieją dwa rodzaje wirtualizacji sprzętowej:
- Pełna wirtualizacja
- Parawirtualizacja
Pełna wirtualizacja #
Pełna wirtualizacja pozwala na zainstalowanie dowolnego systemu i oprogramowania na maszynie wirtualnej, bez konieczności wprowadzania jakichkolwiek modyfikacji. Maszyny poddane pełnej wirtualizacji są całkowicie odizolowane od siebie i systemu nadzorcy.
Parawirtualizacja #
Parawirtualizacja działa na innej zasadzie niż wirtualizacja pełna. Wymaga ona modyfikacji jądra systemu operacyjnego maszyny wirtualnej. Instrukcje potencjalnie szkodliwe zamieniane są wtedy na tzw. hypercalle, czyli zapytania idące nie bezpośrednio do sprzętu, ale do warstwy wirtualizacji wystawianej przez nadzorcę. Pozostałe instrukcje wykonywane są bezpośrednio na sprzęcie. System operacyjny maszyny wirtualnej jest świadomy tego, że został poddany wirtualizacji.
Pełnej wirtualizacji może zostać poddany niemalże każdy system operacyjny, ponieważ nie wymaga ona zmian po jego stronie. W parawirtualizacji potrzeba modyfikacji systemu maszyny wirtualnej powoduje, że może być ona zastosowana do znacznie mniejszego podzbioru systemów. Choć jest ona łatwiejsza w implementacji niż pełna translacja binarna 1101, to czy będzie bardziej wydajna zależy do tego, jakie instrukcje są wykonywane najczęściej przez daną maszynę wirtualną.
Wirtualizacja pulpitu #
Wirtualizacja pulpitu ma za zadanie odseparować środowisko pulpitu użytkownika od oprogramowania i aplikacji z niego korzystających. Podstawowym przypadkiem użycia tego rodzaju wirtualizacji jest sytuacja, gdy użytkownik łączy się ze swojego komputera do oddzielnego serwera oprogramowaniem do obsługi zdalnego pulpitu. Dane i działanie aplikacji zostają zachowane po stronie serwera, natomiast logika wyświetlania i organizacji pulpitu (głównie interfejs graficzny) pozostaje po stronie użytkownika – klienta.
Przykładami wirtualizacji pulpitu są:
- Pulpit zdalny korzystający z protokołu RDP do łączenia się z maszynami działającymi w oparciu o system Windows
- Oprogramowanie TeamViewer do pomocy zdalnej
- Protokoły open source używane między innymi w systemach z rodziny Linux, takie jak VNC
Wirtualizacja na poziomie systemu operacyjnego #
Wirtualizacja na poziomie systemu operacyjnego dokonuje wirtualizacji tylko tych elementów systemu, które są niezbędne do działania aplikacji. Aplikacja napisana jest w taki sposób, aby używać całości dostępnych zasobów – poddana konteneryzacji widzi tylko przydzieloną kontenerowi część. Choć podobną izolację można uzyskać za pomocą pełnej wirtualizacji, wirtualizacja na poziomie systemu operacyjnego eliminuje potrzebę wirtualizacji wszystkiego, co nie jest bezpośrednio potrzebne do jej działania.
Ten rodzaj wirtualizacji często utożsamiany jest z konteneryzacją. W systemie operacyjnym można stworzyć wiele kontenerów, z których każdy może zawierać jedną lub więcej odizolowanych aplikacji. Kontener zawiera w sobie tylko to, co jest niezbędne do działania samej aplikacji. Kontenery współdzielą i korzystają z jądra systemu operacyjnego, który je uruchamia, co pozwala na minimalizację spadków wydajności, widocznych przy pełnej wirtualizacji.
Przykłady wykorzystania konteneryzacji to m.in. oprogramowanie Docker czy Kubernetes.