• Akademia
  • Blog
  • O Serverless
  • O stronie

Dlaczego warto rozważyć Serverless dla swojego startupu?


Serverless startup
Jedną z największych przeszkód dla założycieli startupów tworzących aplikacje webowe lub produkty typu SaaS są koszty uruchomienia i utrzymania.

Serwer działający 24 godziny na dobę, 7 dni w tygodniu, może okazać się dużym marnotrawstwem. Szczególnie, jeśli przez większość czasu nic nie robi, ponieważ Ty – czyli główny developer – masz czas pracować tylko kilka godzin dziennie nad swoim produktem. Przecież od 9 do 17 jesteś w pracy na etacie. Oczywiście na tym etapie rozwoju produktu możesz wyłączać serwer i w ten sposób oszczędzać pieniądze.

Natomiast, jeśli już jesteś tak zaawansowany, że Twój produkt jest udostępniony światu to w tym momencie musisz płacić za serwer uruchomiony non-stop, na wypadek tego, że ktoś może będzie chciał skorzystać z Twojego rozwiązania.

Oczywiście w AWS oraz w innych chmurach publicznych są bezpłatne pakiety (free tier), które umożliwiają uruchomienie skromnego serwera bez ponoszenia kosztów. Niestety szybko się okaże, że potrzebujesz więcej niż jeden serwer, aby Twój produkt był wysokodostępny i skalowalny, a to może wykroczyć poza ramy bezpłatnej oferty Twojego dostawcy.

Bądźmy jednak szczerzy, małe są szanse, że Twoje rozwiązanie stanie się popularne z dnia na dzień i będzie musiało podołać dużym wzrostom obciążenia wygenerowanym przez napływających użytkowników i klientów. Dlatego, zapewne na samym początku będziesz korzystał z pojedynczego serwera. W końcu, nawet jak padnie, to prawdopodobieństwo, że akurat Twój klient będzie z niego korzystał w tym czasie jest małe.

O ile na samym początku brzmi to całkiem nieźle, to w pewnym momencie będziesz chciał przejść na bardziej profesjonalne rozwiązanie, które będzie w stanie zabezpieczyć Cię przed awarią i obsłużyć niespodziewany peak użytkowników.

Zaraz po podjęciu decyzji „wypadałoby to zrobić porządnie” okaże się, że masz dwa problemy:

  1. Koszt kilku serwerów jest zdecydowanie większy od tego pojedynczego darmowego, ponieważ wykracza poza free tier.
  2. Kod aplikacji, który napisałeś wymaga dostosowania / przepisania, ponieważ został napisany w taki sposób, że nie sposób uruchomić go na kilku serwerach równocześnie. A bez tego Twój produkt nie będzie ani wysokodostępny ani skalowalny.

Czy jest inna droga?

Tak jest.

Sam ją przeszedłem. Przed budową swojej aplikacji SaaS dokonałem wstępnej estymacji kosztów na AWS.

Cztery serwery EC2, uruchomione non-stop dały ponad tysiąc złoty miesięcznie kosztów. Wliczam w to koszt bazy danych (dwa serwery w modelu master i replica), oraz dwa serwery webowe pod aplikację napisaną w Java. Pomijam tutaj koszty load balancera i inne pomniejsze składowe finalnego rachunku.

Biorąc pod uwagę sporą szansę biznesowej porażki mojego przedsięwzięcia, nie chciałem topić dodatkowych tysięcy złoty na „hosting”. Zacząłem szukać innych rozwiązań.

Zwróciłem się w kierunku serverless.

O co chodzi z tym serverless?

W serverless Twój backend składa się z wielu pojedynczych funkcji. Na funkcje możesz spojrzeć jak na mikrokomponenty, z których złożysz swoje mikroserwisy.
Architektura
Funkcje te nie są umieszczone na Twoim serwerze, ani na żadnym innym konkretnym serwerze. W chmurze Twojego dostawcy istnieje usługa typu FaaS (Function as a Service) np. AWS Lambda lub Azure Functions. To właśnie ta usługa zarządza Twoimi funkcjami, uruchamia i wyłącza je w odpowiedzi na nadchodzące zdarzenia, o których za chwilę Ci powiem.

