Pochopení bezserverových počítačů pro začátečníky

Když se hovoří o „serverless“ výpočtech, často se chybně předpokládá, že tento model zcela eliminuje servery. To je však omyl.

Po tomto vyvrácení mýtu se možná ptáte, jaký je tedy smysl názvu „serverless“?

Dovolte mi to vysvětlit: Termín „serverless“ neznamená, že žádné servery nejsou, ale spíše se zaměřuje na to, jakým způsobem jsou servery spravovány a implementovány.

Zní to trochu matoucě?

V tomto textu se podrobně seznámíme s konceptem serverless a souvisejícími termíny, abychom objasnili případné nejasnosti. Serverless se v současnosti těší velké oblibě. Dokazuje to i fakt, že se odhaduje, že trh serverless dosáhne do roku 2021 objemu 7,7 miliardy dolarů, oproti 1,9 miliardy dolarů v roce 2016.

Pojďme se tedy podrobněji podívat na serverless a pokusme se pochopit, proč je tak populární.

Co je to serverless computing?

Serverless, neboli bezserverové výpočty, představují model cloudového provádění, kde poskytovatelé cloudových služeb zajišťují výpočetní zdroje na vyžádání. Správu serverů, namísto zákazníků nebo vývojářů, přebírají sami. Jedná se o kombinaci služeb, postupů a strategií, které umožňují vývojářům vytvářet cloudové aplikace s důrazem na vlastní kód, nikoli na správu serverů.

Poskytovatel cloudových služeb, jako je například AWS nebo Google Cloud Platform, přebírá veškerou odpovědnost za běžné úkoly spojené s infrastrukturou, ať už jde o alokaci zdrojů, plánování kapacit, správu, konfiguraci, škálování, opravy, aktualizace či údržbu. Díky tomu se vývojáři mohou soustředit na obchodní logiku svých procesů a aplikací.

V serverless architektuře nejsou výpočetní prostředky uchovávány trvale v paměti. Výpočty probíhají pouze po krátkou dobu. Pokud se aplikace nepoužívá, nejsou pro ni alokovány žádné zdroje. Platíte tak jen za reálně spotřebované zdroje.

Hlavním cílem tohoto modelu je zjednodušit proces nasazování kódu. Často se kombinuje i s tradičními přístupy, jako jsou mikroslužby. Po nasazení serverless aplikace rychle reagují na požadavky a automaticky se škálují podle potřeby.

Serverless využívá model řízený událostmi pro určování požadavků na škálování. Vývojáři tedy nemusí předvídat využití aplikace a rozhodovat o potřebném počtu serverů nebo šířce pásma. Další servery a šířku pásma můžete přidávat a odebírat dle aktuálních potřeb bez nutnosti předchozích rezervací.

Jak se serverless vyvíjel?

Tradiční systémy měly problémy s agilitou a škálovatelností v rámci vývoje a nasazování aplikací. Vzhledem k rostoucím požadavkům na kvalitnější a rychleji uváděné aplikace na trh, začala být potřeba lepší systém s větší škálovatelností a agilitou. Důsledkem byl rozvoj cloud computingu a modelu serverless.

Model serverless se vyvíjel v několika fázích, od monolitických přes mikroslužby až po architekturu serverless, neboli funkci jako službu (FaaS).

  • Monolitická architektura představuje tradiční jednotný přístup k vývoji software. Jedná se o model s pevně provázanými komponentami, kde každá z nich a její podkomponenty kompilují nebo spouštějí kód. Pokud služba selže, může dojít k selhání celého aplikačního serveru.
  • Architektura mikroslužeb se skládá z menších služeb v rámci jedné velké aplikace, nasazených nezávisle pro vykonávání specifických funkcí. Umožňuje rychlejší dodávání aplikací ve velkém měřítku a dává vývojářům flexibilitu díky Infrastructure-as-a-Service (IaaS) a Platform-as-a-Service (PaaS). Volba mezi PaaS a IaaS však může být v tomto modelu náročná.
  • Serverless architektura se vyvinula s cloud computingem a nabízí větší škálovatelnost a flexibilitu. Namísto IaaS a PaaS využívá FaaS a Backend-as-a-Service (BaaS). Zde se aplikace nasazují podle potřeby spolu s potřebnými zdroji. Nemusíte spravovat server a platíte pouze v době, kdy je kód spuštěn.

