Jämför serverless vs containrar för mikrotjänster – när AWS Lambda är kostnadseffektivt, när Kubernetes ger bättre kontroll, och molnarkitektur.


Din e‑handelsplattform har precis lanserats och trafiken ökar exponentiellt. Du har byggt mikrotjänster med containrar i Kubernetes – men nu ser du latensproblem och höga driftskostnader. Samtidigt lovar serverless‑lösningar som AWS Lambda obegränsad skalbarhet utan serveradministration. Vilket ska du välja? Svaret är inte universellt, men med rätt förståelse för respektive paradigms styrkor och begränsningar kan du bygga en molnarkitektur som levererar både prestanda och kostnadseffektivitet.

Vad är serverless och containrar i mikrotjänstsammanhang?

Mikrotjänster handlar om att dela upp en applikation i små, självständiga tjänster som kommunicerar via lätta protokoll – ofta HTTP eller asynkrona meddelandeköer. Valet mellan serverless och containrar avgör hur varje tjänst driftsätts och skalas.

  • Serverless (Function‑as‑a‑Service, FaaS): Koden körs i en förvald plattform som hanterar server‑OS, patchning och kapacitetsallokering. AWS Lambda, Azure Functions och Google Cloud Functions är de vanligaste exemplen. Du betalar per anrop och förbrukad beräkningstid (GB‑sekunder).
  • Containrar: En enhet av applikationslogik paketerad med sitt eget runtime‑beroende. Kubernetes (EKS, AKS, GKE) är standardramverket för orkestrering av containrar i molnmiljöer. Du hanterar klustret, nodernas storlek och skalningspolicy.

Båda paradigm stödjer mikrotjänster, men de påverkar arkitektur, driftsmodell och kostnadsprofil på olika sätt.

Prestanda och skalbarhet – AWS Lambda vs Kubernetes

Cold starts och warm execution

AWS Lambda:s cold start varierar mellan 100 ms och 300 ms beroende på runtime (Node.js, Python, Java). Med Provisioned Concurrency kan du eliminera cold starts helt, men det kostar extra. Varma funktioner svarar under 10 ms, vilket gör Lambda utmärkt för händelsestyrda arbetsbelastningar.

Kubernetes-poddar har typiskt en starttid på 30–60 sekunder för en ny pod om du inte använder PrePulling eller cluster autoscaler med scale‑from‑zero. Med Horizontal Pod Autoscaler (HPA) kan skalbeten ske på några minuter, men initial latens är högre än för Lambda.

Genomflöde och samtidighet

  • Lambda: Standard samtidighetsgräns på 1 000 samtidiga körningar per region. Gränsen kan ökas via en biljett till AWS Support. Genom att utnyttja Async Invocation och SQS‑trigger kan du hantera tiotusentals förfrågningar utan att konfigurera infrastruktur.
  • Kubernetes: Maximalt genomflöde bestäms av antalet noder och poddar. Med Cluster Autoscaler och Karpenter på AWS kan du skala från 0 till hundratals noder på några minuter, men du betalar för varje nod, oavsett belastning.

Branschstatistik

En undersökning från Datadog 2024 visar att 70 % av alla Lambda‑funktioner har en genomsnittlig körningstid under 500 ms, medan 90 % av Kubernetes‑arbetsbelastningar körs i mer än 2 sekunder. Detta indikerar att serverless passar bättre för kortlivade, händelsestyrda uppgifter, medan containrar passar för längre, beräkningsintensiva processer.

Kostnadsmodeller – när serverless är billigare, när containrar lönar sig

AWS Lambda prissättning (exempel 2024)

  • Kostnadsfri nivå: 1 000 000 förfrågningar per månad + 400 000 GB‑sekunder beräkningstid.
  • Efter fri­tier: 0,20 USD per miljon förfrågningar + 0,0000166667 USD per GB‑sekund.

För en tjänst som tar emot 100 req/s och kör 200 ms per anrop blir månadskostnaden cirka 7 USD (ca 70 kr).

EKS + EC2 prissättning (exempel på AWS)

  • EKS kontrollplan: 0,10 USD per timme ≈ 73 USD/månad.
  • EC2‑noder (t3.medium): 0,0416 USD/timme ≈ 30 USD/månad per nod. Tre noder ger ca 90 USD + nätverkskostnader.