Serwery stały się dla Ciebie niewidoczne, zostały abstrakcją. Nie musisz się nimi przejmować. Zarządzanie nimi, czyli konfiguracja, zabezpieczenie, oraz aktualizacje zostały przeniesione na dostawcę chmury. Stąd też nazwa serverless. Worry about servers less. Serwery oczywiście gdzieś tam są, ale nas to nie interesuje.

Tak samo jak nie interesuję Cię, że router WiFi jest połączony przewodem do źródła Internetu. Tak samo jak nie interesuję Cię, że telefon komórkowy łączy się do stacji przekaźnikowych, a one między sobą są już połączone siecią światłowodową. W oby przypadkach, jako użytkownik końcowy cieszysz się bezprzewodowym połączeniem, pomimo tego, że te kable są za Twoją szafą lub pod ziemią. Wire-less.

Ponieważ „nie ma” serwerów, nie ponosisz kosztów ich utrzymania oraz administrowania nimi. W przypadku funkcji (FaaS) płacisz tylko za czas ich działania. Oznacza to, że nic nie płacisz, kiedy Twój system nie jest używany. To jest oszałamiająco dobra wiadomość dla wszystkich startujących przedsiębiorców 💥

Zatem mamy nasze funkcje umieszczone gdzieś w chmurze naszego dostawcy. Nie ma serwerów i co teraz? Jak wchodzimy w interakcje z nimi? Jak je uruchomić skoro domyślnie są wyłączone?

Funkcje są uruchamiane w odpowiedzi na zdarzenia. W chmurze AWS istnieją takie rodzaje zdarzeń:

  1. Żądanie HTTP(S) (połączenie REST na zdefiniowany endpoint)
  2. Czas (harmonogram typu CRON)
  3. Nadchodząca wiadomość z innej usługi (kolejki)
  4. Nowy rekord lub modyfikacja istniejącego w bazie danych
  5. Stworzenie lub modyfikacja pliku
  6. Oraz wiele innych zdefiniowanych przez konkretne usługi dostawcy

Przykładowo połączenie REST na zdefiniowany endpoint wywoła funkcję. Normalnie, zupełnie jak w innych rozwiązaniach, możemy korzystać z metod HTTP GET lub POST, aby przekazać parametry. Dostawca chmury uruchomi naszą funkcję w momencie nadejścia żądania i przekaże przesłane parametry do niej. Funkcja się wykona, a jej wynik zostanie zwrócony w nawiązanym połączeniu REST. Nawiązanie połączenia REST uruchomi taryfikator kosztów na Twoim koncie, będzie on naliczał czas działania funkcji do momentu jej zakończenia (zwrócenia wyniku).

W architekturze serverless budujemy aplikacje łącząc kilka (lub wiele) funkcji w łańcuchy za pomocą zdarzeń, które przepływają miedzy nimi. To pozwala wygodnie projektować nawet bardzo złożone rozwiązania.

Ile to kosztuje

Cennik AWS Lambda
Jak widać (powyżej) AWS Lambda daje milion żądań (request) miesięcznie i 400 000 GB-sekund czasu obliczeniowego (lub do 3,2 mln sekund czasu obliczeniowego) miesięcznie w bezpłatnym pakiecie free tier.

WTF?

Już tłumaczę 😃

Serverless ma wiele zastosowań, przykładowo można go zastosować, jako backend aplikacji webowej. Ja w taki sposób wykorzystałem go w moim produkcie SaaS.

W takim scenariuszu będzie nam zależało, aby czasy odpowiedzi na żądania użytkownika były możliwie krótkie. Będziemy celować w przedział 500 – 1200 ms (milisekund).
Na potrzeby obliczeń kosztowych załóżmy, że funkcja wykonuje się jedną sekundę. Oczywiście jedna funkcja nie wystarczy, aby zbudować sensowny backend. Załóżmy, że w naszym skomplikowanym systemie SaaS, średnio jedna akcja użytkownika wywołuje łańcuch pięciu funkcji.

To nam daje 3 200 000 [s] / (1 [s] * 5 ) = 640 000 akcji użytkownika za darmo w miesiącu. Co daje ponad 21 tysięcy akcji dziennie, przy założeniu, że pojedyncza funkcja lambda wykorzystuje maksymalnie 128 MB ramu. Dla 256 MB ramu, było by to odpowiednio 10,5 tyś. wywołań dziennie za darmo. I tak dalej, im więcej ramu tym mniej darmowych wywołań.

