This article is part of #ServerlessSeptember. You'll find other helpful articles, detailed tutorials, and videos in this all-things-Serverless content collection. New articles are published every day — that's right, every day — from community members and cloud advocates in the month of September.
Find out more about how Microsoft Azure enables your Serverless functions at https://docs.microsoft.com/azure/azure-functions/.
"Bezserverové počítání" je nastupující trend v hostování backendových aplikací a my jsme si do podcastu .NET.CZ pozvali Romana Jaška, aby nám přiblížil, co je serverless, jak se pracuje s Azure Functions, zda je potřeba uvažovat nad změnou architektury, kolik vlastně stojí atd.
Serverless?
Rozhovor jsme otevřeli pochopitelným dotazem na to, zda serverless znamená, že nebudeme potřebovat žádné servery.
Serverless se překládá jako bezserverové počítání v cloudu, ale samozřejmě tam nějaké servery jsou. Zajímavé je alternativní vysvětlení: server less nebo less servers, tedy méně serverů.
Základní myšlenka tohoto přístupu je, že vývojář by se neměl starat o to, kde a na jakém hardwaru jeho kód běží. V ideálním případě vezme svou aplikaci a nasadí ji do serverless prostředí v cloudu. Tam se o ni postará výpočetní stack poskytovatele (kterým může být Microsoft, AWS nebo kdokoliv jiný). Roman zdůraznil, že nemusí řešit, jak se kód spouští, jak je nakonfigurovaná infrastruktura, "železo" apod.
Když přijde moc požadavků, nemusím se starat o to, jak aplikaci naškálovat, aby je zvládla. Když jich naopak přijde málo, neplatím zbytečně navíc.
Něco podobného slýcháme v souvislosti s cloudem obecně, proto jsme se zeptali, jak se takový přístup liší třeba od Azure Web Apps, které také nabízí automatické škálování a hostování kódu a nepovažujeme je za serverless.
Roman nám vysvětlil, že Azure Functions ve skutečnosti běží nad Web Apps, ale díky speciálnímu runtime prostředí jsme od nich odstíněni. Na rozdíl od Web Apps jsou ale Functions vhodné na jednoduché, krátké úkoly: dostat data přes trigger (spouštěč), něco s nimi provést, uložit a skončit. Existují ale i způsoby, jak dobu trvání prodloužit - Durable Functions "odloží" informaci o dlouhotrvajících úkolech na Storage a dokáží navázat i po delší době (v řeči serverless je dlouhá doba klidně i půl hodiny, ale tady mluvíme třeba o dnech).
(zdroj: https://docs.microsoft.com/azure/azure-functions/durable/durable-functions-concepts#fan-in-out)
Spouštění
Dozvěděli jsme se také, že Serverless a konkrétně Functions je tzv. event-based, to znamená, že kód se startuje pomocí spouští (triggerů). Nejpoužívanějšími jsou:
-
HTTP trigger
- klasické REST API, dostane požadavek přes HTTP/S, zpracuje ho a odpoví opět přes HTTP/S. -
Timer trigger
- časovač, který spouští kód v pravidelných intervalech (každou hodinu, každý den, jednou za dva týdny apod.). Díky tomu je možné úsporně automatizovat různé úlohy. -
Queue trigger
- runtime hlídá frontu, jakmile se v ní objeví zpráva, spustí se patřičná funkce. Používá se velmi často pro integrace - asynchronní propojování několika funkcí. -
Blob trigger
- v tomto případě runtime hlídá Blob Storage a spustí funkci, když se v něm objeví nový soubor.
(Přehled všech triggerů najdete v dokumentaci.)
Architektura
V tuto chvíli začíná být zřejmé, že asi nebudeme moct vzít jakoukoliv webovou aplikaci, prohlásit ji za serverless a hodit ji na Functions runtime. Roman nám to potvrdil - s přechodem na serverless se pojí i změna uvažování a architektury. Functionalitu skládáme z mikroslužeb, které jsou nezávislé a propojené přes fronty. Díky tomu se dá efektivně využít množství zdrojů, jež má cloud k dispozici - zpracování totiž není blokované, ale děje se paralelně na automaticky přidávaných instancích (Azure infrastruktura sleduje stav fronty a snaží se kompenzovat přidáváním výkonu, když aplikace přestane stíhat).
Může to být výhodné i finančně. Za webové aplikace se platí kontinuálně, zatímco Functions podle použití - počet spuštění, doba exekuce, spotřebovaná paměť. V základu, bez většího vytížení, mohou být úplně zadarmo (1 milion spuštění je zdarma).
Stále je třeba mít na paměti, že není všechno stejné jako u klasického vývoje. Roman zmínil příklad z praxe, kdy jejich webovou aplikaci doslova zastavila přeplněná fronta, nad kterou znovu spustili Functions.
Programování
V druhé polovině povídání nám Roman popsal, jak vývoj s Functions vlastně vypadá.
Functions existují ve dvou verzích: v1 a v2, které nemají mnoho společného. Od verze 2 se používá .NET Core a postupně do runtime přibývají nové jazyky - Java, Python, PowerShell atd.
Vývojář, který pracuje ve Visual Studiu, používá nástroje, na které je zvyklý - vytvoří si nový projekt/solution, UI mu nabídne na výběr triggery a vygeneruje základní kostru aplikace. Hotový kód se pak nasazuje buď rovnou z Visual Studia, nebo prostřednictvím CI/CD (třeba přes Azure DevOps) po každém pushnutí do Gitu. Velmi podobně funguje také Visual Studio Code a JavaScript.
Lokální vývoj je možný díky Functions SDK, které dovoluje spouštět funkce bez nasazení do cloudu, a to včetně emulátoru Azure Storage.
Na závěr
Functions nejsou jediným zástupcem serverless v Azure. V našem rozhovoru jsme ty ostatní (např. Logic Apps) záměrně vynechali a pověnujeme se jim někdy jindy podrobněji.
Celou epizodu si poslechněte zde: https://www.dotnetpodcast.cz/episodes/ep47/ nebo ve své oblíbené podcastové aplikaci (stačí vyhledat ".NET.CZ").