Charakteristiky serverless computingu

Mezi hlavní atributy serverless patří:

  • Většina aplikací využívajících serverless obsahuje jednotlivé funkce a malé jednotky kódu.
  • Kód se spouští pouze na vyžádání, obvykle v bezstavovém kontejneru a plynule se škáluje dle potřeb.
  • Není vyžadována žádná správa serveru ze strany zákazníků.
  • Spouštění funkcí je založeno na událostech. Prostředí počítače je vytvořeno ihned po spuštění funkce nebo přijetí události pro provedení požadavku.
  • Flexibilní škálovatelnost umožňuje snadné škálování nahoru i dolů. Po dokončení kódu se infrastruktura zastaví, což šetří náklady. Při běhu funkce je škálování v podstatě neomezené.
  • Můžete využívat spravované cloudové služby pro zpracování složitých úkolů, jako je ukládání souborů, fronty, databáze a další.

Jak funguje serverless?

Serverless architektura kombinuje dvě hlavní koncepce – Function-as-a-Service (FaaS) a Backend-as-a-Service (BaaS). Primárně se opírá o FaaS, které umožňuje cloudovým službám spouštět kód bez nutnosti plně zřizovaných instancí. FaaS se skládá z bezstavových, událostmi řízených, škálovatelných a serverových funkcí, které spravují cloudové služby.

Model umožňuje DevOps týmům psát kód s důrazem na obchodní logiku. Dále definují událost, která spustí funkci, jako například HTTP požadavky. Poskytovatel cloudu následně spustí funkci a pošle výsledky do aplikací, které si uživatelé mohou prohlížet.

Serverless model nabízí efektivitu nákladů a pohodlí s automatickým škálováním, s průběžnými platbami. Proto mnoho firem a DevOps týmů v dnešní době serverless využívá.

Kdo používá serverless a proč?

Serverless je jednou z nejvíce se rozvíjejících technologií v softwarovém vývoji. V budoucnu by mohla zcela eliminovat potřebu správy a zajišťování infrastruktury.

Serverless je výhodný pro:

  • Organizace, které usilují o větší škálovatelnost a flexibilitu s lepší testovatelností aplikací.
  • Vývojáře, kteří chtějí zkrátit dobu potřebnou k uvedení na trh díky agilnějším a výkonnějším aplikacím.
  • Společnosti, které nepotřebují, aby jejich servery běžely neustále. Funkce lze vyvolávat dle potřeby a šetřit tak náklady.
  • Organizace, které chtějí vytvářet efektivní cloudové aplikace a zjednodušit migraci do cloudu.
  • Vývojáře, kteří hledají způsoby, jak snížit latenci a nabídnout tak uživatelům rychlejší přístup k funkcím a aplikacím.
  • Společnosti, které nemají dostatek zdrojů na údržbu IT infrastruktury. Serverless výpočty umožňují automatické řešení problémů bez nutnosti manuální údržby.

Mezi významné uživatele serverless patří například Slack, Coca-Cola a Netflix.