Całkiem hojnie. To nie tylko wystarczy do przygotowania prototypu systemu, uruchomienia MVP (Minimum Viable Product), ale nawet do hostowania pełnej, działającej aplikacji SaaS na produkcji.

Do porównań i estymat kosztowych możesz wykorzystać http://serverlesscalc.com oraz https://servers.lol.

Co jeszcze poza niskimi kosztami oferuje serverless?

Ustaliliśmy, że architektura serverless może posłużyć do budowy rozwiązań o bardzo niskim koszcie utrzymania. Jakie inne korzyści oferuje startupom IT?

Przede wszystkim oszczędza czas, czyli nasz najcenniejszy zasób. Dokonuje tego na wielu płaszczyznach, które razem skracają czas dostarczenia gotowego rozwiązania (time-to-market) i w rezultacie umożliwiają szybszą ewaluację biznesową naszego pomysłu.

Dobrze przygotowane MVP w architekturze serverless, może z powodzeniem zostać wykorzystane na produkcji. Ponieważ rozwiązania serverless są z natury skalowalne i wysokodostępne nie musimy przeprojektowywać naszego systemu, aby zabezpieczyć się przed awariami i po to, aby obsłużyć większą ilość użytkowników dziennie. Dostawcy chmury zatroszczyli się, aby rozwiązania FaaS były wysokodostępne i skalowalne. Raz napisany kod staje się naszą inwestycją, a nie kulą u nogi, która nas ogranicza.

Nie wierzysz mi? To zobacz tę prezentacje 😃

Kolejnym aspektem, który daje nam kolosalne oszczędności jest brak administracji serwerami. Już kiedyś o tym pisałem tutaj i nie chce się powtarzać, dlatego tylko w skrócie napiszę, że zaprojektowanie bezpiecznego i skalowalnego rozwiązania opartego o serwery nie należy do trywialnych. Następnie o takie serwery należy dbać, trzeba je odpowiednio skonfigurować, zabezpieczyć i aktualizować. Nawet w świecie pełnej automatyzacji jest to pracą, na która trzeba poświęcić sporo czasu (chociażby na napisanie tych automatyzacji).

Przerzucenie zagadnień technicznych, takich jak wysoka dostępność czy skalowalność, na dostawcę chmury pozwala nam – przedsiębiorcom programistom – skupić się na tym, co najważniejsze, czyli budowaniu wartości biznesowej. Zaoszczędzony czas możemy zainwestować w realizowanie nowych funkcjonalności naszego rozwiązania SaaS, tak aby dać jeszcze więcej wartości naszym klientom.

Dodatkowo, z racji tego, że w serverless nieużywany system nie generuje kosztów, możemy sobie pozwolić na posiadanie wielu środowisk (dev, test, prod) bez obawy o koszty. To znacząco usprawnia prowadzenie i testowanie naszego garażowego projektu. Pozwala też na posiadanie środowiska, które zawsze jest sprawne (deployujemy tam tylko przetestowany kod), dzięki czemu gdy nadarzy się nieoczekiwanie okazja prezentacji naszego rozwiązania SaaS potencjalnemu klientowi lub inwestorowi, możemy to zrobić od ręki. Z miejsca robimy profesjonalne wrażenie.

Jak zacząć?

Możesz teraz myślisz:

„Ok, fajnie to wszystko wygląda, ale jak mogą zacząć robić serverless?”.

Polecam Ci poznać usługę AWS Lambda w chmurze Amazonu oraz dokładniej koncepcje architektury serverless. Niezbędne materiały znajdziesz na Serverless Polska. Następnie obejrzyj mój bezpłatny wideokurs o serverless (tutaj lista odcinków), który pozwoli Ci szybko wgryźć się w konkrety.

Jeśli spodobał Ci się ten artykuł, możesz śledzić mnie na Facebooku.

Gorąco zachęcam Cię do zapisania się na listę mailingową Serverless Polska, aby otrzymywać powiadomienia, gdy opublikuję kolejny artykuł i być na bieżąco z tym, co się dzieje wokół serverless w Polsce.