Czy faktycznie serverless jest tańszy od tradycyjnych rozwiązań?
Szczera odpowiedź brzmi: to zależy 😉
Wiem, że nie na taką odpowiedź liczyłeś, więc podrzucę Ci trochę wartościowych artykułów, abyś mógł wyrobić swoje zdanie na ten temat. Na początku jednak wytłumaczę od czego zależy ta odpowiedź: przede wszystkim od problemu do którego stosujesz rozwiązanie.
Jeśli Twoja aplikacja ma stały, niezmienny, równo rozłożony w czasie ruch przez całą dobę, cały tydzień, cały rok to na pewno taniej będzie ją postawić na serwerach. 😱
Dlaczego?
Ponieważ, ten problem nie potrzebuje skalowalności i można dobrać idealną wielkość (moc) serwerów do obsługi tej aplikacji. Znika problem prze/niedoszacowania zasobów. W tym przypadku bardzo prosto uzyskać optymalne wykorzystanie zasobów. Upraszczając, jeśli serwer wykonuje pracę cały czas (a nie tylko jest włączony bezczynnie) to będzie bardziej optymalny kosztowo niż alternatywa zaimplementowana w AWS Lambda.
A teraz przyjrzyjmy się zupełnie odwrotnemu przypadkowi.
System, który ma totalnie nieprzewidywalny ruch. Od kilku osób na minutę do nawet dziesiątek tysięcy użytkowników. Bardzo zmienny w czasie. Będzie zdecydowanie tańszy w serverless.
Tutaj skalowalność jest kluczowa. Od razu widać, że ciężko dobrać serwery tak, aby były w optymalny sposób wykorzystane, efektywnie zwiększając koszt rozwiązania serwerowego.
Dodatkowym czynnikiem, często pomijanym w dyskusjach opartych o cenniki, jest fakt kosztów implementacji skalowalnego i wysoko dostępnego systemu. W świecie serwerów jest to zadanie nietrywialne, a to znacznie zwiększa koszty projektu.
W serverless skalowalność i wysoka dostępność (odporność na awarie) jest wpisana niejako w DNA tej architektury. Nie wymaga dodatkowy nakładów pracy na implementację. Od zera do 1000 żądań na sekundę? Żaden problem dla AWS Lambda.
Od czego zależą koszty?
Na koszt rozwiązań wpływa nie tylko koszt serwera/funkcji. W każdej chmurze cenniki są skomplikowane. I trzeba mieć tego świadomość, że płacimy za mnóstwo rzeczy. Dlatego polecam Ci zapoznać się z artykułem The hidden costs of serverless, który ładne pokazuje, że na koszt aplikacji serverless składają się (głównie) następujące czynniki:
Z tego widać, że koszt API Gateway jest większy od kosztów Lambdy. Muszę jednak być z Tobą zupełnie fair i powiedzieć, że nie do końca zgadzam się z tymi założeniami. Jeśli każdy request wywołuje jedną funkcje lambda to faktycznie tak to wygląda, ale moim zdaniem na jeden request średnio w aplikacjach przypada wywołanie 3 funkcji lambda, więc efektywnie stosunek kosztów API Gateway do Lambda jest trzykrotnie mniejszy. Zdarzało mi się pisać aplikacje, które w ogóle nie używały API Gateway. Dodatkowo od zeszłego roku zamiast API Gateway można wykorzystać Application Load Balancer, który jest tańszy.
Po raz kolejny, wszystko zależy od konkretnej aplikacji i ciężko uogólniać.
Fajnie jest to pokazane w tym artykule, gdzie jeden autentyczny przykład pokazuje, że serverless okazał się być 2000 razy tańszy. Następnie, autor zestawia go z przykładem, gdzie serverless był 100 razy droższy.
Bardzo konkretne porównanie serverless vs serverfull znajdziemy w artykule Kamila Kota Creating A Serverless Answer For eCommerce. Gdzie autor zbudował tę samą aplikację w dwóch architekturach i porównał ich koszty. Przy ruchu na poziomie 5000 żądań na sekundę przez całą dobę, aplikacja serwerowa kosztowałaby 1427 dolarów. Równoważne rozwiązanie serverless około 800 dolarów. Czyli 178% taniej, i to przy pełnym, równomiernym obłożeniu, które faworyzuje rozwiązania serwerowe!
Gdy poszukamy, to w internecie znajdziemy wiele przykładów na to, że migracja na serverless przyniosła wymierne korzyści, dziesiątki tysięcy dolarów oszczędności są na porządku dzienny. Coca-cola North America jakiś czas temu przeszła z EC2 na serverless i była na tyle uprzejma, aby podzielić się z nami swoimi doświadczeniami. Koszty Coca-Coli spadły z 13000 dolarów rocznie do 4490 dolarów. Więcej ciekawych przykładów w tym artykule How Much Money Can You Save By Going Serverless?
Czyli w końcu jak jest? Czy serverless jest tańszy?
Nie wierz mi, wyrób swoje zdanie! 😃
Ja już jestem *”sprzedany”* i uważam, że to świetne rozwiązanie, które należy zawsze rozważyć przed budową lub modernizacją, każdego systemu 👍😃
Na bazie swoich doświadczeń uważam, że na temat trzeba spojrzeć z perspektywy TCO (Total Cost of Ownership). Statystyczny developer w korporacji (sorry jeśli Cię uraziłem) nie zastanawia się na przykład nad kosztami przesyłu danych po sieci. Nie myśli o tym czym zajmują sie administratorzy (sieć, zarządzanie serwerami, backupy, disaster recovery), bezpieczniki (bezpieczeństwo, korporacyjny firewall) i tak dalej. To wszystko są ogromne koszta ludzkie oraz sprzętowe. Developer programuje, nie myśli, co dalej się dzieje z jego aplikacją.😉 Z perspektywy programisty bardzo łatwo pominąć te koszty, ponieważ na co dzień nie ma do czynienia z tego typu zadaniami.
Pomijając te koszty trudno dostrzec pełną wartość rozwiązań serverless, które zdecydowanie zmniejszają lub nawet je eliminują. Dobry architekt musi mieć świadomość tych rzeczy.