Szybszy development aplikacji z App Engine w Google Cloud Platform

29/03/2021

Google App Engine artykuł

Głowa pełna pomysłów, a doba za krótka? Niezależnie od tego, czy hobbystycznie programujesz po godzinach, tworzysz swój startup, czy przełożony poprosił Cię o szybkie stworzenie Proof of Concept, powinieneś poznać App Engine. To usługa chmurowa, która pozwoli Ci skupić się na tworzeniu kodu, automatyzując większość obowiązków związanych z obsługą infrastruktury.

Google App Engine ebook wprowadzenie i tutoriale

Co to jest Google App Engine?

App Engine jest jedną z najpopularniejszych usług chmury Google Cloud Platform. To bezserwerowa, w pełni zarządzana platforma developerska do wdrażania i hostowania aplikacji webowych oraz backendów aplikacji mobilnych stworzonych w niemal dowolnej technologii.

Rozłóżmy tę rozbudowaną definicję na części pierwsze:

  • bezserwerowa serverless oznacza, że nie musimy utrzymywać własnych maszyn fizycznych, ponieważ o ich kondycję dba dostawca usług, a my “wynajmujemy” od niego zasoby; wszystkie usługi chmurowe są bezserwerowe,
  • w pełni zarządzana platforma developerska – App Engine jest usługą w modelu Platform-as-a-Service (PaaS); jako twórcy aplikacji nie musimy zaprzątać sobie głowy konfiguracją maszyny wirtualnej, skalowaniem, load balancingiem czy zarządzaniem bazą danych, ponieważ obsługa tych obszarów jest zautomatyzowana,
  • do wdrażania i hostowania – na App Engine możemy deployować aplikacje w okamgnieniu, tak samo jak stosunkowo łatwo i szybko możemy wprowadzać zmiany i dodawać kolejne funkcjonalności; w usłudze można posiadać też kilka wersji aplikacji, by, przykładowo, prowadzić testy A/B,
  • aplikacji webowych oraz backendów aplikacji mobilnych stworzonych w niemal dowolnej technologii – App Engine udostępnia dwa środowiska: standard, obsługujący popularne języki programowania oraz flexible, pozwalający uruchamiać każdy skonteneryzowany kod (o obsługiwanych technologiach i środowiskach App Engine piszemy dalej).

Usługa skaluje się automatycznie w górę, by obsłużyć większe obciążenie, oraz w dół, gdy skończą się skomplikowane obliczenia lub goście opuszczą aplikację. Idzie też za tym elastyczność kosztów, ponieważ te naliczają się w zależności od bieżącego zużycia. Mały ruch oznacza mały rachunek, większy ruch łączy się z proporcjonalnie większą suma na fakturze. Koszty usługi można łatwo śledzić w panelu Billing, a wydajność monitorować dzięki integracji z pakietem narzędzi Operations (wcześniej pod nazwą Stackdriver).

Dwa środowiska w App Engine – standard oraz flexible

Platforma jest przystosowana zarówno do aplikacji monolitycznych, jak i aplikacji w architekturze mikroserwisów. Udostępnia dwa środowiska – standard i flexible. Twórca może deployować i rozwijać aplikację w jednym środowisku lub łączyć zalety obu środowisk App Engine.

Standard dla technologii Python, Java, Node.js, PHP, Ruby i Go

Środowisko standard obsługuje kod źródłowy aplikacji utworzony w następujących wersjach języków programowania:

  • Python 2.7, 3.7, 3.8, 3.9,
  • Java 8, 11,
  • Node.js 8, 10, 12, 14,
  • PHP 5.5, 7.2, 7.3, 7.4,
  • Ruby 2.5, 2.6, 2.7,
  • Go 1.11, 1.12, 1.13, 1.14, 1.15.

Środowisko standard jest polecane aplikacjom, które mogą odnotowywać duże, nagłe wzrosty obciążenia i muszą zachować wysoki poziom skalowania. Skalowanie może odbywać się manualnie lub automatycznie; w przypadku skalowania automatycznego uruchomienie instancji zajmuje sekundy. W dół można skalować liczbę instancji do zera, dzięki czemu nie ponosi się opłat za zużycie, gdy z aplikacji nikt nie korzysta.

