Serverless slibuje svět bez serverů — platíte jen za skutečný výpočetní čas, žádná správa infrastruktury, automatické škálování do nekonečna. V roce 2018 máme dvě dominantní platformy: AWS Lambda a Azure Functions. Po roce produkčního provozu na obou sdílíme zkušenosti.
Co je serverless a co není¶
Serverless neznamená, že servery neexistují — znamená, že se o ně nestaráte vy. Provider spravuje infrastrukturu, vy dodáváte kód ve formě funkcí. Každá funkce zpracuje jeden event — HTTP request, zprávu z fronty, změnu v databázi.
Serverless není vhodný pro všechno. Long-running procesy, WebSocket spojení nebo aplikace vyžadující konzistentní nízkou latenci jsou lepší kandidáti na kontejnery. Serverless exceluje u event-driven workloads s nepředvídatelným provozem.
AWS Lambda — veterán serverless¶
AWS Lambda odstartovala serverless revoluci v roce 2014. V roce 2018 nabízí:
- Runtime: Node.js 8.10, Python 3.6, Java 8, Go 1.x, C# (.NET Core 2.0)
- Memory: 128 MB – 3 GB (CPU se škáluje proporcionálně)
- Timeout: max 5 minut (pro většinu use cases dostačující)
- Integrace: API Gateway, S3, DynamoDB, SQS, SNS, Kinesis, Step Functions
Největší výhoda Lambdy je ekosystém. Každá AWS služba umí triggerovat Lambda funkci. Step Functions umožňují orchestraci komplexních workflow. SAM (Serverless Application Model) zjednodušuje deployment.
Azure Functions — Microsoft v serverless hře¶
Azure Functions vstoupily na trh v roce 2016 a rychle dohánějí:
- Runtime: C#, JavaScript, F#, Java (preview), Python (experimental)
- Durable Functions: stateful orchestrace — to Lambda nemá nativně
- Binding model: deklarativní input/output bindings šetří boilerplate kód
- Hybrid: Azure Functions runtime běží i on-premise (Kubernetes)
// Azure Functions — Durable orchestration
[FunctionName("OrderProcessing")]
public static async Task RunOrchestrator(
[OrchestrationTrigger] DurableOrchestrationContext ctx)
{
var order = ctx.GetInput<Order>();
await ctx.CallActivityAsync("ValidateOrder", order);
await ctx.CallActivityAsync("ChargePayment", order);
await ctx.CallActivityAsync("ShipOrder", order);
await ctx.CallActivityAsync("SendConfirmation", order);
}
Cold start — elefant v místnosti¶
Cold start je hlavní bolest serverless. Když funkce nebyla vyvolána delší dobu, provider musí nastartovat nový kontejner. Naměřili jsme:
- AWS Lambda (Node.js): 150–400 ms cold start
- AWS Lambda (Java): 3–8 sekund (JVM startup)
- Azure Functions (C#): 500 ms – 2 s (Consumption plan)
- Azure Functions (C#): ~0 ms (Premium plan — pre-warmed instances)
Pro API endpointy, kde uživatel čeká na odpověď, je cold start problém. Řešení: warm-up pinging (CloudWatch scheduled events volající funkci každých 5 minut) nebo přechod na provisioned concurrency (Lambda) / Premium plan (Azure).
Pricing — skutečné náklady¶
Oba provideři účtují per-invocation + per-GB-second:
- AWS Lambda: $0.20 / milion invocations + $0.00001667 / GB-s
- Azure Functions: $0.20 / milion invocations + $0.000016 / GB-s
- Free tier: oba nabízejí 1M invocations + 400K GB-s měsíčně zdarma
Pro nízký až střední provoz je serverless dramaticky levnější než EC2/VM instance. Náš API backend zpracovávající 2M requestů měsíčně stojí na Lambda $12/měsíc. Ekvivalentní EC2 instance by stála ~$50/měsíc.
Pozor na high-throughput scénáře — při 100M+ invocations měsíčně začíná být serverless dražší než dedikované kontejnery.
Monitoring a debugging¶
Serverless mění způsob, jakým debugujete aplikace. Nemáte SSH přístup na server, nemáte lokální logy. Potřebujete:
- Distributed tracing: AWS X-Ray, Azure Application Insights
- Structured logging: JSON logy s correlation ID pro sledování requestu přes více funkcí
- Alerting: CloudWatch Alarms / Azure Monitor na error rate, duration, throttling
Vendor lock-in — reálné riziko?¶
Serverless Framework (serverless.com) abstrahuje provider-specifické detaily a umožňuje deployment na AWS, Azure i GCP. V praxi ale většina hodnoty serverless pochází z provider-specifických integrací (API Gateway + Lambda, Event Grid + Functions). Přenositelnost je tedy spíše teoretická.
Doporučujeme: pište business logiku jako čisté funkce bez závislosti na provider SDK. Handler (vstupní bod) je tenká vrstva, kterou můžete vyměnit. Core logic zůstává přenositelná.
Serverless je produkčně ready — s výhradami¶
Pro event-driven workloads, API backendy s proměnlivým provozem a data processing pipeline je serverless v roce 2018 skvělá volba. Vyhněte se mu u latency-sensitive aplikací a dlouhoběžících procesů. AWS Lambda má širší ekosystém, Azure Functions nabízí lepší developer experience pro .NET tým. Volba závisí na vašem stávajícím cloud providerovi.