Google Compute Engine – wirtualne maszyny od Google

Światowy gigant internetowy systematycznie rozbudowuje portfolio swoich usług, także tych dedykowanych dla twórców oprogramowania i właścicieli serwisów internetowych. W ramach Google Cloud Platform pozwala na elastyczny wybór pomiędzy rozwiązaniami infrastrukturalnymi i platforomowymi a także ch skalowanie. Wraz z ogłoszeniem dostępności Google Compute Engine firma wkracza do konkurencji z Amazonem, Microsoftem i VMware o klientów usług IaaS. Czy jej produkt jest gotowy przystąpić do walki o ten rynek?

Konkurencja na rynku dostawców usług IaaS (Infrastructure as a Service) i PaaS (Platform as a Service) jest coraz większa, możliwości rynku dostrzegają od dawna internetowi potentaci. Wejście Google na ten rynek, na którym od dawna obecny jest Amazon a także Microsoft czy od niedawna także VMware jest bardzo ważnym wydarzeniem. Do gry wchodzi gracz, który do tej pory nie działał na rynku udostępniania infrastruktury ale nie można powiedzieć, że na infrastrukturze się nie zna – wręcz przeciwne.

Google od lat wspiera deweloperów, oferując na przykład szereg mechanizmów API czy utrzymując wiele projektów open source. Teraz przyszedł czas na udostępnienie ogromnych zasobów i doświadczenia w dziedzinie infrastruktury. Doświadczenie to wynika z hostingu największych internetowych zbiorów danych i najpopularniejszych internetowych aplikacji – wyszukiwarki, systemu reklamowego czy map. Imponuje także liczba ponad 6 miliardów godzin filmów YouTube czy ponad 400 milionów kont pocztowych Gmail. Wydaje się, że takie doświadczenie musi przełożyć się na dobry produkt służący do hostingu innych projektów.

Firma postanowiła spróbować sił na jeszcze innym polu monetyzacji swoich zasobów. Po wielu miesiącach testów wersji wstępnej - Preview wraz z końcem roku 2013 ogłoszono komercyjną dostępność finalnej wersji Google Compute Engine, która to jest elementem całościowej oferty rozwiązań Google w chmurze publicznej nazywanej Google Cloud Platform. Google Cloud Platform stanowi obecnie rozwiązanie w trzech dziedzinach: Moc obliczeniowa – Compute (Compute Engine, App Engine), Pamięć masowa – Storage (Cloud SQL, Cloud Storage, Cloud Datastore), Big Data (Big Query).

Wirtualne maszyny na miarę

W skład rozwiązań w zakresie zasobów obliczeniowych Google Cloud Platform wchodzą Compute Engine oraz App Engine. Compute Engine usługa pozwala na wynajęcie wirtualnej maszyny w kilki różnych planach konfiguracyjnych: Standard (od 1 do 16 core, od 3.75 do 60 GB RAM), High Memory (od 2 do 16 core, od 13 do 104 GB RAM), High CPU (od 2 do 16 core, od 1,80 do 14,40 GB RAM). Maszyny High Memory przeznaczone są dla użytkowników wymagających większych niż standardowo obszarów pamięci operacyjnej, maszyny High CPU z kolei zostały skonfigurowane dla aplikacji wymagających więcej mocy procesora w stosunku do dostępnego obszaru pamięci RAM.

Do najmniejszych zastosowań przygotowano typ maszyn nazwany Shared Core, ze współdzielonym, pojedynczym core. Są one dostępne w dwóch odmianach – micro wyposażonej w 0,60 GB RAM oraz small z pamięcią 1,70 GB. Takie maszyny mogą przydać się do hostowania niewielkich projektów, albo tych, które największych ruch mają już za sobą, ale muszą pozostać online jeszcze przez jakiś czas. Na maszynę mikro można więc zmigrować z poziomu wyższych konfiguracji, jeśli nie będzie nam już potrzebna duża moc obliczeniowa czy pamięć.