Standard wspiera też szybki deployment, ponieważ wdrożenie nowej wersji odbywa się w ciągu kilku sekund.

App Engine posiada bezpłatne limity użycia. Po ich przekroczeniu ponosi się koszt za każdą rozpoczętą godzinę pracy instancji oraz za wychodzący ruch sieciowy. Ceny są uzależnione m.in. od typu maszyny oraz jej lokalizacji.

Flexible dla kontenerów

Środowisko flexible obsłuży kod aplikacji, który:

  • jest stworzony w dowolnej wersji wspieranego języka programowania: Python, Java, Node.js, Go, Ruby, PHP lub .NET,
  • jest utworzony w innym języku programowania, z użyciem dowolnego frameworka czy różnych bibliotek, ale elementy aplikacji znajdują się w kontenerach Docker.

Środowisko flexible sprawdzi się w przypadku aplikacji, które posiadają raczej jednostajne obciążenie, bez nagłych wahań. Aplikacja może się skalować, ale odbywa się to bardziej stopniowo niż w przypadku środowiska standard. Skalowanie może odbywać się manualnie lub automatycznie, a uruchomienie instancji zajmuje kilka minut (w flexible są to sekundy). Minimalna liczba aktywnych instancji to 1.

Deployment w środowisku flexible zajmuje dłużej niż w standard – kilka minut zamiast sekund.

W tym środowisku rozliczenie odbywa się na podstawie użycia vCPU i pamięci RAM w ujęciu godzinowym oraz przestrzeni dyskowej i wychodzącego ruchu sieciowego.

Przykłady użycia Google App Engine

Jako że App Engine jest zarządzaną usługą w modelu PaaS, można oszczędzić dużo czasu dzięki automatyzacjom w obszarze obsługi infrastruktury. To sprawia, że platforma jest popularna m.in. wśród:

  • developerów, którzy hobbystycznie tworzą projekty,
  • startupów technologicznych posiadających ograniczone zasoby,
  • działów R&D firm, gdzie specjaliści tworzą i testują nowe rozwiązania.

Z użyciem usługi można tworzyć i rozwijać aplikacje webowe oraz aplikacje mobilne. Dalej znajdują się przykłady ekosystemów Google Cloud z użyciem platformy App Engine.

Aplikacja webowa

Poniżej został przedstawiony schemat przykładowej architektury aplikacji webowej, korzystającej z ekosystemu Google Cloud Platform z App Engine jako usługą hostującą:

App Engine strona internetowa aplikacja webowa

Do serwowania statycznych treści można użyć:

  • App Engine jako usługę hostowania aplikacji,
  • Cloud CDN do szybkiego pokazywania treści użytkownikom,
  • Cloud Storage do przechowywania plików strony.

Dynamiczne treści można serwować z użyciem:

  • Memcache, czyli usługi pamięci podręcznej App Engine,
  • Task Queues – narzędzia do tworzenia kolejek zadań,
  • bazy danych NoSQL Datastore, która obsługuje kolejki zadań w ramach transakcji.

Do procesowania logów i monitorowania aplikacji możemy użyć:

  • Pub/Sub – usługę asynchronicznego przesyłania informacji, oddzielającą usługi generujące zdarzenia od usług przetwarzających,
  • Dataflow do przetwarzania posiadanych danych,
  • Cloud Storage w celu przechowywania danych i informacji,
  • BigQuery do prowadzenia analizy,
  • Cloud Logging – usługę zarządzania logami i prowadzenia analizy real-time,
  • Cloud Monitoring – panel monitoringu agregujący i przedstawiający informacje dotyczące wydajności, dostępności i kondycji aplikacji i usług.

Backend aplikacji mobilnej

W App Engine można wdrożyć backend aplikacji mobilnej w kontenerach Dockera (dla środowiska flexible) lub backend utworzony w Node.js (pozwala wdrożyć aplikację w środowisku flexible, ale też standard). Usługę można zintegrować z Firebase – czyli platformą dedykowaną tworzeniu, testowaniu i rozwijaniu aplikacji mobilnych.