För samma arbetsbelastning (100 req/s) med containrar kan du behöva minst två t3.medium‑noder för hög tillgänglighet, vilket ger en månadskostnad på ~120 USD (ca 1 100 kr).

När lönar sig respektive paradigm?

  • Serverless är billigare när:

    • Trafiken är sporadisk eller varierar kraftigt (t.ex. batch‑jobb, webhook‑hantering).
    • Du har många mikrotjänster som körs kort tid (under 1 s) och inte kräver ständig beredskap.
    • Du vill undvika fast kapacitetskostnad för kluster.
  • Containrar är billigare när:

    • Du har stabil, hög trafik (t.ex. API‑backend med tusentals req/s).
    • Du behöver reserverad kapacitet för att garantera latens (t.ex. realtids‑system, ML‑inference).
    • Du kan utnyttja Spot Instances för att sänka EC2‑kostnader avsevärt (upp till 90 % rabatt).

Driftskomplexitet och DevOps – vad krävs av ditt team?

Aspekt Serverless (Lambda) Containrar (EKS)
Infrastrukturhantering Helautomatiskt – ingen server, ingen patchning. Du hanterar kluster, noder, nätverkspolicy, uppgraderingar av Kubernetes‑version.
CI/CD CodePipeline, GitHub Actions med enkel zip‑upload. Bygga Docker‑image, push till ECR, deploy via Helm eller ArgoCD.
Övervakning CloudWatch Logs, X‑Ray, Lambda Insights (kostnadsfri). Prometheus, Grafana, Datadog, CloudWatch med mera.
Debugging AWS X‑Ray, CloudWatch Logs, limit för loggstorlek. Direkt åtkomst till containrar (kubectl exec), loggaggregering via Fluent Bit.
Säkerhet IAM‑roller, VPC‑koppling, ingen root‑åtkomst. RBAC, NetworkPolicies, pod‑säkerhetspolicy, regelbunden bildscanning.

Rekommendation

Om ditt team har stark kompetens inom Kubernetes och behöver finjusterad kontroll över nätverk, resurser och säkerhetspolicy, är containrar fortfarande ett kraftfullt val. Om du däremot vill minimera operativt arbete och snabbt skala nya mikrotjänster, är serverless enklare att driftsätta med mindre overhead.

Säkerhet och compliance – skillnader och gemensamma risker

  • Identitets- och åtkomsthantering (IAM): Båda modellerna förlitar sig på minsta behörighetsprincipen. Lambda‑funktioner körs med en tilldelad IAM‑roll, precis som containrar i Kubernetes med ServiceAccount. Se till att inte använda * *-wildcards i policies.
  • Nätverksisolering: Placera Lambda i ett VPC‑subnet om tjänsten behöver åtkomst till interna resurser (t.ex. RDS). Containrar kan konfigureras med NetworkPolicy och Calico för att begränsa trafik mellan pods.
  • Sårbarhetshantering: Containrar kräver regelbunden scanning av Docker‑images (t.ex. Trivy, Snyk). Lambda hanterar runtime‑säkerheten åt dig, men du måste fortfarande hantera applikations‑beroenden i funktionspaketet.
  • Loggning och audit: Använd AWS CloudTrail för att spåra Lambda‑anrop och Kubernetes Audit Logs för att dokumentera klusteråtgärder. Båda behöver långtidslagring för compliance (t.ex. S3 med Glacier).

När ska du välja serverless för mikrotjänster?

  • Händelsestyrd arkitektur: Integration med SQS, SNS, API Gateway, DynamoDB Streams.
  • Kortlivade arbetsbelastningar: Bildbehandling, meddelandeomvandling, webhooks.
  • Snabb prototyping: Nya mikrotjänster kan levereras på några timmar utan att definiera infrastruktur.
  • Oväntade trafiktoppar: Betala endast för faktisk körning, ingen överetablering.
  • Mikrotjänster med låg minnesprofil: Lambda‑minnesgränser (upp till 10 GB) räcker ofta för de flesta API‑anrop.

När ska du välja containrar för mikrotjänster?

  • Långvariga processer: ML‑träning, video‑transcoding, batch‑jobb som kräver mer än 15 minuters körtid (Lambda timeout är max 15 min).
  • Stateful tjänster: Databasmotorer (t.ex. PostgreSQL, MongoDB) som kräver persistent storage och finjusterade konfigurationsalternativ.
  • Komplex nätverksarkitektur: Service mesh (Istio, Linkerd) kräver att varje tjänst körs i en container för att hantera trafik, mTLS och observabilitet.
  • GPU‑behov: Djupinlärnings‑inferens som behöver tillgång till GPU‑instanser (t.ex. p3.2xlarge) – Lambda stöder för närvarande inte GPU.
  • Portabilitet: Om du planerar att flytta arbetsbelastningar mellan molnleverantörer eller till en lokal miljö.

