Microservices et architecture hexagonale
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