Díky svým charakteristickým vlastnostem je serverless vhodný pro:

  • Webové aplikace: Umožňuje vytvářet rychle reagující a škálovatelné webové aplikace. Je ideální pro bezstavové aplikace, které se spouštějí okamžitě a pro aplikace, které musí zvládnout nepředvídatelné nárůsty požadavků.
  • API back-endy: Na serverless platformách lze jakoukoliv funkci snadno transformovat na HTTP koncové body. Tyto funkce jsou označovány jako webové akce. Po jejich zpřístupnění je snadné sestavit plnohodnotné API. Pro zvýšení zabezpečení, podporu domén, omezení rychlosti a OAuth je možné použít API gateway.
  • Mikroslužby: Serverless je široce využíván v mikroslužbách. Mikroslužby umožňují vytvářet malé služby s jedinou funkcí, které vzájemně komunikují pomocí API. Ačkoliv mikroslužby lze vytvářet pomocí softwarových kontejnerů a PaaS, serverless je efektivnější. Umožňuje psaní menších částí kódu s jedinou funkcí a nabízí rychlé zřizování, automatické škálování a flexibilní ceny. Zákazník neplatí za nevyužívané zdroje.
  • Zpracování dat: Serverless je vhodný pro práci s daty obsahující videa, zvuk, obrázky a strukturovaný text. Lze jej využít pro ověřování, transformaci, obohacování, čištění, normalizaci dat, zpracování zvuku a PDF. Serverless se hodí i pro zpracování obrazu, které zahrnuje ostření, rotaci, generování náhledů a redukci šumu. Dalším využitím je překódování videa a optické rozpoznávání znaků (OCR).
  • Streamové/dávkové zpracování: Pomocí FaaS a databáze s Apache Kafka lze vytvářet výkonné streamovací aplikace a datové kanály. Model serverless je vhodný pro různé datové proudy z aplikací, senzorů IoT, finančního trhu atd.
  • Paralelní výpočty: Serverless je ideální pro paralelní výpočty, kde každá úloha běží paralelně. Může zahrnovat vyhledávání dat, mapové operace, web scraping, zpracování genomu atd.
  • Další využití: Serverless se používá v CRM, financích, chatbotech, business intelligence a analytice.

Poznámka: Serverless nemusí být ideální ve všech případech. Například velké aplikace s předvídatelným a téměř konstantním zatížením mohou lépe těžit z tradiční systémové architektury s dedikovanými servery. Pokud vaše organizace má tradiční nastavení se staršími systémy, přechod na serverless může být nákladný a náročný.

Výhody a nevýhody serverless computingu

Stejně jako každá technologie, i serverless má své výhody a nevýhody. Je důležité znát obě strany, než se rozhodnete, zda je serverless vhodný pro vaši organizaci.

Výhody 👍

Mezi výhody serverless architektury patří:

Nákladová efektivita

Serverless může být nákladově efektivnější než nákup či pronájem serverů, kde platíte za zdroje, i když je nepoužíváte.

Serverless využívá model průběžných plateb, kde platíte pouze za skutečně spotřebované zdroje. Poskytovatel vám účtuje pouze přidělenou paměť a čas, kdy je kód spuštěn.

Ušetříte tak provozní náklady na instalaci, licence, údržbu, opravy a podporu. Díky eliminaci serverového hardwaru se snižují i mzdové náklady.

Škálovatelnost

Serverless systémy nabízejí vysokou úroveň škálovatelnosti. Škálovat nahoru i dolů můžete kdykoli potřebujete dle aktuálních požadavků. Z tohoto důvodu se jim říká „elastické“.

Vývojáři nemusí trávit čas nastavováním nebo laděním systémů pro automatické škálování. Za vše je zodpovědný vybraný poskytovatel cloudu. I menší vývojářské týmy mohou spouštět kód bez potřeby podpory infrastruktury.

Snížená latence

Aplikace nejsou hostované na jediném původním serveru. Kód tak můžete spouštět odkudkoli. Funkce aplikace lze spouštět na serverech v blízkosti koncových uživatelů. Díky menší vzdálenosti mezi požadavkem uživatele a serverem je tak latence nižší.

Produktivita

Model serverless pomáhá zlepšit produktivitu vývojářů, kteří se tak nemusí starat o správu serveru. Nemusejí se zabývat ani správou HTTP požadavků či multithreadingem.

Zjednodušuje se vývoj backendu díky FaaS, kde jsou vystavené funkce řízené událostmi. Ušetřený čas mohou vývojáři věnovat vylepšování kódu a aplikací.

Rychlejší nasazení aplikace

Při použití serverless vývojáři neprovádějí konfiguraci backendu ani nenahrávají kód na server. Kód mohou nahrávat v menších částech a rychleji uvádět nové produkty na trh.

