Nasza strona używa cookies. Dowiedz się więcej o celu ich używania i zmianie ustawień w przeglądarce. Korzystając ze strony, wyrażasz zgodę na używanie cookies, zgodnie z aktualnymi ustawieniami przeglądarki. Rozumiem

Serverless - czym jest i jak działa?

Sprawdź, co kryje się pod hasłem technologii bezserwerowej, która od jakiegoś czasu szybko zyskuje na popularności dzięki takim rozwiązaniom, jak: Azure Functions, AWS Lambda czy Google Cloud Functions.
8 11 2018

Serverless to, mówiąc krótko, model usług w chmurze, w którym programista/architekt skupia się wyłącznie na tworzeniu logiki biznesowej, a nie na infrastrukturze, na której ma ona być wykonywana. Termin serverless architecture może sugerować, że żadnych serwerów nie ma. Jest to oczywiście nieprawdą - serwery fizycznie są. Sęk w tym, że programista tworząc rozwiązanie serverless nie musi się w ogóle zajmować stawianiem maszyn, aktualizacją systemów operacyjnych, konfiguracją sieci, skalowaniem aplikacji. Odpowiedzialność za to przejmuje dostawca danej usługi serverless, czyli np. Amazon, Microsoft, Google. Każdy z dużych dostawców chmury publicznej ma w swojej ofercie usługi, które możemy nazwać bezserwerowymi.

Jakie warunki usługa musi spełnić, aby zasłużyć na to miano? Moim zdaniem jest ich kilka:

  • Zero administrowania infrastrukturą
  • Automatyczne skalowanie usługi wraz z rosnącym obciążeniem
  • Płatność za faktycznie wykorzystywane zasoby, brak konieczności ponoszenia kosztów „z góry”


Potencjalne zalety takich rozwiązań są widoczne na pierwszy rzut oka – ograniczenie kosztów operacyjnych, większa elastyczność i dynamika procesu tworzenia oprogramowania, a co za tym idzie szybsze dostarczanie wartości w postaci nowych funkcjonalności aplikacji/systemu.

Serwery, kangury, dolary

Jedna z bardziej spektakularnych historii z serverless w roli głównej wiąże się z projektem realizowanym przez IBM dla Australian Bureau of Statistics (australijski odpowiednik naszego GUS-u) z okazji odbywającego się co pięć lat spisu powszechnego. Głównym elementem tworzonego systemu była aplikacja webowa, która dawała obywatelom możliwość wypełnienia ankiety online i dodania swoich danych do spisu. Koszt projektu - ok. 10 milionów dolarów, z czego ponad 400 tys. zabudżetowane na testy, które miały przygotować system na obciążenie rzędu miliona odsłon na godzinę. Okazało się to niewystarczające - wieczorem, tego samego dnia po uruchomieniu systemu, aplikacja przestała odpowiadać na zapytania użytkowników. Wyłączono ją, a przywrócenie jej działania trwało ponad dobę.

Tydzień po tym wydarzeniu dwóch studentów w czasie jednego z weekendowych hackathonów stworzyło projekt o nazwie „Make Census Great Again”. W 24 godziny stworzyli kopię systemu do przeprowadzania spisu on-line - wykorzystując usługi serverless dostępne w Amazon Web Services (AWS Lambda, S3). Aplikacja pomyślnie przeszła testy symulujące obciążenie cztery razy większe niż to zakładane na „oficjalnym” systemie - wszystko to w budżecie wynoszącym mniej niż 500 dolarów (przeczytaj wywiad z jednym z twórców).


Oczywiście przy ocenie tej historii trzeba zachować zdrowy sceptycyzm – diabeł tkwi w szczegółach, a tych dotyczących przetargu na wyżej opisany system nie znamy. Dwa wnioski można wysnuć na pewno:

  • System dało się zrobić taniej i lepiej przygotować go na zwiększone obciążenie
  • Usługi typu serverless pozwalają osiągnąć wysoką skalowalność rozwiązań przy niskim nakładzie czasu/pieniędzy

 

