InfrastrukturaProgramowanie
Zalety i ograniczenia modelu Serverless
Według prognoz analityków Gartnera, do 2025 roku połowa firm na całym świecie wdroży “bezserwerowy” (ang. serverless) model działania. Obecnie korzysta z niego zaledwie 20% przedsiębiorstw. Przypomnijmy, że serverless computing oznacza, iż deweloperzy nie muszą zarządzać serwerami, ponieważ procesy – od aktualizacji systemu, poprzez kontrolę dostępu i skalowanie, do redundancji serwerów – obsługiwane są przez dostawcę chmury. Czy taki model rzeczywiście wart jest zachodu?
Pojęcie Serverless dotyczy szerokiego spektrum produktów chmurowych, które zwalniają programistów i firmy z konieczności zarządzania infrastrukturą podczas wdrażania swoich usług, a nawet przechowywania danych. Jest to rozszerzenie koncepcji Platform-as-a-Service (platforma jako usługa), które umożliwia programistom skupienie się na kodowaniu, odsuwając na dalszy plan złożone kwestie związane z infrastrukturą dla aplikacji.
Obecnie w większości przypadków rozwiązania PaaS wciąż wiążą aplikacje z serwerem, co ogranicza skalowalność projektów i generuje stałe koszty. Co prawda deweloperzy mogą korzystać z wirtualizowanych kontenerów, takich jak “Dynos”, które pozwalają po prostu wdrożyć i uruchomić kod, ale nie są one w stanie skalować się do zera, a autoskalowanie ma wysoki koszt, wskazują eksperci.
“Serverless zapewnia wysoką skalowalność, rozliczenia w systemie pay-as-you-go, elastyczność oraz brak zarządzania serwerami. Może więc wydawać się idealnym rozwiązaniem do uruchomienia każdej aplikacji wykorzystującej mikroserwisy i Event Driven Architecture. Jednak jeśli chodzi o rzeczywiste konfigurowanie takich aplikacji, obraz nie jest jasny. Jak to ujął Dmitri Zimine w swoim artykule, ‘w zamkniętym systemie nie ma darmowego lunchu: aby uzyskać korzyść, trzeba coś poświęcić’. Programiści i społeczność Serverless musieli zbudować nowe narzędzia, procesy i praktyki, aby obejść ograniczenia dostawców, czy to w zakresie obsługi latencji czy wdrażania kilku funkcji w tym samym czasie” – zauważa Lucas Merdinian, menedżer produktu Serverless w Scaleway.
5 kluczowych cech Serverless
Choć Serverless okazuje się trafnym podejściem w bardzo wielu przypadkach, nie jest to jednak cudowny sposób na każdy możliwy problem ze świata IT. Poniżej najbardziej atrakcyjne cechy podejścia Serverless, ale także “pułapki” jakie się z nimi wiążą.
- Brak zarządzania serwerami
Serverless oznacza, że deweloperzy nie muszą zarządzać serwerami. Jak już wspomniano, wszystko obsługiwane jest przez dostawcę chmury – od aktualizacji systemu poprzez kontrolę dostępu i skalowanie do redundancji serwerów. W rzeczywistości, za platformami Serverless wciąż stoją serwery, tyle że bezpiecznie współdzielone pomiędzy użytkownikami usług, tak by jedni użytkownicy nie przeszkadzali innym, lub – co gorsza – nie atakowali ich. Brak zarządzania serwerami może jednak sprawić, że użytkownicy utracą kontrolę nad tym, gdzie i jak wykonywany jest ich kod, a co najważniejsze, jak i gdzie przetwarzane są ich dane, wskazują specjaliści. Według badania O’Reilly serverless survey 2019, obawy o bezpieczeństwo wydają się być najczęstszą barierą w przyjmowaniu przez organizacje tego rodzaju architektury. Warto jednak pamiętać, że firmy i organizacje mogą wybrać takich dostawców, którzy wdrażają rozwiązania Serverless w odizolowanych, bezpiecznych środowiskach, gdzie użytkownicy mają zapewnioną wysoką dostępność.
- Skalowalność
W ostatnich latach pojawiły się wydajne narzędzia open-source, które umożliwiają użytkownikom automatyczne skalowanie infrastruktury w oparciu o zmiany ruchu lub zużycia zasobów. Są to np. orkiestratory kontenerów jak Kubernetes lub mikro VM jak Firecracker. Bazując na tych rozwiązaniach, usługi Serverless są w stanie uruchomić zarówno kod jak i skonteneryzowane aplikacje, dostosowujące się do skoków ruchu. Usługi Serverless działają przede wszystkim dzięki mutualizacji i optymalizacji systemu i są w stanie skalować się od zera w czasie krótszym niż pół sekundy. Skalowalność ta nie jest jednak ani nieograniczona, ani natychmiastowa. Mutualizacja serwerów i konteneryzacja pomagają to ukryć, utrzymując zawsze działające węzły, zdolne do szybkiego uruchamiania kontenerów, tak by system mógł sprostać zmieniającemu się zapotrzebowaniu.
“Za Serverless wciąż jednak stoją serwery, które ogranicza ich fizyczna zdolność do uruchamiania bądź zatrzymywania się. Co więcej, łączenie zasobów zobowiązuje dostawców chmury, do zapewnienia takiego samego standardu usług wszystkim użytkownikom, którzy korzystają z tych samych węzłów. Wiąże się to z ustanowieniem ograniczeń i limitów, a one ograniczają zdolność aplikacji użytkowników do skalowania w nieskończoność” – tłumaczy Lucas Merdinian.
- Elastyczność
Możliwe jest ograniczenie koncepcji Serverless do modelu Function-as-a-Service (FaaS – funkcja jako usługa) poprzez dekompozycję każdej usługi na funkcje. Wówczas Serverless przesuwa koncepcję mikroserwisów do punktu, w którym każda część systemu może być zarządzana niezależnie i może się niezależnie skalować. Przykładowo, nawet jeśli system logowania na stronie internetowej otrzymuje wiele żądań, nie będzie to miało wpływu na system powiadomień lub informacji o użytkownikach, które są mało używane. Serverless może być zatem postrzegany jako pochodna aplikacji opartych na mikroserwisach, gdzie każdy z nich może być podzielony na zestawy funkcji.
Jak informują eksperci, oznacza to jednak, że architektura staje się coraz bardziej złożona, ponieważ każda pojedyncza funkcja lub usługa jest zredukowana do jednej prostej operacji. To z kolei może sprawić, że aplikacje Serverless będą źródłem licznych niekompatybilności. Niektórzy twierdzą, że ta wada jest w rzeczywistości sygnałem problemu kulturowego. Podejście Serverless wymaga bowiem zmiany w sposobie myślenia o aplikacjach: od budowania usług do konsumowania usług. Od kodu do konfiguracji.
- Łatwość zarządzania
Jak wiele usług, Serverless działa zgodnie z filozofią plug and play: “wrzuć swój kod lub kontener, a my zajmiemy się resztą”. W przypadku kontenerów, odizolowane środowisko działające na rozwiązaniu serverless jest łatwiejsze w zarządzaniu niż na przykład klaster Kubernetes. Wybór dostawcy, który jest w stanie zaoferować API i interfejs użytkownika, może pomóc w jego wdrożeniu. W ekosystemie każdego dostawcy, realizacja zależy od tego, czy użytkownik chce pozostać na domyślnej ścieżce, którą stworzył dostawca chmury, czy też ma specyficzne wymagania.
- Efektywność kosztowa
Dzięki efektom skali i mutualizacji, dostawcy usług w chmurze oferują możliwość skalowania do zera, co oznacza, że działa tylko ich płaszczyzna kontrolna. W tym czasie aplikacje klientów są “uśpione” i gotowe do obsługi przychodzących żądań. Co więcej, optymalizując swoje aplikacje pod kątem Serverless, deweloperzy mogą budować systemy, których każda usługa skaluje się niezależnie. Ta efektywność kosztowa jest głównym powodem, dla którego firmy po raz pierwszy zaczęły przestawiać się na rozwiązania Serverless.
Efektywność kosztowa zależy jednak od konkretnej sytuacji, przypominają specjaliści. Serverless zalecany jest przy asynchronicznych lub łatwych do paralelizacji zadaniach z trudnymi do przewidzenia obciążeniami. Rozwiązania te okazują się więc bardzo atrakcyjnymi dla małych zespołów, które uruchamiają nowe usługi. Dotyczy to zwłaszcza zespołów, które nie mają środków na zarządzanie własną infrastrukturą i mogą sobie pozwolić na dodatkowy koszt Serverless. Cecha ta jest jednak mniej istotna dla bardziej doświadczonych firm, które mogą zdecydować się na inwestycję we własny system (używając na przykład Kubernetes). Organizacje powinny zatem być ostrożne: skoro produkty Serverless są rozliczane w modelu “pay-as-you-go”, koszty mogą okazać się trudne do przewidzenia, podobnie jak stopień wykorzystania usługi. Dlatego ważne jest, aby organizacja była w stanie monitorować koszty albo też ograniczyć zdolność funkcji do skalowania – podkreślają eksperci.
Czy warto więc stosować model Serverless?
Z całą pewnością Serverless to więcej niż chwilowy trend – naprawdę zmienia sposób, w jaki uruchamiamy aplikacje, eliminując stres związany z zarządzaniem infrastrukturą. “Ale ma to swoją cenę: zaufanie stronie trzeciej do wykonywania pracy w tle. Ważne jest, aby programiści rozważyli potencjalne przypadki zastosowania aplikacji, jak również środki i potrzeby organizacji, zanim podejmą decyzję o wdrożeniu usługi Serverless. Gdy model ten jest efektywnie wykorzystywany, możliwe jest tworzenie innowacyjnych usług wykorzystujących jego zalety, przy jednoczesnym zastosowaniu projektowania aplikacji dostosowanego do jego ograniczeń” – podsumowuje Lucas Merdinian.