Strangler Fig Pattern
Pattern architectural permettant de migrer progressivement un système legacy vers une nouvelle architecture en l'enveloppant graduellement.
Mis à jour le 11 janvier 2026
Le Strangler Fig Pattern est une stratégie de migration architecturale inspirée de la nature, où certaines plantes (figuiers étrangleurs) poussent autour d'un arbre hôte jusqu'à le remplacer complètement. Dans le contexte logiciel, ce pattern permet de moderniser progressivement un système legacy en développant de nouvelles fonctionnalités à côté de l'ancien système, puis en redirigeant graduellement le trafic vers la nouvelle implémentation. Cette approche minimise les risques liés aux grandes migrations et permet une transition en douceur sans interruption de service.
Fondements du Pattern
- Migration incrémentale plutôt que réécriture complète (big bang)
- Coexistence temporaire des systèmes ancien et nouveau via une façade
- Redirection progressive du trafic vers les nouveaux services
- Décommissionnement graduel des fonctionnalités legacy une fois migrées
- Possibilité de rollback à chaque étape de la migration
Avantages Business et Techniques
- Réduction drastique du risque comparé à une réécriture complète
- Continuité de service garantie pendant toute la migration
- ROI rapide grâce à la livraison incrémentale de nouvelles fonctionnalités
- Apprentissage continu et ajustements possibles en cours de migration
- Équipes peuvent travailler en parallèle sur ancien et nouveau système
- Facilite l'adoption progressive de nouvelles technologies et architectures
- Permet de prioriser les modules selon leur valeur business
Exemple Concret d'Architecture
Imaginons une migration d'un monolithe e-commerce vers une architecture microservices. Voici comment structurer la façade de routage qui orchestre la transition :
// Façade gérant le routage entre legacy et nouveaux services
class StranglerFacade {
private featureFlags: FeatureFlagService;
private legacySystem: LegacyMonolith;
private modernServices: Map<string, MicroService>;
async handleRequest(request: Request): Promise<Response> {
const route = this.parseRoute(request);
// Déterminer si la fonctionnalité est migrée
if (this.isMigrated(route)) {
// Router vers le nouveau microservice
const service = this.modernServices.get(route.domain);
return await service.handle(request);
}
// Sinon, utiliser le système legacy
return await this.legacySystem.handle(request);
}
private isMigrated(route: Route): boolean {
// Vérifier via feature flags pour un rollout progressif
return this.featureFlags.isEnabled(
`migrate_${route.domain}`,
{ userId: route.userId, percentage: 20 }
);
}
}
// Configuration de migration progressive
const migrationPlan = {
phase1: ['product-catalog', 'search'], // Semaines 1-4
phase2: ['shopping-cart', 'checkout'], // Semaines 5-8
phase3: ['user-profile', 'recommendations'], // Semaines 9-12
phase4: ['orders', 'payments'] // Semaines 13-16
};Mise en Œuvre Étape par Étape
- Analyser le système legacy et identifier les domaines fonctionnels à migrer en priorité (valeur business vs complexité)
- Mettre en place une façade/proxy qui intercepte toutes les requêtes entrantes
- Développer le premier module dans la nouvelle architecture en parallèle du système existant
- Implémenter un mécanisme de feature flags pour router progressivement le trafic (ex: 5%, puis 25%, 50%, 100%)
- Synchroniser les données entre ancien et nouveau système pendant la coexistence (event streaming, CDC)
- Monitorer méticuleusement les performances et erreurs des deux systèmes
- Une fois le nouveau module stable à 100% du trafic, décommissionner le code legacy correspondant
- Répéter le processus pour chaque module jusqu'à migration complète
Conseil Pro
Commencez toujours par migrer un module à faible criticité mais à forte visibilité (ex: catalogue produits en read-only). Cela permet de valider l'architecture de la façade et les processus de déploiement avec un risque minimal, tout en démontrant rapidement de la valeur aux parties prenantes. Utilisez des feature flags avec rollout progressif (1% → 5% → 25% → 50% → 100%) pour chaque migration.
Outils et Technologies Associés
- API Gateways : Kong, AWS API Gateway, Azure API Management pour implémenter la façade
- Feature Flags : LaunchDarkly, Unleash, Split.io pour le routage progressif
- Service Mesh : Istio, Linkerd pour le traffic splitting au niveau réseau
- Change Data Capture : Debezium, AWS DMS pour la synchronisation des données
- Monitoring : Datadog, New Relic, Prometheus pour comparer legacy vs nouveau
- Proxy reverses : NGINX, Envoy, Traefik comme point d'entrée unique
Le Strangler Fig Pattern représente la stratégie la plus sûre pour moderniser des systèmes critiques en production. En permettant une migration incrémentale avec validation continue, ce pattern réduit significativement les risques financiers et opérationnels comparé aux approches big bang. Les organisations peuvent ainsi moderniser leur stack technologique tout en continuant à délivrer de la valeur business, transformant une migration potentiellement paralysante en un processus gérable et mesurable.