Na wirtualnych maszynach uruchomimy dowolny system operacyjny z rodziny Linux oraz FreeBSD i ... na tym lista się kończy. Dla miłośników Windows i technologii webowych Microsoft dyskwalifikuje to wykorzystanie platformy Googla. Zarówno Windows Azure jak i Amazon oferują obsługę zarówno maszyn Linux jak i Windows. W przypadku chmury Microsoft maszyny mają także niezależną od systemu cenę.

W wersji Preview, Compute Engine obsługiwało tylko dwie najpopularniejsze dystrybucje – Debian i CentOS bazujące na specyficznym kernelu zbudowanym przez Google. Ograniczenie to zostało zniesione w finalnej wersji platformy. Obecnie można uruchamiać dowolną dystrybucję z dowolnym kernelem. Google ogłosiło także pełne wsparcie dla komercyjnych dystrybucji, takich jak Red Hat Enterprise Linux oraz SuSE.

Wraz z udostępnieniem produkcyjnym Google Compute Engine poinformowano także o wparciu dla narzędzia Docker. Zdobywające coraz większą popularność rozwiązanie służy do budowy kontenerów wirtualnych maszyn z dowolnej aplikacji. Dzięki temu deweloperzy mogą stworzyć i przetestować aplikację na laptopie a następnie przenieść cały kontener z aplikacją na serwer produkcyjny.

Okres rozliczeniowy i ceny

W odróżnieniu od innych usług tego typu, gdzie minimalnym okresem rozliczeniowym jest 1 godzina w przypadku Google Compute Engine jest to 10 minut. Zastanawiająca jest aż tak duża dokładność, ale jeśli dzięki temu możemy zaoszczędzić choć kilka dolarów należy ją pochwalić. W finalnej wersji zrezygnowano z oferowania dysków w cenie maszyny, dlatego pełną kalkulację kosztów stanowi suma abonamentu za maszynę i za dysk oraz usługi dodatkowe. Ekstra zapłacimy m.in. za: przesłane dane, równoważenie obciążenia, przekierowanie protokołów, dodatkowe adresy IP i przechowywanie obrazów maszyn.

Migracja na żywo i automatyczny restart maszyn

Na platformie wirtualnych maszyn Google obsługiwana jest migracja maszyn na żywo w sytuacji, gdy infrastruktura poddawana jest operacjom konserwacji i utrzymania. Google nazywa ten mechanizm transparentnym utrzymaniem, podczas którego mechanizmy wirtualizacji przenoszą maszyny na inne, nie objęte pracami konserwacyjnymi serwery, co zapobiega przestojom. Dodatkowo wprowadzono funkcję automatycznego restartu wirtualnych maszyn w razie awarii – programowej lub sprzętowej albo jako zaplanowane zdarzenie. W panelu administracyjnym usługi można skonfigurować tę funkcję w polu automaticRestart. Ustawienie nie jest uwzględniane, jeśli maszyna została wyłączona na skutek akcji użytkownika takiej jak np. sudo shutdown. Kiedy Compute Engine automatycznie resetuje instancję maszyny, publikuje zdarzenie systemowe zapisywane w liście operacji wykonanych w strefie. Listę tę można podejrzeć za pomocą konsoli Google Developers Console albo za pomocą zapytania API.

Zasoby dyskowe

Zasoby typu Persistent Disk zapewniają przestrzeń dyskową dla instancji wirtualnych maszyn. Persistent Disk zawiera główny system plików, z którego uruchamiana jest maszyna. Można stworzyć także dodatkowe dyski do przechowywania danych. Jeden Persistent Disk może być używany przez wiele instancji maszyn. Także pojedyncza maszyna może mieć podłączonych wiele dysków. Zanim utworzymy wirtualną maszynę należy przygotować dla niej dysk – w panelu webowym podpowiadane domyślnie jest utworzenie nowego dysku.