Hybridstrategi – kombinera serverless och containrar

Många moderna arkitekturer drar nytta av båda världar:

  1. API‑gateway + Lambda för inkommande HTTP‑trafik. API Gateway hanterar autentisering, rate‑limiting och routing, medan Lambda utför affärslogiken.
  2. Event‑driven bearbetning med SQS + Lambda. När volymen överstiger en viss tröskel (t.ex. >5 000 meddelanden per minut) kan du utlösa en ECS‑task eller EKS‑job för att behandla data i bulk, vilket undviker Lambda‑timeouts.
  3. Long‑running workers som containrar i en EKS‑nodgrupp. Dessa kan skalas via Karpenter baserat på ködjup i SQS, vilket ger kostnadseffektiv hantering av stora arbetsmängder.
  4. Databastjänster (RDS, ElastiCache) i privata subnät, åtkomliga från både Lambda och containrar via IAM‑roller och VPC‑säkerhetsgrupper.

Vanliga fallgropar och hur du undviker dem

  • Cold‑start‑latens: Undvik genom att aktivera Provisioned Concurrency för Lambda‑funktioner som betjänar användarupplevelse (t.ex. inloggnings‑API). Alternativt använd Lambda SnapStart för Java‑funktioner.
  • Överdriven paketering: Håll Lambda‑funktioner små ( < 50 MB) för att minska starttid. Applicera lagers (AWS Lambda Layers) för delade bibliotek.
  • Resursöveranvändning i containrar: Sätt resource requests och limits i Kubernetes för att förhindra att en pod suger upp allt minne. Använd Vertical Pod Autoscaler (VPA) för att automatiskt justera.
  • Säkerhetsproblem med breda IAM‑roller: Granska regelbundet Lambda‑funktioners IAM‑roller med AWS IAM Access Analyzer. För containrar, tillämpa Pod Security Standards (Restricted) i Kubernetes.
  • Kostnad överraskningar: Aktivera AWS Budgets och sätt kostnadvarningar för både Lambda och EC2. Övervaka Lambda‑förbrukning per tjänst med CloudWatch Contributor Insights.

Slutsats – Ciro Clouds rekommendation

Som senior cloud‑arkitekt med över 15 års erfarenhet av enterprise‑miljöer kan jag ge dig en konkret riktlinje:

  • Börja med serverless (AWS Lambda) för alla nya mikrotjänster som är händelsestyrda, kortlivade och förväntas ha varierande trafik. Det ger dig snabbare time‑to‑market, minimal operativ overhead och en naturlig pay‑per‑use‑modell som stödjer FinOps‑mål.
  • Använd containrar (EKS) för tjänster som kräver långa körtider, GPU‑resurser, komplexa nätverkskonfigurationer eller strikt compliance‑kontroll. Genom att driftsätta dessa som pod‑baserade arbetsbelastningar får du förutsägbar prestanda och full kontroll.
  • Implementera en hybridarkitektur där API Gateway → Lambda hanterar den yttre trafiken och eventuella tunga bakgrundsjobb delegeras till containrar via en asynkron kö (SQS). Detta mönster har visat sig minimera total ägandekostnad med upp till 30 % jämfört med en ren containerlösning för våra kunder.

På Ciro Cloud rekommenderar vi att du börjar med en ** Proof‑of‑Concept** där en av dina minst kritiska mikrotjänster flyttas till Lambda, mäter latens, kostnad och operativ belastning, och sedan jämför med en likvärdig containerbaserad tjänst i EKS. Baserat på resultaten kan du gradvis skala ut serverless‑ansatsen till fler tjänster eller behålla containrar för de mest krävande delarna av arkitekturen.

Oavsett vilket paradigm du väljer, kom ihåg att molnarkitektur handlar om att hitta rätt balans mellan flexibilitet, prestanda och kostnad – och att den balansen kan skifta över tid allteftersom din verksamhet växer.

Weekly cloud insights — free

Practical guides on cloud costs, security and strategy. No spam, ever.

Comments

Leave a comment