tadata
← Retour à l'accueil

Patterns et Anti-Patterns des Microservices

#microservices#architecture#api#distributed-systems

Les microservices promettent le déploiement indépendant, l'autonomie des équipes et la flexibilité technologique. Ils apportent aussi la complexité des systèmes distribués, la non-fiabilité du réseau et une charge opérationnelle élevée. Connaître les bons patterns -- et éviter les anti-patterns -- sépare les implémentations réussies des monolithes distribués.

Stratégies de décomposition

Comment vous découpez un monolithe compte plus que le fait de le découper.

StratégieApprocheQuand l'utiliser
Par capacité métierAligner les services sur les domaines métierFrontières de domaine stables
Par sous-domaine (DDD)Utiliser les bounded contexts du DDDDomaines complexes avec séparations claires
Strangler figExtraire progressivement des services du monolitheMigration incrémentale
Par équipeUn service par équipe (loi de Conway inverse)Alignement organisationnel

Communication inter-services

PatternProtocoleCas d'usageCompromis
REST synchroneHTTP/JSONOpérations CRUD simplesCouplage fort, pannes en cascade
gRPC synchroneHTTP/2 + ProtobufAPIs internes haute performanceGestion de schémas, moins lisible
Messaging asyncAMQP, KafkaWorkflows event-drivenConsistance éventuelle, debug plus difficile
Request-reply asyncIDs de corrélation sur filesOpérations longuesComplexité de suivi

Le pattern Saga pour les transactions distribuées

Les transactions ACID classiques ne couvrent pas plusieurs services. Le pattern saga coordonne les opérations multi-services :

Saga basée sur la chorégraphie :

  • Chaque service publie des événements et écoute ceux des autres
  • Pas de coordinateur central
  • Simple pour 2-3 services, complexe au-delà

Saga basée sur l'orchestration :

  • Un orchestrateur central dirige le workflow
  • Chaque service expose une action compensatoire pour le rollback
  • Plus facile à comprendre, mais l'orchestrateur concentre la logique
AspectChorégraphieOrchestration
CouplageFaibleMoyen (vers l'orchestrateur)
VisibilitéFlux difficile à tracerDéfinition de workflow claire
Complexité à l'échelleCroît exponentiellementCroît linéairement
Idéal pourWorkflows simplesProcessus multi-étapes complexes
tadata
Saga de commande avec compensations Step Functions Start order Fail:OrderCancelled Inventory Reserve stock Release stock Payments Charge card Refund card Shipping Createshipment(fails)
Saga de commande avec compensations Step Functions Start order Fail:OrderCancelled Inventory Reserve stock Release stock Payments Charge card Refund card Shipping Createshipment(fails)

Extrait de la fiche « AWS Step Functions: Orchestrating Serverless Workflows » · Demander la fiche complète

Service Mesh

Un service mesh gère les préoccupations transversales au niveau infrastructure :

  • Gestion du trafic -- routage, load balancing, déploiements canary
  • Sécurité -- TLS mutuel, politiques d'autorisation
  • Observabilité -- tracing distribué, métriques, logs d'accès
  • Résilience -- retries, circuit breakers, timeouts

Options populaires : Istio (riche, complexe), Linkerd (léger, plus simple), Consul Connect (écosystème HashiCorp).

tadata
Edge Services (mesh) HTTPS mTLS mTLS publish subscribe CDN + WAF API gateway Orders svc Users svc Payments svc Message bus Orders DB Users DB Payments DB external entity process data store
Edge Services (mesh) HTTPS mTLS mTLS publish subscribe CDN + WAF API gateway Orders svc Users svc Payments svc Message bus Orders DB Users DB Payments DB external entity process data store
Architecture de référence microservices. Les appels externes n'entrent que par la gateway ; les appels internes passent de service à service par le mesh (TLS mutuel) ; les événements transitent par le bus. Chaque service possède sa propre base de données. Les cadres en pointillés sont des frontières de confiance : chaque flèche qui en traverse une est un point où authentifier et valider

Extrait de la fiche « Web Application and Microservices Architecture » · Demander la fiche complète

Anti-patterns critiques

Anti-PatternSymptômeCorrection
Monolithe distribuéLes services doivent être déployés ensembleAppliquer des contrats d'API, réduire les BDD partagées
BDD partagéePlusieurs services écrivent dans les mêmes tablesUne BDD par service, événements pour la sync
Services bavardsCentaines d'appels inter-services par requêteAPIs agrégées, pattern BFF
Nano-servicesServices trop petits pour justifier l'overheadFusionner les services liés
Service dieuUn service gère trop de logiqueDécomposer par bounded context
Chaine synchroneA appelle B appelle C appelle D en synchroneMessaging async, event-driven

Quand le monolithe est préférable

  • Petite équipe (< 10 ingénieurs) -- la charge opérationnelle dépasse les bénéfices
  • Produit en phase initiale -- les frontières de domaine ne sont pas encore claires
  • Domaine simple -- les apps CRUD n'ont pas besoin de complexité distribuée
  • Faible échelle -- si un seul serveur gère la charge, ne la distribuez pas
  • Latence stricte -- chaque saut réseau ajoute de la latence

Un monolithe modulaire bien structuré peut offrir la plupart des bénéfices organisationnels des microservices sans la taxe systèmes distribués.

Microservices ou monolithe

tadata

Pros

  • Independent deploy and scaling per service
  • Team autonomy and clear ownership
  • Fault isolation if boundaries are right
  • Polyglot: right tool per service

Cons

  • Distributed systems are hard: partial failure, latency
  • Data consistency across services (no cross-service transactions)
  • Operational overhead: many pipelines, dashboards
  • Bigger attack surface: every service is a network endpoint

Extrait de la fiche « Web Application and Microservices Architecture » · Demander la fiche complète

Ressources

Nous utilisons des cookies analytiques pour améliorer votre expérience. Aucune donnée personnelle n'est collectée.