Serverless Architecture: De Voor- en Nadelen

Ontdek wanneer serverless architectuur wel of niet de juiste keuze is voor jouw applicatie, met praktische voorbeelden.

Jean-Pierre Broeders

Freelance DevOps Engineer

16 februari 20266 min. leestijd
Serverless Architecture: De Voor- en Nadelen

Serverless is een buzzword dat de laatste jaren enorm populair is geworden. Maar wat betekent het eigenlijk, en wanneer moet je het wel of niet gebruiken? In deze post duik ik in de realiteit van serverless architectuur, met concrete voorbeelden en praktische adviezen.

Wat Is Serverless Eigenlijk?

Ondanks de naam draait serverless nog steeds op servers - je hoeft ze alleen niet zelf te beheren. In plaats van een VM of container 24/7 draaiend te houden, betaal je alleen voor de daadwerkelijke compute time die je gebruikt.

Belangrijkste eigenschappen:

  • Event-driven: Code wordt getriggerd door events (HTTP requests, database changes, file uploads)
  • Auto-scaling: Schaalt automatisch van 0 tot duizenden instances
  • Pay-per-use: Betaal alleen voor daadwerkelijke executions
  • Managed infrastructure: Cloud provider regelt servers, patching, scaling

Populaire Serverless Platforms

AWS Lambda

De pionier en marktleider. Ondersteunt Python, Node.js, Go, Java, .NET, Ruby.

// AWS Lambda function (Node.js)
export const handler = async (event) => {
  const body = JSON.parse(event.body);
  
  // Business logic here
  const result = await processData(body);
  
  return {
    statusCode: 200,
    body: JSON.stringify({ success: true, data: result })
  };
};

Azure Functions

Microsoft's serverless platform, naadloze .NET integratie.

// Azure Function (C#)
[FunctionName("ProcessOrder")]
public static async Task<IActionResult> Run(
    [HttpTrigger(AuthorizationLevel.Function, "post")] HttpRequest req,
    ILogger log)
{
    var body = await new StreamReader(req.Body).ReadToEndAsync();
    var order = JsonConvert.DeserializeObject<Order>(body);
    
    await ProcessOrderAsync(order);
    
    return new OkObjectResult(new { success = true });
}

Google Cloud Functions

Google's variant, sterk in data processing en ML workflows.

Wanneer Is Serverless De Juiste Keuze?

✅ Perfecte Use Cases

1. Event-driven workflows

  • Webhook endpoints
  • File processing (upload → resize image → save)
  • Background jobs triggered by queue messages

2. Variabele workloads

  • Traffic pieken (bijv. ticketverkoop events)
  • Periodieke batch jobs (1x per nacht data processing)
  • Onvoorspelbare usage patterns

3. Rapid prototyping

  • MVPs en proof of concepts
  • Experimenten zonder infrastructure overhead
  • Quick integrations tussen services

4. Backend voor mobiele apps

  • REST API endpoints
  • Push notification handlers
  • Authentication flows

❌ Wanneer NIET Serverless Te Gebruiken

1. Lang-lopende processen

  • Lambda heeft een max execution time van 15 minuten
  • Video encoding, machine learning training → gebruik containers

2. Constant high throughput

  • Als je 24/7 traffic hebt, wordt serverless duurder dan dedicated infrastructure
  • Break-even point ligt vaak rond 30-40% constant CPU utilization

3. Low latency requirements

  • Cold starts kunnen 1-3 seconden duren
  • Kritieke real-time apps → gebruik always-on instances

4. Complexe state management

  • Serverless functions zijn stateless
  • Voor stateful apps heb je externe storage nodig (databases, Redis)

Real-World Voorbeeld: Image Processing Pipeline

Een praktisch voorbeeld van waar serverless excelleert:

# Architecture
User uploads image → S3 bucket → triggers Lambda → 
  → Resize image (3 sizes) →
  → Generate thumbnails →
  → Extract metadata →
  → Save to database →
  → Send notification

