Sobes.tech
Middle

Quels types de services existent et comment fonctionnent-ils à un niveau basique?

sobes.tech IA

Réponse de l'IA

Il existe plusieurs types principaux de services dans le contexte de l'architecture microservices et des systèmes distribués :

  • Applications monolithiques : Une base de code unique et indivisible contenant toutes les fonctionnalités de l'application.
  • Microservices : Un ensemble de petits services indépendants, chacun implémentant une logique métier spécifique. Ils interagissent entre eux via des API.
  • Serverless (sans serveur) : Modèle de calcul où le fournisseur de cloud gère dynamiquement l'allocation et la mise à l'échelle des ressources. Le développeur se concentre uniquement sur le code des fonctions.

Au niveau inférieur, le fonctionnement est le suivant :

Monolithique :

S'exécute en tant que processus unique. Tous les composants sont chargés en mémoire simultanément. L'interaction entre composants se fait via des appels de fonctions ou de méthodes dans un même espace d'adresses. La tolérance aux pannes est assurée par la réservation de tout le monolithe. La mise à l'échelle est difficile, il faut mettre à l'échelle toute l'instance de l'application. L'utilisation des ressources est souvent redondante.

Microservices :

Chaque microservice est un processus séparé ou un ensemble de processus. Fonctionne dans un environnement isolé (conteneur, machine virtuelle). L'interaction se fait via le réseau, généralement par HTTP/gRPC sur des protocoles synchrones ou asynchrones (par exemple, RabbitMQ, Kafka pour l'asynchronie). Chaque service peut avoir sa propre pile technologique et sa propre base de données. La mise à l'échelle est indépendante pour chaque service. Assure une haute tolérance aux pannes (la panne d'un service n'affecte pas les autres) et une meilleure utilisation des ressources. La gestion est plus complexe (Service Discovery, API Gateway, journalisation et surveillance distribuées nécessaires).

Exemple d'interaction réseau entre microservices :

// Requête au Service A
GET /users/123 HTTP/1.1
Host: service-a.example.com
// Réponse du Service A
HTTP/1.1 200 OK
Content-Type: application/json

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

Serverless :

Le code de la fonction est déployé dans un environnement cloud. Le fournisseur cloud exécute le code en réponse à des événements spécifiques (requêtes HTTP, messages en file d'attente, changements dans la base de données). L'infrastructure (serveurs, OS) est gérée par le fournisseur. Les fonctions sont généralement de courte durée et sans état (sans conservation d'état entre les appels). La mise à l'échelle est automatique, basée sur le nombre d'événements. La facturation se fait en fonction de la consommation de ressources (nombre d'exécutions, temps d'exécution). Au niveau inférieur, le fournisseur utilise des conteneurs ou des machines virtuelles pour isoler et exécuter les fonctions, mais ce niveau est abstrait pour l'utilisateur.

Exemple de fonction Serverless (AWS Lambda) :

# Fonction Lambda simple
import json

def lambda_handler(event, context):
    # Traitement de l'événement entrant
    # Exécution de la logique
    response_body = {
        "message": "Bonjour de Lambda!",
        "input": event
    }

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

Tableau comparatif :

Caractéristique Monolithique Microservices Serverless
Architecture Base de code unique Services indépendants Fonctions gérées par événements
Déploiement Processus unique Indépendant pour chaque service Géré par le fournisseur
Scalabilité Horizontale (copie) Indépendante pour chaque service Automatique, par événements
Tolérance aux pannes Faible Élevée (isolés) Élevée (intégrée)
Utilisation des ressources Partiellement redondante Plus efficace Paiement à l'usage
Complexité de gestion Faible Élevée Faible (pour l'infrastructure)
Communication Intra-processus Sur réseau (API, messages) Via les événements du fournisseur