A miało być tak pięknie...

Skoro jest tak szybko i tanio - gdzie jest haczyk? Oto kubeł zimnej wody prosto z Twittera:


W dużym skrócie: usługa była złożona w całości z rozwiązań serverless. Wydajność i skalowalność nie stanowiły problemu  – były nim rosnące koszty. Część, która generowała ich najwięcej, została przepisana z NodeJS do Elixira i wdrożona na klaster kubernetesowy, gdzie z powodzeniem obsługuje obciążenie sięgające 12 milionów żądań na godzinę - za ułamek wcześniejszych kosztów. O szczegółach historii, która kryje się za powyższym tweetem, przeczytasz tutaj.

Usługi serverless nie są więc magicznym rozwiązaniem wszystkich problemów, a korzystając z nich trzeba mieć świadomość ich ograniczeń. Istnieje ryzyko, że koszty mogą nam się szybko wymknąć spod kontroli (na skutek nietrafnych oszacowań, programistycznych błędów). Częstą krytyką jest też to, że wybierając daną usługę bardzo mocno wiążemy się z konkretnym dostawcą. Jeśli tzw. vendor lock-in jest problemem, warto zapoznać się z open source’owym frameworkiem Serverless (https://serverless.com/), będącym warstwą abstrakcji ponad usługami konkretnych dostawców. Nie mówię tu już o ogólnych wątpliwościach natury chmurosceptycznej - dotyczących miejsca przechowywania danych czywspółdzielenia środowiska z innymi użytkownikami chmury.

W takim razie – kiedy używać serverless? Odpowiedź na tak postawione pytanie - jak zwykle w naszej branży - brzmi:

To zależy

Rozwiązania serverless sprawdzają się w przypadku pisania prototypów, MVP, Proof of Concept – przy małych obciążeniach nie generują praktycznie żadnych kosztów, a do tego są w każdym momencie przygotowane do „przyjęcia” obciążeń produkcyjnych.

Usługi, w których obserwujemy częste, nieprzewidywalne skoki obciążeń będą także dobrymi kandydatami do implementacji przy użyciu rozwiązań serverless. Tak samo jak akcje wykonywane w regularnych odstępach czasowych (np. cron joby).

W przypadku aplikacji działających z równomiernym, dużym obciążeniem zastosowanie usług serverless nie będzie optymalne kosztowo. Trzeba jednak zawsze wziąć pod uwagę cenę nie tylko samej infrastruktury, ale także pracy osób, które nią zarządzają – w każdej firmie/zespole kalkulacja ta będzie inna.

Przypadkami, w których usługi serverless przodują, są na pewno bezstanowe mikroserwisy, przetwarzanie danych (kolejki, obrazy, wideo), obsługiwanie zdarzeń wywoływanych np. przez urządzenia IoT.

Serverlessowe funkcje nadają się też idealnie do integracji ze sobą różnych systemów/aplikacji SaaSowych. często są jak srebrna taśma i trytytki w arsenale majsterkowicza – proste w użyciu i zabójczo skuteczne :)

Hello, Serverless World!

Zachęcam do sprawdzenia tych rozwiązań w praktyce – zarówno Microsoft Azure, Amazon Web Services , jak i Google Cloud Platform oferują konta, dzięki którym można zapoznać się praktycznie z całą ofertą usług, nie wydając ani grosza. Warto zacząć od usług typu FaaS (Function as a Service) - Azure Functions, AWS Lambda, Google Cloud Functions – do wszystkich łatwo znaleźć opisy funkcjonalności, wspieranych języków i gotowe przykłady w oficjalnej dokumentacji. Szybko przekonacie się, że to nie zabawka – a wręcz przeciwnie, w rękach świadomego developera to potężne narzędzie.

Zobacz więcej na Bulldogjob