Czas życia dysku jest niezależny od maszyny. Dyski tworzy się z reguły dla strefy a nie dla pojedynczych instancji. Co ważne, tego typu dyski mogą być używane tylko przez maszyny ulokowane w tej samej strefie. Aby wykorzystać w maszynie dysk, który nie jest dyskiem systemowym należy go sformatować (jeśli do tej pory nie był sformatowany) oraz zamontować. W przypadku podłączania dysku systemowego nie jest to konieczne – Compute Engine zrobi to za nas.

Osoby, które przykładają dużą wagę do bezpieczeństwa danych, szczególnie w aspekcie chmury publicznej, którą Google Compute Engine jest, z pewnością zainteresuje, że dane na dyskach Persistent Disk są szyfrowane. Wykorzystywany jest do tego algorytm AES-128. Szyfrowanie następuje zanim dane opuszczą wirtualną maszynę i dotrą na dysk. Integralność danych zapewniania jest przez algorytm HMAC. Szyfrowanie uruchamianie jest automatycznie.

Wydajność dysków zależy od ich rozmiaru i wzrasta wraz z nim aż do limitu, który wyznacza maksimum dostępne dla pojedynczej maszyny wirtualnej. Należy wziąć to pod uwagę – najmniejsze dyski polecane są głównie tylko do rozruchu systemu. Gdy potrzebujemy pamięci masowej o wysokiej wydajności powinniśmy wybrać większy rozmiar dysku. Dla przykładu wolumin o rozmiarze 50 GB osiąga szybkość odczytu 15 IOPS (Input/Output Operations Per Secons – operacji wejścia/wyjścia na sekundę) , a wolumin 500 GB jest 10-krotnie szybszy – 150 IOPS. Przy zapisie różnica jest także 10-krotna – 50 GB dysk – 75 IOPS, 500 GB dysk – 750 IOPS. Wirtualne maszyny komunikują się z dyskami przy pomocy interfejsu SCSI. Cena za dysk o pojemności 100 GB w ramach Google Compute Engine to około 4 dolary miesięcznie.

Równoważenie obciążenia

Wykorzystanie rozbudowanej architektury, którą oferuje operator daje możliwości konfiguracji zaawansowanych struktur maszyn w prosty sposób z poziomu konsoli zarządzania wirtualnymi maszynami. Jedną z częściej wykorzystywanych funkcjonalności w przypadku np. serwisów internetowych o dużej oglądalności i wymaganiach odnośnie dostępności jest równoważenie obciążenia (load balancing).

Google Compute Engine obsługuje load balancing po stronie serwera, dzięki czemu można rozkładać przychodzący ruch sieciowy pomiędzy wiele maszyn wirtualnych. Równoważenie obciążenia jest korzystnie z dwóch powodów - pozwala na obsłużenie dużego ruchu oraz zapewnia redundancję na wypadek awarii.

W ramach platformy Googla możemy tworzyć obiekty reguł przekierowania, które dopasowują się do określonych typów ruchu i prowadzą go do load balancera. Obiekt docelowej puli kontroluje zachowanie load balancera i zawiera zbiór instancji maszyn, do których ruch ma być przekazywany. Pule docelowe posiadają obiekt monitorowania statusu, aby określać stan instancji w odpowiedniej puli docelowej.

Przykładowo, reguła przekazywania może dopasowywać się do ruchu TCP na porcie 80 na publicznym adresie IP: 1.2.3.4. Każdy ruch, który spełnia te kryteria jest dostarczany do odpowiednich instancji wirtualnych maszyn i puli docelowej połączonej z regułą przekazywania.

Pula docelowa zawiera zbiór instancji wirtualnych maszyn, które obsługują przychodzące żądania od reguły przekazywania. Google Compute Engine przekierowuje każdy ruch reprezentowany przez IP i port serwowany przez regułę przekierowującą do instancji w określonych pulach docelowych. Ruch jest następnie dystrybuowany pomiędzy wszystkimi instancjami w puli docelowej. Pula docelowa może zawierać tylko wirtualne maszyny z tego samego regionu i musi to być także region wspólny dla wszystkich reguł przekierowania do niego się odnoszących. Dodatkowo, aby wprowadzić zabezpieczenie przed planowanymi lub nieplanowanymi wyłączeniami w strefach, można połączyć pule docelowe w różne strefy z pojedynczą regułą przekierowującą.

