Strona główna > Wdrożenie > Serverless
Journal

Serverless

Oceń artykuł:

Lambda Serverless? Mówi Ci to coś? Nie? No to może AWS Serverless, Amazon Serverless? Wiesz, czym jest Serverless, Serverless Architecture? No dobrze, może ogólniej, słyszałeś o usługach w Chmurze (Cloud Computing)?

Nie, OK. A o bezserwerowym przetwarzaniu danych, technologii bezserwerowej (Serverless Computing), Mikrousługach (Microservices)? Też nie? Świetnie! Ten temat może być dla Ciebie ciekawy. Dlaczego?

Bo mówimy nie tylko o technologii, ale przede wszystkim o usługach, które z punktu widzenia klienta (właściciela aplikacji webowej, platformy internetowej b2b etc.) oznaczają:

  • mniej kłopotów (odpowiedzialności)
  • mniej pracy (zazwyczaj bardzo kosztownej)
  • mniej wydatków (korzystanie z rozwiązań Serverless`owych oznacza w praktyce znaczną redukcję kosztów).

Zatem, dowiedzmy się, o co chodzi z tym Serverless`em. 

Szukasz rozwiązania?

Przetwarzanie w Chmurze (Cloud Computing)

Zacznijmy od tego, że od dłuższego czasu mamy możliwość korzystania z usług w Chmurze (Cloud Computing – Chmura Obliczeniowa, Przetwarzanie w Chmurze). Zamiast przechowywać pliki, dane, aplikacje, programy na własnym komputerze, zamiast kupować kolejne serwery, korzystamy z miejsca udostępnionego przez zewnętrznych dostawców (Cloud Service Providers). Usługi typu Cloud Computing zapewniają także konieczne do pracy (np. programowania) aplikacje, infrastrukturę oraz platformę. 

Rozwiązania chmurowe obejmują bardzo szeroki zakres usług (np. SaaS, FaaS etc.), występują w kilku rodzajach (publiczne, prywatne, hybrydowe) oraz oferują kilka sposobów migracji (np. Lift and Shift).

Chmury internetowe zapewniają stałą (brak ograniczeń czasowych) oraz nieograniczoną (brak ograniczeń przestrzennych) możliwość dostępu i korzystania z ich zasobów. Przy relatywnie niskich kosztach zapewniają także wysokie bezpieczeństwo danych, technologiczne zaawansowanie, technologiczną aktualność (usługi Cloud Computing są stale rozwijane) oraz wygodę użytkowania. 

Chmury Obliczeniowe oferują obecnie nie tylko najwięksi dostawcy tacy jak:

  • Amazon (Amazon Web Services - absolutny lider światowy, który ma ponad 30% udział w rynku)
  • Google (Google Cloud Platform)
  • Microsoft (Microsoft Azure).

Coraz częściej mamy możliwość skorzystać z ofert i rozwiązań firm, które szukają ciągle niezagospodarowanych nisz w tych usługach (np. Oracle Cloud, Alibaba Cloud). 

W ciągu zaledwie kilku lat usługa Cloud Computing na tyle się spopularyzowała, że korzystają z niej coraz chętniej klienci biznesowi wszystkich sektorów. Od małych firm, po globalne korporacje. 

W pakiecie usług chmurowych, opartych na idei i technologii Serverless (np. AWS - Amazon Web Services), znajdziemy kilka bardzo dobrze już znanych i wykorzystywanych. Ich skuteczność i wydajność zostały przetestowane przez firmy z każdego szczebla, z większości branż. Co więcej, dziś stały się w wielu wypadkach standardem (np. Amazon EC2, Amazon S3, Amazon DynamoDB). 

Czym jest Serverless?

Bezserwerowe przetwarzanie danych to zbiorcza nazwa dla szeregu usług polegających na przetwarzaniu danych w Chmurze. Dostawca takiego rozwiązania, takiej usługi (Serverless jest jednocześnie technologią i usługą) zapewnia środowisko produkcyjne i odpowiada za jego wydajność, skalowalność i bezpieczeństwo.

Innymi słowy, kwestie najbardziej stresujące, wymagające największej odpowiedzialności i zasobów (finansowych, kompetencyjnych, organizacyjnych) są “zmartwieniem” dostawcy. A mówiąc jeszcze prościej, by stworzyć i rozwijać aplikację webową nie są nam potrzebne:

  • własne serwery
  • własna infrastruktura.

Nie potrzebujemy także licznego grona specjalistów. Dostawca prowadzi także prace konserwacyjne. Jeśli nie chcemy kupować serwerów, ponosić kosztów ich konfiguracji i amortyzacji, zatrudniać specjalistów odpowiadających za zarządzanie nimi, to najlepszym rozwiązaniem jest skorzystanie z jakiejś opcji Serverless. 

aws serverless
AWS Amazon - światowy lider usług, rozwiązań Serverless`owych.

Architektura Serverless zyskuje na popularności (zwiększanie udziału w rynku Amazon Web Services jest tego najlepszym dowodem), ponieważ jest o wiele bardziej efektywnym, mniej kosztownym sposobem wykorzystywania, wytwarzania, wdrażania i oferowania oprogramowania. Serverless pozwala tworzyć aplikacje webowe:

  • elastyczne
  • efektywne (aplikacje można w o wiele krótszym czasie dostosować do zmian rynkowych)
  • tańsze
  • innowacyjne.

Usługi bezserwerowe (np. AWS Lambda) są wyposażone w automatyczne skalowanie, wbudowaną wysoką dostępność i model rozliczeń typu Pay-For-Value, Pay-As-You-Go. Lambda umożliwia także uruchamianie kodu w odpowiedzi na zdarzenia napływające z kilkuset zintegrowanych źródeł AWS i SaaS

Serverless wyręcza nas także z konieczności tworzenia, zarządzania, konserwowania, adaptowania infrastruktury. Oznacza to w praktyce, że nie martwimy się ani sprzętem (hardware), ani tym bardziej stroną programistyczną (software). Na przykład bazami danych, bezpieczeństwem, skalowalnością. Za nie odpowiada dostawca, który świadczy tę usługę wielu odbiorcom, dzięki czemu możliwe jest obniżenie ceny jednostkowej. 

Korzystając z rozwiązań Serverless płacimy tylko za zasoby wykorzystane, nie za możliwe do wykorzystania opcje, dane, transfery (model rozliczeń Pay-As-You-Go). Współdzielenie sprzętu, serwerów, ich infrastruktury nie obniża w żaden sposób wydajności tego rozwiązania i nie przekłada się na obniżenie jakości działania oprogramowania, jakie chcemy stworzyć. 

Serverless (np. Serverless AWS) jest wykorzystywane na przykład do tworzenia aplikacji webowych. Pozwala obniżyć koszty ich produkcji i wdrożenia. Jednocześnie pozwala zachować wysoką wydajność. Dzięki delegowaniu części koniecznych prac, obowiązków na zewnętrznego dostawcę możliwe jest wyprodukowanie aplikacji w o wiele krótszym czasie, przy o wiele mniejszych ryzykach. 

Z punktu widzenia wytwórców oprogramowania jest to rozwiązanie, które pozwala skupić się na celach biznesowych, funkcjonalnościach, użyteczności, estetyce i wiarygodności oprogramowania, a nie na bezpieczeństwie infrastruktury, skalowalności, niezawodności, czy wydajności. 

I właśnie w takim sensie mówi się o usługach Bezserwerowych, bowiem klienci nie zarządzają serwerami, z których korzystają. Nie martwią się środowiskiem, skupiają się przede wszystkim na rozwoju aplikacji, pozostawiając kwestie backendowe i infrastrukturalne dostawcy usług Serverless.

Zalety Serverless

Można powiedzieć, że o sukcesie rozwiązań chmurowych przesądziły trzy kwestie:

  • koszty
  • wygoda
  • bezpieczeństwo. 

Może się to wydawać nadmiernym uproszczeniem sprawy, ale coś w tym jest. Różnice w koszcie potrafią być oszałamiające, z korzyścią dla rozwiązań Serverless. Różnice, jak wspomniałem, biorą się ze współdzielenia z innymi użytkownikami rozwiązań, ale także z innego modelu ich naliczania. 

W  modelu rozliczeń Pay-As-You-Go opłaty są naliczane tylko za efektywne wykonanie naszego kodu bądź faktyczny transfer danych. W okresie bezczynności dostawcy kosztów nie naliczają. Oznacza to, że dostajemy przy stosunkowo niskim koszcie inwestycji nowoczesne narzędzia, rozwiązania, funkcje przyspieszające pracę, co z kolei skraca czas wyprodukowania własnego rozwiązania.

Inną zaletą Serverless jest krótszy cykl rozwoju aplikacji, platformy internetowej. Szybsze wejście na rynek, przy ogromnej konkurencji i mnogości rozwiązań jest korzyścią, którą trudno przebić. Zaletą rozwiązań Serverless jest także lepsze przygotowanie do wdrożenia, rozwoju aplikacji oraz ich niespodziewanych sukcesów (automatyczna skalowalność). 

Rozwiązania Serverless są także o wiele korzystniejsze jeśli spojrzymy na koszty z punktu widzenia zmienności obciążenia serwerów w rytmie dobowym, tygodniowym, czy sezonowym. Tradycyjne modele rozliczeniowe rzadko są elastyczne, rzadko pozwalają na precyzyjne naliczanie kosztów. Zupełnie “nie chwytają”, nie oddają ich czasowej zmienności. Oferują rozwiązania abonamentowe, które z punktu widzenia klienta nie są korzystne. 

Wady Serverless

Każde rozwiązanie posiada wady, bądź niedogodności, Serverless nie jest tutaj żadnym wyjątkiem. W przypadku Serverless problemem jest tak zwany Zimny Start (Cold Start) naszego kodu. Po okresie zazwyczaj co najmniej kilkuminutowego przestoju, nieużywania funkcji Serverless nasza funkcja zostaje usunięta z cache usługi i jej ponowne uruchomienie wymaga stosunkowo więcej czasu niż każde następne uruchomienie. 

onedrive serverless
Microsoft - OneDrive. Jeden z trzech największych dostawców usług Serverless.

Długość opóźnienia zależy od wielu czynników, niemniej jednak zjawisko Zimnego Startu uznawane jest za wadę tego rozwiązania. Wpływ Zimnego Startu może być znaczący, ale nie musi, stąd też jego waga, jest każdorazowo zmienna.

Problemy z Zimnym Startem da się jednak albo całkowicie wyeliminować, albo znacząco im przeciwdziałać. Jak? Już wyjaśniam. W gronie usług zawsze znajdziemy taką funkcję, która działa na tyle rzadko, że nie jest w stanie utrzymać kontenera w stanie pełnej i stałej gotowości. By gotowość zachować, można skorzystać z rozwiązań typu WarmUp, które w stałych odstępach czasu wywołują daną funkcję i nie pozwalają jej “ostygnąć”. Może to oczywiście generować dodatkowe koszta i powinno się używać takiego podejścia faktycznie tam, gdzie jest to potrzebne. 

Serverless często jest także krytykowane za nadmierne uzależnienie usługobiorcy od usługodawcy (Vendor Lock-In). Infrastruktury chmurowe w wielu szczegółach potrafią bardzo się od siebie różnić, stąd zmiana dostawcy może być kłopotliwa, czasochłonna, może wymagać nakładu środków. Także i w tym przypadku sytuacja nie jest beznadziejna, bowiem stale są rozwijane frameworki open source, które pozwalają ten problem rozwiązać lub uczynić mniej uciążliwym. 

Mikrousługi (Microservices) w Serverless

Nie będzie chyba przesadą, stwierdzenie, że Mikrousługi stanowią istotę, “mięso” usług i podejścia do tworzenia oprogramowania, aplikacji webowych za pomocą usług Bezserwerowych. 

microservices mikrousługi aws
Amazon AWS - Microservices pozwala tworzyć produkty cyfrowe, składające się z małych niezależnych usług.

Mikrousługi są sposobem tworzenia architektury aplikacji za pomocą zbioru usług, które nie są od siebie zależne w sposób ścisły i bezwzględny. Takie podejście do procesu budowy produktu cyfrowego nie jest nowe. Dotychczas znane było pod nazwą Service-Oriented Architecture. Wraz z upowszechnieniem się i rozwojem usług Bezserwerowych wrócono tego podejścia. 

Mikrousługi okazały się idealnym remedium na problemy charakterystyczne dla architektury monolitycznej, w której wszystkie funkcje, procesy działają jako jedna usługa. Monolityczne aplikacje webowe, choć łatwiejsze w budowie, nie są równie wydajne, elastyczne i łatwe do rozwijania jak aplikacje tworzone za pomocą Mikrousług. Szczególnie w przypadku dużych i złożonych systemów, nad którymi pracuje wiele zespołów programistycznych w software house.

W architekturze Mikrousług aplikacja jest tworzona jako zbiór niezależnych elementów czy też funkcji odpowiedzialnych za mały fragment funkcjonalności całej aplikacji. Usługi te komunikują się ze sobą za pośrednictwem API. Bardzo istotną ich cechą jest także możliwość ich wdrażania bez konieczności zachowania spójności języków programowania, baz danych, sprzętów, infrastruktury. Dystrybucja takich usług odbywa się w sposób ciągły i zautomatyzowany (Continuous Delivery/Continuous Integration).

Mikrousługi są tworzone w duchu, podejściu SRP (Single Responsibility), co oznacza, że pojedyncza Mikrousługa służy do obsługi jednej funkcji, jednego celu, jednego zadania.

Do kolejnych zalet i istotnych cech Mikrousług zalicza się także:

  • biznesowe zorientowanie (pozwalają skupić się bardziej na rozwiązywaniu problemów biznesowych)
  • elastyczność optymalizacyjną (można skalować pojedyncze fragmenty naszej aplikacji w zależności od bieżącego obciążenia i intensywności wykorzystania)
  • elastyczność technologiczną (można je tworzyć za pomocą różnych technologii, języków, framework`ów)
  • stabilność i odporność na awarie (w architekturze monolitycznej awaria pojedynczego składnika może spowodować awarię całej aplikacji, w przypadku Mikrousług nie ma takiego problemu, gdyż awarii ulega tylko wybrana usługa)
  • optymalizację zużycia zasobów
  • prostszą skalowalność (usługi wymagające większych zasobów są separowane i umieszczane w różnych lokalizacjach a skalowanie poziome jest znacznie łatwiejsze niż w przypadku monolitów)
  • szerokie zastosowanie (dobrze napisana usługa z łatwością może być ponownie wykorzystana w innej aplikacji)
  • zwiększenie dyscypliny i code quality (pisanie aplikacji wymagają od członków zespołu większej dyscypliny w utrzymaniu czystości kodu, pisaniu testów jednostkowych oraz prowadzeniu dokumentacji)
  • zwinność (są idealne dla małych, niepowiązanych ze sobą, niezależnych zespołów).