Mají flexibilitu nasazovat kód najednou, nebo po jednotlivých částech. Aplikace lze rychle opravovat, aktualizovat a přidávat nové funkce.

Dalšími výhodami jsou ekologické výpočty díky snížené spotřebě energie, rychlejší uvedení na trh a zjednodušení vytváření aplikací díky vestavěným integracím.

Nevýhody 👎

Nyní se podívejme na nevýhody serverless:

Výkon

Někdy může méně často využívaný serverless kód vykazovat větší latenci než ten, který běží neustále na vyhrazených serverech. Je to proto, že může potřebovat více času k inicializaci, což vytváří latenci.

Obtížné ladění a testování

Je třeba vědět, jak váš kód funguje po nasazení. To vyžaduje testování, které je v serverless prostředí náročné. Vývojáři nemají přehled o každém backendovém procesu a aplikace jsou rozděleny do menších funkcí, což ladění komplikuje.

Bezpečnostní problémy

Rostou nové obavy o kybernetickou bezpečnost. Není však možné plně změřit zabezpečení poskytovatele cloudu. Když poskytovatel spravuje celý backend s citlivými daty, vzniká určité riziko.

Nevhodné pro dlouhotrvající aplikace

Serverless je sice efektivní z hlediska nákladů, ale ne pro všechny typy aplikací. Pokud máte aplikaci s dlouho běžícími procesy, náklady na provoz mohou být velmi vysoké. V takovém případě může být vhodnější dedikovaný serverový hosting.

Mezi další nevýhody serverless patří potíže s přechodem od jednoho dodavatele k druhému a problémy s ochranou soukromí.

Terminologie serverless architektury

Při diskusi o serverless je důležité zmínit klíčové terminologie. FaaS a BaaS jsou dvě nejdůležitější koncepce, které vedly k vývoji serverless. Pro vybudování serverless systému potřebujete databázi, úložný systém, technologický zásobník, framework a další. Pojďme se na ně podívat.

Funkce jako služba (FaaS)

FaaS je ústředním konceptem serverless. Umožňuje psát logiku nasazenou v softwarových kontejnerech, která se spouští na vyžádání a je spravována cloudovou platformou. V porovnání s BaaS nabízí FaaS vývojářům větší kontrolu při vytváření vlastních aplikací namísto závislosti na knihovnách s předpřipraveným kódem.

Softwarové kontejnery, ve kterých je kód nasazen, jsou bezstavové, což zjednodušuje integraci dat a kód běží kratší dobu. Aplikace lze spouštět pomocí API, které spravují poskytovatelé cloudu přes API gateway.

Backend-as-a-Service (BaaS)

BaaS je podobný FaaS, protože oba vyžadují poskytovatele služeb třetí strany. V tomto modelu poskytuje poskytovatel cloudu backendové služby, jako je úložiště dat, které pomáhají vývojářům soustředit se na frontendový kód. BaaS aplikace však nemusí být řízeny událostmi jako v případě serverless.

Příkladem BaaS je AWS Lambda. Vývojáři používají serverless kód v kontejnerech s Lambda, která poskytuje pokyny pro odesílání kódu. Automatizuje také procesy při zadávání kódu do softwarových kontejnerů a nabízí řízenou službu.

Serverless zásobník

Stejně jako u jiných softwarových technologií, i serverless architektura má svůj technologický zásobník. Ten sdružuje různé komponenty nezbytné pro vytvoření serverless systému či aplikace.

