Une formation de cinq jours sur la conception et la construction de microservices avec Python. Des principes d'architecture et du domain-driven design à l'infrastructure de production et aux patterns distribués avancés.

Durée 5 jours (35 heures)
Format 50 pour cent présentation, 50 pour cent exercices
Prérequis Solides fondamentaux Python requis, expérience en développement web recommandée
Supports Machines virtuelles fournies, supports de cours électroniques

Jour 1 — Principes d'architecture

Monolithe vs Microservices

  • Architecture monolithique : forces, limites, quand elle atteint ses limites
  • Microservices : avantages, coûts, quand découper
  • Le spectre : monolithe modulaire, macro-services, micro-services

Architecture hexagonale

  • Ports et adaptateurs : séparation de la logique métier et de l'infrastructure
  • Inversion de dépendances : orienter les dépendances vers l'intérieur
  • Patterns d'architecture propre : entités, cas d'usage, interfaces

Bases du Domain-Driven Design

  • Langage ubiquitaire et contextes délimités
  • Entités, objets valeur et agrégats
  • Événements de domaine et services de domaine

Jour 2 — Conception de services

Contextes délimités et contrats d'API

  • Définition des frontières de services à partir des domaines métier
  • Contrats d'API : OpenAPI, protocol buffers, contrats pilotés par le consommateur
  • Stratégies de versionnage : versionnage par URL, par en-tête, rétrocompatibilité

Communication événementielle

  • Message brokers : concepts RabbitMQ, exchanges, files, routage
  • Concepts Apache Kafka : topics, partitions, groupes de consommateurs
  • Pattern CQRS : séparation des modèles de lecture et d'écriture
  • Event sourcing : stockage de l'état sous forme de séquence d'événements

Jour 3 — Implémentation avec Python

Squelette de service

  • Structure de projet pour un microservice hexagonal
  • Injection de dépendances avec Python : injection manuelle, bibliothèque inject
  • Pattern Repository : abstraction de l'accès aux données
  • Pattern Unit of Work : gestion des transactions

Communication inter-services

  • REST : appels HTTP synchrones entre services
  • gRPC : protocol buffers, définitions de services, stubs Python
  • Messaging asynchrone : publication et consommation d'événements
  • Découverte de services : patterns de registre, découverte basée sur DNS

Jour 4 — Infrastructure

Conteneurisation et orchestration

  • Docker Compose pour le développement local : configurations multi-services
  • Bases de Kubernetes : pods, déploiements, services, config maps
  • CI/CD pour microservices : pipelines de déploiement indépendants

Observabilité

  • Journalisation structurée : identifiants de corrélation, agrégation de logs
  • Métriques : Prometheus, compteurs, histogrammes, tableaux de bord
  • Traçage distribué : OpenTelemetry, Jaeger

Résilience

  • Vérifications de santé : sondes de vivacité, sondes de disponibilité
  • Patterns de résilience : réessais, timeouts, cloisons
  • Dégradation gracieuse et stratégies de repli

Jour 5 — Patterns avancés et Projet

Patterns avancés

  • Pattern Saga : orchestration vs chorégraphie pour les transactions distribuées
  • Circuit breaker : prévention des pannes en cascade
  • Pattern Outbox : publication fiable d'événements avec transactions de base de données
  • Patterns API Gateway : routage, authentification, limitation de débit

Stratégies de test

  • Tests unitaires de services hexagonaux : mocking des ports et adaptateurs
  • Tests d'intégration : tests avec de vraies bases de données et message brokers
  • Tests de contrat : garantir la compatibilité des APIs entre services
  • Tests de bout en bout : tester le système complet

Migration et Projet

  • Migration depuis un monolithe : pattern strangler fig, extraction incrémentale
  • Projet pratique : conception et implémentation d'un système multi-services