Niestety, architektura Mikrousług ma swoje ograniczenia. Jest trudniejsza i wymaga:

  • skrupulatnego przemyślenia ich podziału
  • odpowiedniej konfiguracji
  • rodzi wiele problemów diagnostycznych, dotyczących identyfikacji rzeczywistego źródła błędu.

AWS Amazon

Można powiedzieć, że tworzenie aplikacji webowych, stron internetowych, chatbotów, z pomocą AWS Amazon przypomina trochę budowę zamku za pomocą klocków. Gotowe komponenty, stworzone przez programistów z Amazon Web Services, pozwalają na szybsze, wydajniejsze i o wiele tańsze budowanie produktów cyfrowych. Najważniejszą zaletą AWS Lambda (Lambda jest jedną z głównych usług w ramach narzędzi Serverless dostępnych AWS Cloud) jest także bezpieczeństwo wytworzonego oprogramowania. 

Jak każda usługa Serverless, także Lambda umożliwia wytworzenie w pełni funkcjonalnego oprogramowania bez konieczności tworzenia, utrzymywania i rozwijania samodzielnej infrastruktury serwerowej. Użytkownicy Lambdy podkreślają także jej elastyczność. Lambda pozwala na uruchomienie kodu napisanego w różnych językach programowania. 

Google Cloud Platform