Niżej znajduje się przykładowa architektura gry mobilnej, korzystającej z App Engine i innych usług Google Cloud:

App Engine aplikacja mobilna backend

Żeby zbudować ekosystem dla backendu gry mobilnej w chmurze Google, możemy wykorzystać usługi:

Do procesowania i analizowania danych wykorzystamy:

  • Pub/Sub do asynchronicznego przesyłania wiadomości w aplikacji,
  • Dataflow do wsadowego i strumieniowego przetwarzania danych,
  • BigQuery do prowadzenia analityki posiadanych informacji.

W celu monitorowania wydajności i kondycji aplikacji oraz środowiska możemy korzystać z:

  • Cloud Monitoring – panelu monitoringu agregującego i przedstawiającego informacje dotyczące wydajności, dostępności i kondycji aplikacji i usług,
  • Cloud Logging – usługę zarządzania logami i prowadzenia analizy real-time,
  • Error Reporting – panel zarządzania błędami wśród funkcjonujących usług, przesyłający informacje o błędach i agregujący niezbędne informacje o awariach, 
  • Cloud Trace – rozproszony system śledzenia, namierzający wąskie gardła wydajności, generujące opóźnienia w przesyle (latency).

Powyższy schemat dotyczy backendu aplikacji mobilnej. Frontend można umieścić w innym projekcie w usłudze App Engine, w Cloud Run, Google Kubernetes Engine, Google Compute Engine lub poza Google Cloud Platform – na przykład na własnym serwerze, hostingu czy w innej chmurze publicznej.

App Engine vs. Compute Engine

Niektórzy, zwracając się w stronę maszyn wirtualnych Google Cloud, wahają się między Compute Engine a App Engine. Czym różnią się te dwie usługi?

Compute Engine

Google Compute Engine (GCE) to usługa maszyn wirtualnych w modelu Infrastructure as a Service – IaaS. W GCE przed wdrożeniem kodu aplikacji należy najpierw samodzielnie utworzyć i skonfigurować instancje, a następnie dbać o utrzymanie infrastruktury. Compute Engine daje szerokie możliwości doboru ustawień maszyn wirtualnych, dzięki czemu można dopasować specyfikację oraz software do konkretnego przypadku użycia.

Sam koszt moc obliczeniowej i pamięci jest niższy w Compute Engine, ale użytkownik musi poświęcić czas na obsługę takich obszarów jak sieć, load balancing czy instalacja i zarządzanie bazami danych.

App Engine

App Engine jest usługą w modelu PaaS (Platform as a Service), gdzie więcej warstw jest zarządzanych przez dostawcę usług, między innymi:

  • system operacyjny maszyn (O/S), 
  • oprogramowanie pośredniczące, umożliwiające komunikację między aplikacjami lub usługami (middleware),
  • środowisko wykonawcze (runtime).

Korzystając z App Engine, nie musimy konfigurować maszyn wirtualnych ani dbać o ich utrzymanie. Wiele procesów jest zarządzanych automatycznie, np. obsługa baz danych czy load balancing.

App Engine pozwala zaoszczędzić dużo czasu i nerwów developerom, którzy nie mają wiedzy z zakresu obsługi infrastruktury lub chcą się skupić jedynie na tworzeniu kodu aplikacji.

Tutaj przeczytasz więcej o chmurze obliczeniowej oraz modelach on-premise, IaaS, PaaS i SaaS.

Compute Engine vs. App Engine

Dla niewielkich aplikacji, które “mieszczą się” w limitach Free Tier, App Engine będzie bezpłatne. Jednak dla bardzo rozbudowanych produktów, które wymagają większych nakładów mocy obliczeniowej, zasoby w App Engine okażą się droższe niż w Compute Engine. App Engine łączy się też z mniejszą elastycznością, ponieważ nie daje możliwości szczegółowej konfiguracji instancji.

Najlepszym rozwiązaniem będzie utworzenie Proof of Concept czy Minimum Viable Product na platformie App Engine, a gdy aplikacja urośnie, przeprowadzenie migracji do usługi Compute Engine.

