Czy powinieneś przejść na serverless?
Serverless jest nową technologią i ciągle rozwijającym się trendem. Będzie dobrym rozwiązaniem, czy kulą u nogi dla Twojego projektu? Pomogę Ci w podjęciu decyzji odnośnie tego, czy implementacja w tej technologii będzie słusznym rozwiązaniem w konkretnej aplikacji.
Co to jest serverless
Serverless jest to technologia chmurowa pozwalająca na tworzenie aplikacji bez posiadania i zarządzania serwerami. W ostatnich latach staje się ona coraz bardziej popularna, a wiele firm korzysta z jej zalet i szuka pracowników, którzy są w stanie jej używać.
Jest to kolejna faza ewolucji chmury. W tym modelu klient korzysta tylko z dostępnej mocy obliczeniowej, ale nie musi jej rezerwować. Serverless pozwala uciąć koszt bezczynnych serwerów oraz pozbyć się wielu problemów związanych z infrastrukturą i przy tym oszczędzić pracy administratorów. Czy zawsze jednak tak będzie?
Czy ta technologia jest odpowiednia dla mojego projektu
Tak jak często w naszej branży bywa odpowiedzią na to pytanie jest ulubione “to zależy”. Przede wszystkim od: od użytej technologii, języka programowania, częstotliwości i długości zadań. Aby znaleźć odpowiedź dla swojego projektu, należałoby rozpatrzyć następujące kwestie.
Koszty
W klasycznych rozwiązaniach serwery muszą być włączone nieustannie. Cały czas gotowe do obsłużenia naszych klientów.
W serverless funkcje włączą się, kiedy będzie to potrzebne. Nie będą one uruchomione w tle. W tym modelu zapłacimy za faktycznie zużyte zasoby, a nie za samą rezerwację. Taki model nazywany jest często pay-as-you-go. Jeżeli nasz system nie wymaga działania 24 godziny na dobę. Na przykład poza godzinami pracy jest on nieużywany warto zastanowić się nad implementacją w technologii serverless. Co więcej, serverless sprawdzi się idealnie w architekturach typu event-driven (np. obsługa urządzeń IoT) lub w aplikacjach uruchamianych w regularnych odstępach czasowych (np. cron joby).
Wraz z oszczędnościami wynikającymi z opłat za samo zużycie należy przeliczyć również odzyskane części etatu administratorów. Odpowiedzialność za infrastrukturę leżącą po stronie dostawcy pozwoli ograniczyć ich pracę. Kalkulacja oszczędności będzie różna dla każdej firmy. Wiele z nich zgłosiło zmniejszenie rachunków o dziesiątki procent.
Opóźnienie
Nieużywane funkcje zostają dezaktywowane przez dostawcę po pewnym czasie nieaktywności, aby minimalizować niewykorzystane zasoby serwera. Kiedy próbujemy wywołać taką funkcję musi ona zostać ponownie zainicjalizowana co przekłada się na dłuższy czas odpowiedzi. Tego typu problem nazywany jest cold start.
Jeżeli problem cold startu jest dla nas znaczący, należy mieć na uwadze, że istnieją sposoby, aby go niwelować: utrzymywanie funkcji w cieple przez uderzanie do niej w regularnych odstępach czasowych (proces ten może nie być tak prosty przy skomplikowanych, dużych serwisach) tworzenie małych funkcji o pojedynczej odpowiedzialności używanie języków o krótszym czasie startu jak np. Python.
Skalowalność
Aplikacje tworzone w technologii serverless będą z założenia gotowe do automatycznego skalowania. Jeżeli dostawca wykryje zwiększony ruch w naszym rozwiązaniu, przeskaluje funkcje, biorąc pod uwagę obecne obciążenie. Niektórzy dostawcy zapewnią również kopiowanie jak najbliżej użytkownika, aby skrócić czasy odpowiedzi do minimum. Dodatkowo w serverless możemy manipulować maksymalną ilością pamięci przydzieloną do naszej funkcji. Prędkość aplikacji można dostosowywać za pomocą jednego suwaka w panelu administracyjnym!
Wskutek nietrafnych oszacowań czy błędów programistycznych może okazać się, że zużyjemy więcej zasobów, niż było to założone. Trzeba mieć na uwadze, że w modelu pay-as-you-go będziemy musieli za to zapłacić.
Brak kontroli nad serwerem
Zarządzanie infrastrukturą może spędzać sen z powiek. W technologii serverless serwery nie są problemem, ponieważ odpowiedzialność za nie ponosi dostawca. Nigdy więcej aktualizacji systemu operacyjnego czy konfiguracji sieci. I o ile pozwala to zaoszczędzić koszty operacyjne i czas pracy przeznaczony na konserwację serwerów to będziemy musieli dostosować się w niektórych momentach do dostawcy.
Od strony dostawcy otrzymamy zamknięty set wspieranych środowisk uruchomieniowych. Jeżeli nie będzie tam dostępnej interesującej nas wersji, to my będziemy musieli dostosować się pod jedną z tych wspieranych. Dodatkowo mogą pojawić się ograniczenia na współbieżność i maksymalne zasoby dostępne dla pojedynczej funkcji. Wypadałoby sprawdzić te wartości, zanim pochłonie nas ta technologia. Należy mieć na uwadze ewentualne dynamiczne ceny które za miesiąc mogą być inne niż obecnie.
Problemy, gdzie dostawca dyktuje nam zasady gry i uzależniamy się od niego nazywane są vendor lock-in. Zmiana dostawcy usług chmurowych może być procesem kosztownym i skomplikowanym. Jeżeli vendor lock-in jest znacznym problemem, warto zapoznać się z open source’owym frameworkiem Serverless, który jest warstwą abstrakcji ponad usługami serverless.
Podsumowanie
Serverless jest nową technologią i wydaje się zapełniać niszę, gdzie serwery nie muszą być nieustannie uruchomione. Jest to spełnienie metodyki DevOps, gdzie granica pomiędzy programistą i administratorem jest zatarta. Developerzy są bliżej środowiska i mają oni na nie większy wpływ. W zależności od konkretnego rozwiązania, serverless może pozwolić na znaczne oszczędności czasu i pieniędzy, a także przy niskim koszcie wytwórczym, zapewnić aplikacji skalowalność. Przed decyzją o jej używaniu należy wyważyć czy potencjalne zalety mogą przewyższyć wady i ile będzie kosztowało nas przejście na tego typu rozwiązanie.