# AWS SAM template
Resources:
  ImageBucket:
    Type: AWS::S3::Bucket
    Properties:
      NotificationConfiguration:
        LambdaConfigurations:
          - Event: s3:ObjectCreated:*
            Function: !GetAtt ProcessImageFunction.Arn

  ProcessImageFunction:
    Type: AWS::Serverless::Function
    Properties:
      Runtime: nodejs18.x
      Handler: index.handler
      Timeout: 60
      MemorySize: 1024
      Environment:
        Variables:
          THUMBNAIL_SIZES: "150,300,600"

Voordelen hier:

  • Schaalt automatisch met upload volume
  • Geen idle costs wanneer geen uploads
  • Geen server management

Kosten: De Waarheid

Serverless marketing zegt "super goedkoop", maar dat klopt niet altijd.

AWS Lambda pricing (voorbeeld):

  • $0.20 per 1 miljoen requests
  • $0.0000166667 per GB-second compute

Scenario 1: Low traffic API (startup)

  • 100,000 requests/maand
  • Gem. 200ms duration, 512MB memory
  • Kosten: ~$1/maand → ✅ Zeer goedkoop

Scenario 2: High traffic app (scale-up)

  • 50 miljoen requests/maand
  • Gem. 500ms duration, 1GB memory
  • Kosten: ~$400/maand → ⚠️ Dedicated server kan goedkoper

Best Practices

1. Minimize cold starts

// Keep dependencies minimal
// Reuse connections outside handler
const db = require('./db'); // Initialized once

exports.handler = async (event) => {
  // Handler stays lean
  return db.query(event.query);
};

2. Use environment variables

# Don't hardcode configs
DATABASE_URL=postgres://...
API_KEY=secret123
STAGE=production

3. Implement proper error handling

exports.handler = async (event) => {
  try {
    return await processEvent(event);
  } catch (error) {
    console.error('Error:', error);
    // Send to error tracking (Sentry, etc.)
    throw error; // Let Lambda retry
  }
};

4. Monitor en optimize

  • Watch CloudWatch metrics (duration, errors, throttles)
  • Optimize memory allocation (more memory = faster CPU)
  • Use distributed tracing (X-Ray)

Conclusie

Serverless is geen silver bullet, maar een krachtig tool in je architectuur toolkit. Het schittert bij event-driven workloads met variabele traffic, maar is niet altijd de goedkoopste of snelste optie voor constant high-traffic scenarios.

Mijn advies:

  • Start serverless voor nieuwe projects (snelle iteration)
  • Monitor kosten en performance vanaf dag 1
  • Migreer naar dedicated infrastructure als dat economisch zinvol wordt
  • Gebruik hybrid: serverless voor peaks, containers voor baseline

Veelgestelde vragen over serverless

Wat is serverless architectuur? Serverless is een model waarbij je code draait zonder dat je zelf servers beheert. De cloud-provider regelt provisioning, schaling en patching; jij betaalt alleen voor de daadwerkelijke executietijd. Bekende voorbeelden zijn AWS Lambda, Azure Functions en Google Cloud Functions.

Is serverless goedkoper dan een server? Bij lage of sterk wisselende belasting bijna altijd, omdat je niets betaalt als er geen verkeer is. Bij constant hoge belasting (ruwweg vanaf 30-40% continue CPU-benutting) wordt een dedicated server of container vaak goedkoper.

Wat is een cold start? Een cold start is de extra vertraging wanneer een functie na inactiviteit opnieuw moet worden geïnitialiseerd — vaak 1-3 seconden. Voor latency-kritische toepassingen kun je dit beperken met provisioned concurrency of altijd-aan instances.

Wanneer moet je serverless níét gebruiken? Vermijd serverless voor langlopende processen (Lambda stopt na 15 minuten), workloads met constant hoge throughput en applicaties die strikte, lage latency vereisen. Kies dan voor containers of dedicated infrastructuur.

Verder lezen

Wil je op de hoogte blijven?

Schrijf je in voor mijn nieuwsbrief of neem contact op voor freelance projecten.

Neem Contact Op