Serverless zásobník obsahuje:

  • Programovací jazyk: Jazyk, ve kterém budou vývojáři psát kód. Lze vybírat z Java, JavaScript, Python, C#, Go, Node.js, F# atd.
  • Serverless framework: Poskytuje strukturu kódu. Umožňuje vytvářet, balit, kompilovat a nasazovat kód do cloudu. Frameworky urychlují proces kódování, zjednodušují škálování a zkracují dobu konfigurace. Příklady jsou Apex, AWS Serverless Application Model atd.
  • Serverless databáze: Používají se k ukládání dat, ke kterým kód potřebuje přístup. Jsou nutné pro interakci s funkcemi pro spouštěče. Tyto databáze se chovají jako serverless funkce, ale ukládají data po neomezenou dobu. Příklady jsou DynamoDB, Azure Cosmos DB, Aurora Serverless a Cloud Firestore.
  • Sada spouštěčů: Pomáhají spustit provádění kódu, například pomocí HTTP požadavků.
  • Softwarové kontejnery: Umožňují serverless a kontejnerizované mikroslužby. Fungují jako úložiště kódu a umožňují vývojářům psát kód pro různé platformy, například desktop nebo iOS.
  • API brány: Fungují jako proxy pro webové akce. Nabízejí směrování HTTP, limity rychlosti, ID klienta atd.

Jak implementovat model serverless a optimalizovat jej?

Přechod na serverless přináší významné změny v aplikacích, technologiích, nákladech a zabezpečení.

Pro začínající firmy serverless urychlí uvedení na trh a pomůže rychleji prosazovat aktualizace díky zjednodušenému testování a ladění.

Větší organizace pocítí výhodu škálovatelnosti pro uspokojení požadavků uživatelů, ale může to vyžadovat značné náklady. Proto je vhodné zvážit všechna pro a proti specificky pro vaše potřeby.

V praxi začněte tím, že:

  • Pochopíte vaše potřeby a vyberete vhodný technologický zásobník.
  • Vyberete si dodavatele serverless, jako jsou Google Cloud Functions, Azure Functions, AWS Lambda atd.
  • Vybavíte váš tým nástroji pro sledování výkonu a funkčnosti systému. Sledujte celkový počet požadavků, omezení, chyby, úspěšnost, trvání požadavků a latenci.

Poskytovatelé serverless

Na trhu je mnoho poskytovatelů serverless. Mezi ty nejlepší patří:

  • AWS Lambda: Je vhodný pro organizace, které již využívají služby AWS. Integruje se s mnoha službami pro ukládání, streamování a databáze.
  • Microsoft Azure Functions: Pokud používáte Visual Studio Code, je to dobrá volba. Funguje s DevOps a Azure Pipelines pro CI/CD. Podporuje i Durable Functions a nabízí integrované monitorování.
  • Google Cloud Functions: Vhodné pro ty, co používají služby Google. Podporuje aplikace JS, Go a Python, umožňuje spouštění funkcí z Google Assistant nebo GCP a nabízí vestavěné škálování.
  • IBM Cloud Functions: Pokud chcete zvolit serverless model založený na Apache OpenWhisk, je IBM Cloud Functions pro vás. Zahrnuje vynikající monitorování výkonu, spouštění událostí z REST API nebo cloudových služeb IBM a integraci s IBM API Gateway.
  • Knative: Pokud provozujete služby na Kubernetes, je Knative vhodná volba. Podporují ji společnosti jako Google, Red Hat, IBM atd.
  • Cloudflare Workers: Vhodné pro aplikace vyžadující rychlou odezvu, zejména aplikace JavaScript. Podporuje Workers KV pro ukládání dat a WebAssembly, což pomáhá zkompilovat a poskytnout více jazyků. Jeho distribuční síť se 193 datovými centry zlepšuje latenci a odezvu.

Závěr: Budoucnost serverless

Serverless výpočty se vyvíjejí s rostoucí poptávkou po vysoce škálovatelných aplikacích. Nabízejí mnoho výhod, jako je vyšší efektivita nákladů, produktivita a pohodlí.

Podle průzkumu O’Reilly, 40 % respondentů pracuje ve společnostech, které přijaly serverless architekturu.

Ačkoliv má serverless stále své problémy (latence, testování, ladění), poskytovatelé cloudu na nich pracují. Brzy by se mohla objevit vylepšená forma serverless s ještě více výhodami. Očekává se, že popularita a využití serverless modelu bude v budoucnu nadále růst.

Mohlo by vás také zajímat: 7 způsobů, jak serverless počítače rostou