Serverless computing, czyli przetwarzanie bezserwerowe, to popularna usługa typu FaaS (Function as a Service) oferowana przez największych dostawców chmury: Lambda AWS, Azure Functions i Cloud Functions w Google Cloud.
To model tworzenia oprogramowania, w którym korzystasz z dynamicznie przyznanych zasobów i pamięci obliczeniowej przed dostawcę chmury. W przeciwieństwie do tradycyjnego modelu, w którym wykupujesz określone zasoby i płacisz za nie, nawet jeśli nie są w pełni wykorzystane. W przypadku serverless procedury i funkcje składające się na aplikację, uruchamiane są tylko w momencie potrzeby przetwarzania danych, a gdy są bezczynne, zasoby nie są zużywane. Użytkownik płaci jedynie za wykonanie funkcji. Zarządzanie infrastrukturą, w tym jej przydzielanie i optymalizowanie, jest całkowicie po stronie dostawcy chmury.
Termin „bezserwerowy” jest nieco mylący, ponieważ sugeruje brak serwerów. Serwery w rzeczywistości istnieją, ale programiści nie muszą zajmować się ich obsługą. Dzięki temu mogą w pełni skupić się na tworzeniu aplikacji, zamiast dbać o konfigurację, skalowanie i bezpieczeństwo maszyn wirtualnych, serwerów czy kontenerów.
Jakie są korzyści serverless?
Niższe koszty
Architektury bezserwerowe przede wszystkim są doskonałym sposobem na obniżenie wydatków na chmurę. Korzystanie z zasobów w tym modelu jest często bardziej opłacalne niż wynajmowanie czy zakup stałej liczby serwerów. Pozwala zniwelować koszty niewykorzystanych zasobów w okresach bezczynności. Dodatkowym atutem jest brak kosztów licencji, instalacji, a także konserwacji.
Wydajność
Kolejną korzyścią ze stosowania rozwiązań typu serverless jest skrócenie czasu i uproszczenie prac programistycznych. Ponieważ inżynierowie nie muszą martwić się o zakup i konfigurację infrastruktury, mogą skupić się na projektowaniu i wdrożeniu systemu na platformie dostawcy. Ułatwia to zarządzanie zadaniami i projektami, zmniejszając ryzyko przekroczenia budżetu czy terminu oddania prac.
Elastyczność
Ponadto serverless wykorzystuje architekturę mikroserwisów, dzieląc aplikacje na mniejsze komponenty i pozwalając nimi zarządzać niezależnie od siebie. W sytuacji gdy chcesz zmodyfikować aplikację, nie musisz wprowadzać zmian do całego systemu, a jedynie modyfikujesz wybrany mikroserwis. Ułatwia to również testowanie aplikacji. Unikasz więc dodatkowo typowych wad monolitycznych rozwiązań.
Autoskalowanie
Zaletą przetwarzania bezserwerowego jest opcja automatycznego skalowania, czyli dopasowania liczby i mocy serwerów proporcjonalnie do rosnącego obciążenia. Ponieważ zarządzanie serwerami jest po stronie dostawcy, to on dba o to, aby w razie potrzeby aplikacja została uruchomiona i obsłużyła ruch. Dostawca przydziela (i usuwa) automatycznie zasoby zgodnie z zapotrzebowaniem, czyli liczbą zapytań (requestów), które powoduje aplikacja.
Dla kogo nie jest serverless?
Pomimo licznych zalet, przetwarzanie bezserwerowe nie w każdej sytuacji się sprawdzi. Oto, co warto wiedzieć, zanim zdecydujesz się na to rozwiązanie:
Vendor lock-in
Serverless przede wszystkim oznacza większe uzależnienie od infrastruktury dostawcy. Języki programowania i środowiska wykonawcze są ograniczone do tych obsługiwanych przez dostawcę. Przeniesienie aplikacji na inną platformę może więc być utrudnione. Wybierając dostawcę usług serverless, warto wybrać taką platformę, która minimalizuje ryzyko konieczności migrowania, oferuje najwięcej korzyści i możliwości integracji usług.
Cold starts
Cold start (zimny start) to czas konfiguracji wymagany do uruchomienia środowiska dla kontenera aplikacji bezserwerowej. Gdy uruchamiasz nieaktywną funkcję szuka ona kontenera, który może obsłużyć żądanie. Jeśli nie ma łatwo dostępnego kontenera, uruchamia i konfiguruje nowy i w ten sposób następuje opóźnienie. Opóźnienie to może wynieść od kilkuset milisekund do kilku sekund, w zależności od rodzaju dostawcy, środowiska i rozmiaru funkcji. Zimne starty sprawiają, że aplikacja reaguje wolniej, a więc serverless nie sprawdzi się w przypadku aplikacji, gdzie wymagany jest niemal natychmiastowy czas realizacji zadania.
Ograniczone zasoby
Przetwarzanie bezserwerowe nie jest rozwiązaniem dla systemów wymagających wysokiej dostępności ze względu na ograniczenia zasobów narzucone przez dostawców chmury. Jeśli masz złożony system, o rozbudowanych procesach i dużych wymaganiach co do pamięci obliczeniowej to lepiej wybrać inne rozwiązanie.