Dostęp do zasobów Google Compute Engine

Podstawowym sposobem zarządzania zasobami wykupionymi w ramach Google Compute Engine jest linia komend oraz konsola Compute Engine.

Panel webowy w porównaniu z konkurencją posiada analogiczną funkcjonalność – trudno w tym względzie o wskazanie większych przewag, może oprócz jednej – w porównaniu z Windows Azure ładuje się po prostu szybciej w przeglądarce, przez co obsługa wirtualnych zasobów jest wygodniejsza. Wygląd panelu utrzymany jest w ascetycznym „googlowym” układzie graficznym.

Istotną alternatywą jest interfejs linii komend, z poziomu którego możemy wykonać szereg czynności administracyjnych. W tym wypadku porównaniu z możliwościami, które daje wykorzystanie PowerShell w Azure, rozwiązanie Googla sporo ustępuje narzędziom Microsoft.

Jeśli powyższe narzędzia okażą się niewystarczające, można dodatkowo wykorzystać mechanizmy dostępne przez API i na przykład na ich bazie stworzyć własną aplikację do zarządzania wirtualną infrastrukturą albo skorzystać z gotowych aplikacji, które na jego bazie powstały lub powstaną. Podobne aplikacje np. do zarządzania zasobami dyskowymi powstały już np. dla rozwiązań Amazona czy Microsoft.

Strefy i regiony Google Compute Engine

Każdy region Google Compute Engine składa się pewnej liczby stref. Region oznacza geograficzne położenie, w którym znajdują się zasoby. Przy uruchamianiu usługi należy wybrać najbardziej odpowiedni dla naszej aplikacji region. Najlepiej będzie, jeśli wybierzemy region najbliższym użytkownikom naszej aplikacji. Dostępna jest na razie jeden region europejski oraz dwa w Stanach Zjednoczonych.

Strefa to odizolowana lokalizacja w ramach regionu, która pracuje niezależnie od pozostałych stref w tym samym regionie. Strefy zostały przewidziane dla aplikacji, którym stawiane są wymagania wysokiej dostępności (high availability). Strefy są przygotowane do pracy w trybie fault-tolerant, dzięki czemu można rozłożyć instancje, zasoby dyskowe i inne pomiędzy wieloma strefami. Można dowolnie dystrybuować maszyny pomiędzy wieloma strefami w jednym regionie a także pomiędzy wieloma regionami i wieloma strefami. W ten sposób elastycznie zbudujemy wymaganą infrastrukturę na wymaganym poziomie wydajności w danym regionie oraz odpowiednio zabezpieczoną poprzez replikację geograficzną (pomiędzy regionami) i infrastrukturalną (pomiędzy strefami).

Pełna platforma?

Wraz z oficjalnym uruchomieniem Compute Engine z końcem ubiegłego roku Google uzupełniło swoją platformę chmurową o bardzo ważny element – ofertę infrastruktury jako usługi. Konkurencyjne ceny, obniżone o 10 proc. w stosunku do wersji Preview oraz wysokie parametry usługi mogą przekonać wielu klientów. W wyborze utwierdzi ich także dostępność takich rozwiązań jak migracja na żywo, transparent maintenance czy równoważenie obciążenia. Do usługi jednak na pewno na razie nie przekonają się administratorzy i deweloperzy Windows, ze względu na zupełny brak obsługi tej platformy systemowej. To właśnie obsługi innych systemów operacyjnych oprócz Linuksa najbardziej brakuje w nowej usłudze Google. Warto na koniec wspomnieć o ogromniej przewadze Compute Enigne – czas uruchamiania nowej maszyny to kilkadziesiąt sekund.


TOP 200