Takéserverless computing, Function as a Service, FaaSPokročilý
Definice
Serverless je cloudový model, ve kterém vývojář nasazuje funkce nebo služby bez správy konkrétních serverů, operačního systému a škálování infrastruktury. Poskytovatel automaticky přiděluje prostředky podle událostí nebo provozu a účtuje hlavně skutečné spuštění, čas běhu nebo spotřebované zdroje, což zjednodušuje provoz, ale mění ladění, výkon i náklady.
Co se u serverless přesouvá na poskytovatele
Serverless architektura neznamená, že neexistují servery. Znamená, že tým obvykle neřeší jejich nákup, instalaci runtime, záplatování operačního systému, ruční škálování ani kapacitní plánování na úrovni jednotlivých instancí. Cloudová služba tyto vrstvy skrývá za rozhraní, do kterého se nasadí funkce, kontejner, workflow nebo databázová operace.
Serverless se často používá pro krátké výpočty spuštěné událostí: HTTP požadavkem, zprávou ve frontě, změnou souboru v objektovém úložišti nebo naplánovaným časovačem. Platba bývá více navázaná na skutečné použití než u trvale běžícího virtuálního serveru. Praktický dopad je jednoduchý: malá služba může stát velmi málo, ale špatně navržené volání ve smyčce může vytvořit překvapivý účet.
Událost jako hranice aplikace
Serverless vede k jemnějšímu dělení systému. Místo jedné dlouho běžící aplikace vzniká sada funkcí a řízených služeb, které si předávají události. Takový návrh pomáhá oddělit odpovědnosti, ale zvyšuje význam observability: logy, metriky, trasování a korelační identifikátory nejsou doplněk, nýbrž nutná součást provozu.
Funkce by měla být ideálně bezstavová. Stav patří do databáze, cache, fronty nebo objektového úložiště. Důvod je prostý: poskytovatel může spustit více kopií současně, jednu kopii zastavit nebo po delší nečinnosti vytvořit nové prostředí. Lokální paměť proto nelze chápat jako spolehlivé úložiště.
Kde serverless naráží na limity
Serverless má provozní kompromisy. Studený start může přidat latenci, zvlášť u těžších runtime nebo málo používaných funkcí. Maximální doba běhu, velikost balíčku, síťová konfigurace a limity souběhu se liší podle platformy. Aplikace s dlouhými výpočty, stabilně vysokou zátěží nebo velmi nízkými nároky na latenci může být levnější a předvídatelnější na kontejnerech nebo virtuálních strojích.
Významným tématem je také uzamčení u poskytovatele. Funkce sama může být přenositelná, ale události, identity, fronty, API gateway, monitoring a oprávnění bývají navázané na konkrétní cloud. Rozumný návrh proto odděluje obchodní logiku od integrační vrstvy.
Dva příklady z praxe
Webhook pro novou objednávku
E-shop přijme platbu a platební brána pošle webhook. Serverless funkce ověří podpis, uloží stav objednávky a zařadí e-mail do fronty. Při běžném provozu neběží žádný vlastní server a při kampani poskytovatel spustí více instancí funkce.
export async function handler(event) {
const order = JSON.parse(event.body);
await saveOrderStatus(order.id, "paid");
await enqueueEmail(order.customerEmail);
return { statusCode: 204 };
}Zpracování nahraného obrázku
Mobilní aplikace uloží fotografii do objektového úložiště. Událost spustí funkci, která vytvoří náhled, zapíše metadata a uloží menší variantu pro web. Výsledek je pružný pipeline bez trvale běžícího workeru, ale tým musí ohlídat limity paměti a opakování při chybě.
Příklady z praxe
Webhook pro novou objednávku
E-shop přijme platbu a platební brána pošle webhook. Serverless funkce ověří podpis, uloží stav objednávky a zařadí e-mail do fronty. Při běžném provozu neběží žádný vlastní server a při kampani poskytovatel spustí více instancí funkce.
export async function handler(event) { const order = JSON.parse(event.body); await saveOrderStatus(order.id, "paid"); await enqueueEmail(order.customerEmail); return { statusCode: 204 }; }Zpracování nahraného obrázku
Mobilní aplikace uloží fotografii do objektového úložiště. Událost spustí funkci, která vytvoří náhled, zapíše metadata a uloží menší variantu pro web. Výsledek je pružný pipeline bez trvale běžícího workeru, ale tým musí ohlídat limity paměti a opakování při chybě.
Časté omyly
- MýtusServerless znamená, že aplikace neběží na serverech.
- Ve skutečnostiServerless aplikace běží na serverech poskytovatele cloudu. Rozdíl je v tom, že vývojový tým obvykle nespravuje konkrétní stroje, operační systém ani ruční škálování.
- MýtusServerless je vždy levnější než vlastní server.
- Ve skutečnostiServerless může být levnější u proměnlivé nebo nízké zátěže. Při stabilně vysokém provozu, velkém objemu volání nebo drahých návazných službách může být cena vyšší než u kontejnerů nebo virtuálních strojů.
- MýtusServerless funkce se dají psát stejně jako monolitická aplikace.
- Ve skutečnostiServerless vyžaduje jiný návrh hranic, práce se stavem a zpracování chyb. Funkce musí počítat s opakováním událostí, paralelním během a omezeními platformy.
Časté dotazy
- Kdy dává Serverless ekonomicky smysl?
- Serverless se vyplatí hlavně u nepravidelné nebo událostní zátěže, kde aplikace většinu času nemusí běžet. Typickým příkladem jsou webhooky, plánované úlohy, datové transformace po nahrání souboru nebo menší API. Serverless může snížit provozní práci, protože tým neřeší servery a škálování instancí. Náklady je ale nutné počítat podle počtu volání, délky běhu, přenosů dat a návazných řízených služeb.
- Je Serverless vhodný pro backendové API?
- Serverless může být vhodný pro API, pokud má API proměnlivou návštěvnost, krátké požadavky a snese latenci dané platformou. Serverless není ideální volba pro každý endpoint, například pro velmi časté požadavky s extrémním nárokem na odezvu nebo pro dlouhé streamované spojení. Důležitý je také návrh připojení k databázi, protože mnoho paralelních funkcí může snadno vyčerpat connection pool.
- Kam ukládat stav v Serverless aplikaci?
- Serverless funkce by neměla spoléhat na lokální stav mezi dvěma spuštěními. Platforma může prostředí znovu použít, ale stejně tak ho může kdykoli zahodit nebo spustit jinou instanci. Trvalý stav patří do databáze, objektového úložiště, fronty nebo cache. Lokální proměnné se hodí jen pro krátkodobou optimalizaci, například dočasné znovupoužití klienta databáze během životnosti jednoho běhového prostředí.
- Zjednodušuje Serverless bezpečnost?
- Serverless omezuje část administrace, ale neodstraňuje odpovědnost za bezpečnost aplikace. Vývojář pořád nastavuje oprávnění, validuje vstupy, chrání tajné klíče, řeší auditní logy a hlídá závislosti. Bezpečnostní model se navíc rozšiřuje o události, identity služeb a pravidla přístupu mezi cloudovými komponentami. Nejmenší nutná oprávnění jsou u serverless obzvlášť důležitá, protože funkcí bývá v systému více.
Zdroje
- Serverless Computing - Amazon Web Services(otevře se v novém okně)
- What is Serverless Computing?(otevře se v novém okně)
- Azure Functions documentation(otevře se v novém okně)
- Serverless computing(otevře se v novém okně)