Sobes.tech
Middle

Welke soorten diensten bestaan er en hoe functioneren ze op een laag niveau?

sobes.tech AI

Antwoord van AI

Er zijn verschillende hoofdtypen services in de context van microservice-architectuur en gedistribueerde systemen:

  • Monolithische applicaties: Een enkele, ondeelbare codebasis die alle functionaliteit van de applicatie bevat.
  • Microservices: Een set van kleine, onafhankelijke services, elk geïmplementeerd met een specifieke bedrijfslogica. Ze communiceren via API.
  • Serverless (zonder server): Een computermodel waarbij de cloudprovider dynamisch de toewijzing en schaalvergroting van resources beheert. De ontwikkelaar richt zich alleen op de code van functies.

Op laag niveau werkt het als volgt:

Monolithisch:

Wordt uitgevoerd als een enkel proces. Alle componenten worden gelijktijdig in het geheugen geladen. De interactie tussen componenten gebeurt via functie- of methodoproepen binnen hetzelfde adresruimte. Fouttolerantie wordt bereikt door het reserveren van de hele monoliet. Schaalvergroting is moeilijk, je moet de hele applicatie-instantie schalen. Resourcegebruik is vaak overbodig.

Microservices:

Elke microservice is een apart proces of een set van processen. Werkt in een geïsoleerde omgeving (container, virtuele machine). Interactie gebeurt via het netwerk, meestal via HTTP/gRPC op basis van synchronische of asynchrone protocollen (bijvoorbeeld RabbitMQ, Kafka voor asynchroniciteit). Elke service kan zijn eigen technologische stack en database hebben. Schaalvergroting is onafhankelijk voor elke service. Biedt hoge fouttolerantie (uitval van één service beïnvloedt anderen niet) en beter resourcegebruik. Het beheer wordt complexer (Service Discovery, API Gateway, gedistribueerde logging en monitoring zijn nodig).

Voorbeeld van netwerkinteractie tussen microservices:

// Request aan Service A
GET /users/123 HTTP/1.1
Host: service-a.example.com
// Antwoord van Service A
HTTP/1.1 200 OK
Content-Type: application/json

{
  "id": 123,
  "username": "testuser"
}

Serverless:

De code van de functie wordt gedeployed in een cloud-omgeving. De cloudprovider voert de code uit als reactie op specifieke gebeurtenissen (HTTP-verzoeken, berichten in wachtrijen, wijzigingen in de database). De infrastructuur (servers, OS) wordt beheerd door de provider. Functies zijn meestal kortlevend en stateloos (zonder opslag van toestand tussen aanroepen). Schaalvergroting is automatisch, gebaseerd op het aantal gebeurtenissen. De facturering gebeurt op basis van resourcegebruik (aantal uitvoeringen, uitvoeringstijd). Op laag niveau gebruikt de provider containers of virtuele machines om functies te isoleren en uit te voeren, maar dit niveau is abstract voor de gebruiker.

Voorbeeld van een serverless-functie (AWS Lambda):

# Eenvoudige Lambda-functie
import json

def lambda_handler(event, context):
    # Verwerking van het inkomende evenement
    # Uitvoering van logica
    response_body = {
        "message": "Hallo van Lambda!",
        "input": event
    }

    return {
        "statusCode": 200,
        "body": json.dumps(response_body)
    }

Vergelijkende tabel:

Kenmerk Monolithisch Microservices Serverless
Architectuur Enkele codebasis Onafhankelijke diensten Functies beheerd door gebeurtenissen
Implementatie Enkel proces Onafhankelijk voor elke dienst Beheerd door de provider
Schaalbaarheid Horizontaal (kopiëren) Onafhankelijk voor elke dienst Automatisch, door gebeurtenissen
Fouttolerantie Laag Hoog (geïsoleerd) Hoog (ingebouwd)
Resourcegebruik Gedeeltelijk overbodig Efficiënter Betaling per gebruik
Beheercomplexiteit Laag Hoog Laag (voor infrastructuur)
Communicatie Binnen proces Over netwerk (API, berichten) Via gebeurtenissen van de provider