5 wzorców wykorzystania serverless na przykładzie Azure
Czym jest serverless?
Historia serverless sięga 2014 roku, kiedy to Amazon ogłosił powstanie AWS Lambda. Od tego czasu wszyscy wiodący gracze na rynku poczynili znaczące inwestycje w tym obszarze.
Z roku na rok dostarczają nam – programistom coraz doskonalszych narzędzi i rozwiązań, dzięki którym czas potrzebny na konfigurację środowisk i przekazanie gotowego produktu lub prototypu znacznie się skraca.
W tym właśnie tkwi piękno całego rozwiązania serverless, będącego rozwinięciem koncepcji PaaS, czyli Platform-As-A-Service. Programowanie serverless nazywane również FaaS (Functions-As-A-Service) pozwala zredukować koszty utrzymania rozwiązania w chmurze dzięki wykorzystaniu modelu Pay-As-You-Go oraz innego niż np. w usłudze Azure App Service współdzielenia zasobów, przy zapewnionym automatycznym skalowaniu i zarządzaniu zasobami potrzebnymi do obsłużenia ruchu.
Z perspektywy produktu i programowania skraca się tzw. Time-To-Market, a programista zamiast tracić czas na walkę z serwerami i konfiguracją może skupić się na dostarczaniu wartości biznesowej.
Wspomniany Time-To-Market, czyli czas potrzebny na dostarczenie nowej funkcjonalności lub pierwszej wersji produktu jest dla biznesu bardzo ważnym aspektem i mocnym argumentem przemawiającym na korzyść technologii serverless.
Kiedy możemy skorzystać z koncepcji serverless?
Event-driven Data Processing
Jednym z częstszych zastosowań może być obsługa konkretnego zdarzenia wykonywanego w trybie “on-demand”. Przykładowo – wgrywanie do Azure Blob Storage pliku, który musi zostać przetworzony.
Jest to popularne wykorzystanie chmury w rozwiązaniach hybrydowych, gdzie część procesu jest przekazywana ze środowiska on-premise do chmury.
Przykład implementacji takiego rozwiązania możecie znaleźć na naszym GitHub.
Jakie to daje nam korzyści?
Dzięki takiemu rozwiązaniu możemy praktycznie dowolnie skalować zapotrzebowanie na zasoby w zależności od potrzeb lub konieczności udostępnienia danych w innym regionie. Dodatkową zaletą może być redukcja kosztów działania naszego wewnętrznego datacenter poprzez przeniesienie bardzo złożonych obliczeniowo operacji do chmury.
Należy jednak pamiętać, że funkcje mają pewne limity czasu wykonania, więc bardzo złożona obliczeniowo operacja będzie musiała zostać inaczej zaprojektowana.
Web apps
Kolejnym przykładem wykorzystania technologii serverless, w szczególności Azure Functions, będzie budowa backend dla aplikacji Web działającej w chmurze.
Jakie to daje nam korzyści?
Wykorzystując to rozwiązanie możemy znacząco zredukować koszty działania rozwiązania wykorzystując zalety modelu serverless i planu „Consumption Plan”, który jest standardowo wybierany dla modelu FaaS w Azure. Korzystając z planu “Consumption” płacimy tylko za faktycznie wykorzystany czas działania naszego API.
Dodatkowo, budując rozwiązanie w chmurze Microsoft Azure dzięki wykorzystaniu usługi Azure App Service nie musimy się martwić o hosting naszej aplikacji Web .
Aby dodatkowo zredukować koszta możemy w prosty sposób rozszerzyć nasze rozwiązanie o usługę Redis Cache. Jest to usługa cache dostarczana w modelu SaaS wykorzystująca znane i często wykorzystywane rozwiązanie Redis.
Mobile & IoT
W dobie tzw. smart home, czyli inteligentnych domów z inteligentnymi urządzeniami, często stajemy przed problemem zbierania, analizy i prezentacji pochodzących z nich danych na urządzeniach mobilnych takich jak telefony czy tablety.
Jakie to daje nam korzyści?
Jest to kolejny ciekawy przykład zastosowania serverless. Dzięki wykorzystaniu Azure Functions możemy szybko zbudować API dla naszych inteligentnych produktów, oraz je skalować w zależności od potrzeb. Dzięki wykorzystaniu chmury i usług analitycznych możemy też udostępniać naszym klientom kolejne usługi, takie jak np. analizy zebranych danych w aplikacjach mobilnych.
Serverless Application Ecosystems
W tym roku praktycznie na całym świecie obserwowany jest dynamiczny wzrost popularności różnego rodzaju asystentów głosowych takich jak Apple Home Pod, czy Amazon Echo. Dzięki wykorzystaniu chmury i Azure Functions możemy budować systemy reagujące i informujące o zaistniałych zdarzeniach.
Na zaprezentowanym diagramie podaliśmy przykład implementacji komunikacji ze Slack API urządzenia Amazon Echo. Dodatkowo pojawiające się dane są zbierane za pomocą usługi Azure Event Hub oraz dostępne do analizy za pomocą Azure Data Lake Analytics.
Usługa Azure Event Hub pozwala nam w czasie rzeczywistym w prosty sposób zbierać duże ilości danych dotyczących działania różnych urządzeń i komunikatów przez niewysyłanych.
Azure Data Lake Analytics jest to usługa pozwalająca przeprowadzać analizę na dużej ilości danych.
Taką architekturę można na przykład wykorzystać do zaimplementowania scenariusza: na podstawie komunikatu głosowego od użytkownika, dział HelpDesk w firmie dostaje powiadomienie na Slacka, żeby wykonać jakąś akcję.
Jakie to daje nam korzyści?
Dzięki użyciu Azure Functions osiągamy duża skalowalności naszego rozwiązania i możliwość integracji z innymi usługami działającymi w chmurze.
Event Workflow
Kolejnym przykładem wykorzystania serverless to procesy decyzyjne typu workflow, np. procesy związane z decyzjami o zakupach. Tutaj z pomocą przychodzą różnego rodzaju silniki workflow.
Dzięki wykorzystaniu Durable Functions jesteśmy w stanie budować procesy workflow w których aplikacja będzie oczekiwać na decyzję “przełożonego”.
Jakie to daje nam korzyści?
Przeniesienie procesów decyzyjnych do chmury w okresach wzmożonego ruchu lub mocnego obciążenia systemów da nam wymierne korzyści w postaci skalowania i elastyczności całego rozwiązania. Dzięki użyciu chmury może być ono dostępne na cały świat.
Podsumowanie
Wraz z rozwojem i upowszechnieniem chmury, firmy takie jak Microsoft będą dalej rozwijać technologie serverless. Towarzyszył temu będzie większy nacisk na wykorzystanie modelu PaaS, SaaS lub tutaj omawianego FaaS, który daje wiele benefitów związanych z obniżeniem kosztów operacyjnych firmy.
Dzięki temu, że część związana z administracją i bezpieczeństwem spoczywa na barkach dostawcy chmury, to my – programiści nie będziemy musieli spędzać wielu godzin nad konfiguracją serwerów czy instalacją poprawek. Zaoszczędzony czas, będziemy mogli poświęcić na tworzenie prototypów nowych funkcjonalności czy też całych produktów.
Z punktu widzenia biznesu oznacza to koniec lub prawie koniec wydatków na zbędne konfiguracje środowisk czy przygotowanie serwerów.
Autor: Maciej Gos, Wiodący Programista .NET, Altkom Software & Consulting