Więcej o usługach GCP z grupy compute & serverless dowiesz się z niższego wideo:

Ile kosztuje App Engine?

Rozliczenie App Engine różni się w zależności od środowiska.

Środowisko standard

W środowisku standard mamy dostęp do bezpłatnych, odnawialnych limitów w ramach Free Tier. Dopiero po wykorzystaniu bezpłatnych zasobów nalicza się rachunek za zużycie w usłudze. Koszty App Engine obejmują każdą rozpoczętą godzinę pracy instalacji (wysokość uzależniona od rodzaju maszyny oraz lokalizacji) oraz każdy gigabajt wychodzącego ruchu sieciowego.

Dla rejonu europe-west3 we Frankfurcie ceny wyglądają następująco:

  • instancja B1 – 0,06 $ / h
  • instancja B2 – 0,12 $ / h
  • instancja B4 – 0,24 $ / h
  • instancja B4_1G – 0,36 $ / h
  • instancja B8 – 0,48 $ / h
  • instancja F1 – 0,06 $ / h
  • instancja F2 – 0,12 $ / h
  • instancja F4 – 0,24 $ / h
  • instancja F4_1G – 0,36 $ / h
  • wychodzący ruch sieciowy – 0,12 $ / GB (z wykluczeniem ruchu do *.googleapis.com)
  • przychodzący ruch sieciowy – bezpłatnie

Ceny mogą się różnić w zależności od rejonu oraz waluty.

Środowisko flexible

Google Cloud nie oferuje bezpłatnych kredytów dla środowiska flexible

Aplikacje są uruchamiane na wybranych przez nas maszynach wirtualnych, a zużycie jest naliczane w ujęciu sekundowym. Do opłaty za pamięć wliczane są zasoby potrzebne do uruchomienia aplikacji oraz pamięć, którą aplikacja używa podczas pracy.

Ceny za godzinę zużycia w rejonie europe-west3 (Frankfurt) wyglądają następująco:

  • vCPU – 0,063 $ / h / core
  • pamięć RAM – 0,009 $ / h / GB
  • dysk – według cennika Compute Engine; podstawowa opłata to 0,048 $ / miesiąc / GB
  • wychodzący ruch sieciowy – według cennika Compute Engine; od 0,08 do 0,12 $ / GB / miesiąc,
  • przychodzący ruch sieciowy – bezpłatnie

Ceny mogą się różnić w zależności od rejonu oraz waluty.

Oblicz cenę App Engine w kalkulatorze Google Cloud

Dla specyficznego przypadku koszt usługi App Engine w środowiskach standard oraz flexible można obliczyć w kalkulatorze Google Cloud Pricing Calculator.

Zobacz też: Jak płacić mniej za GCP? 10 obszarów, na które powinieneś zwrócić uwagę

App Engine za darmo – Free Tier i voucher 500 $

Google Cloud udostępnia bezpłatne, odnawialne limity dla usługi w środowisku standard. Obejmują one:

  • 28 godzin pracy instancji typu “F” dziennie,
  • 9 godzin pracy instancji typu “B” dziennie,
  • 1 GB wychodzącego ruchu sieciowego dziennie.

Dla środowiska flexible nie ma bezpłatnych limitów. Ale twórcy aplikacji (korzystający z dowolnego środowiska App Engine) mogą liczyć na wsparcie lokalnego Partnera Google Cloud. Fly On The Cloud przyznaje voucher w wysokości 500 $ do wykorzystania na dowolne usługi GCP, w tym na platformie App Engine – i w środowisku standard, i w flexible. Ponadto nawiązując współpracę z Partnerem Google Cloud, możesz liczyć na profesjonalne wsparcie certyfikowanych inżynierów i architektów chmury Google, pomoc w budowie Proof of Concept czy w przeprowadzeniu migracji, jak i bieżącej obsługi usług GCP.

Tutaj znajdziesz więcej informacji o Google Cloud Platform oraz o wsparciu, jakie uzyskasz w ramach współpracy z Partnerem.

Powiązane posty