YouTube, wyszukiwarka Google i polska platforma Allegro to najpopularniejsze przykłady usług korzystających z rozwiązań dostępnych w ramach Google Cloud Platform. Trudno się temu dziwić, wydajność serwerów Google jest uznawana za najważniejszą zaletę tych rozwiązań chmurowych. 

Wraz z AWS Amazon i Microsoft Azure, Google Cloud Platform tworzy od lat trójkąt liderów, którzy wyznaczają standardy rozwiązań chmurowych na świecie. Google Cloud Platform pozwala na samodzielne tworzenie, wdrażanie, testowanie, rozwijanie aplikacji. W ramach platformy dostępne są bardzo różne usługi, gotowe produkty pozwalające działać zarówno małym firmom, jak i dużym organizacjom, korporacjom. Główną usługą do budowania rozwiązań Serverless w Google Cloud są Cloud Functions.

Alibaba Cloud - serverless
Alibaba Cloud - dostawca usług Serverless, w szczególności polecany firmom, które działają na rynku chińskim oraz pozostałych rynkach azjatyckich.

 

Podsumowanie - czy warto skorzystać z usługi Serverless?

Usługi (Services) typu Serverless przynoszą wymierne, mierzalne korzyści organizacji w trzech kluczowych wymiarach jej funkcjonowania – finansowym, organizacyjnym oraz dotyczącym bezpieczeństwa. Patrząc na korzyści rozwiązań chmurowych od strony finansowej, zyskujemy:

  • płatność za rzeczywiste wykorzystanie zasobów, narzędzi
  • przekształcenie wydatków kapitałowych w operacyjne
  • brak kosztów amortyzacyjnych, kosztów zatrudnienia
  • tańsze wdrożenie nowych rozwiązań
  • możliwość rozwijania aplikacji o wiele bardziej zaawansowanych technologicznie.

Organizacyjna korzyść widoczna jest w:

  • szybkości osiągania celów, wykonywania zadań
  • adekwatności technologicznej, mogącej obsłużyć każdy poziomu ruchu
  • mniejszym ryzyku rozpoczęcia projektów, zmian.

Rozwiązania Serverless są także atrakcyjne ze względu na poziom oferowanego bezpieczeństwa, w szczególności w kwestii:

  • zabezpieczeń przed cyberatakami
  • przeniesienia odpowiedzialności za bezpieczeństwo infrastruktury na dostawcę usług
  • łatwiejsze tworzenie Mikrousług.
Oceń artykuł:
Journal / JPG / Yaroslav Shatkevich - avatar
Programista z 17-letnim doświadczeniem. Współzałożyciel i CTO The Story. Fascynat planowania prac programistycznych, autor licznych specyfikacji IT i DevOps. Wyróżniany przez Awwwards, nagrodzony iF Design Award 2018. Na co dzień pracuje w technologiach Python, PHP, React, JavaScript. Stworzył ponad 90 aplikacji webowych i mobilnych oraz systemów dedykowanych.