Publié 2026-01-19
Construire des microservices est comme des blocs de construction. C’est magnifique que chaque module fonctionne indépendamment. Mais une fois le traitement des transactions interservices impliqué, la belle image se brise facilement en morceaux : la commande est créée mais l'inventaire n'est pas déduit, le paiement est réussi mais la logistique n'est pas déclenchée, vous avez peut-être rencontré de si mauvaises choses.
Imaginez : vous achetez un livre en ligne et après avoir cliqué pour payer, le système vous invite à réussir. Quelques jours plus tard, j'ai reçu un email disant "Commande annulée en raison d'un stock insuffisant", mais l'argent avait déjà été déduit. Il ne s'agit pas d'un scénario fictif, mais d'un problème typique d'incohérence des données dans les systèmes distribués. Les transactions de base de données traditionnelles fonctionnent bien dans une seule application, mais une fois divisées en microservices, chaque service utilise sa propre base de données et les transactions ACID ne peuvent pas traverser les frontières du réseau.

Certaines personnes ont donc essayé la validation en deux phases (2PC), mais les goulots d'étranglement des performances et les problèmes de blocage de synchronisation ont découragé de nombreuses équipes. En particulier dans les scénarios à forte concurrence, le coordinateur devient un point de défaillance unique et la disponibilité globale du système diminue. C'est comme demander à un chef d'orchestre de coordonner la performance de dix orchestres en même temps. Si le rythme est légèrement mal aligné, le morceau entier sera gâché.
L'idée de base de Saga est assez simple : diviser une longue transaction en une série de transactions locales et déclencher la suivante une fois chaque transaction terminée. Si une étape intermédiaire échoue, une série d'opérations de compensation est effectuée pour annuler l'impact précédent. Il ne recherche pas l’atomicité, mais garantit une cohérence éventuelle.
Cela semble un peu abstrait ? Prenons un exemple concret : vous organisez une tournée de conférences dans plusieurs villes. L'approche traditionnelle consiste à attendre que tous les sites soient confirmés avant d'annoncer l'itinéraire, mais cela risque de manquer la meilleure période de publicité. L'idée de Saga est de finaliser d'abord le premier lieu, puis de réserver le deuxième lieu, puis le troisième... S'il y a un problème temporaire avec un certain lieu de la ville, le lieu suivant prévu sera annulé et un plan alternatif sera coordonné. L’ensemble du processus n’est peut-être pas complètement synchronisé, mais c’est lui qui, en fin de compte, permettra à la tournée d’avoir lieu.
Une saga orchestrée est comme un metteur en scène qui raconte une pièce de théâtre : il y a un coordinateur central (généralement appelé orchestrateur) qui dit à chaque service quoi faire et quand le faire. Les services ne communiquent pas directement entre eux, ils parlent uniquement au coordinateur. Cette approche est logiquement centralisée et facile à comprendre et à déboguer, mais le coordinateur peut facilement devenir un goulot d'étranglement. Il convient aux scénarios comportant peu d’étapes de transaction et des processus stables.
Une saga de concertos ressemble plus à une improvisation jazz : une fois que chaque service a terminé sa tâche, elle publie un événement pour avertir le service suivant. Il n'y a pas de commande centrale et les services sont pilotés par les événements. Cette solution présente une bonne évolutivité et un faible couplage de services, mais il est laborieux de suivre l'ensemble du flux de transactions, et le débogage lorsqu'une erreur se produit revient à résoudre un casse-tête.
Lequel choisir ? Si votre équipe maîtrise l'architecture événementielle et que les étapes des transactions changent fréquemment, Concerto est plus flexible. Si vous recherchez la contrôlabilité et l’observabilité des processus, l’orchestration peut être plus pratique. Il n'y a pas d'avantage ou d'inconvénient absolu, seulement une correspondance de scène.
Le changement le plus intuitif après l'adoption du mode Saga est que le débit du système augmente : parce que les services n'attendent plus la synchronisation, l'utilisation des ressources augmente naturellement. Plus important encore, cela rend le système « résilient » : l'indisponibilité temporaire d'un certain service ne bloquera pas l'ensemble de la transaction, et le mécanisme de compensation laisse la possibilité de réparer et de réessayer.
Il existe un cas pratique : pendant une période de promotion, une plateforme de commerce électronique a subi une pression excessive du service de commande et a ralenti sa réponse. Dans le mode de transaction traditionnel, les services de paiement et d'inventaire attendront simultanément la réponse du service de commande, ce qui entraînera l'expiration et l'échec du paiement de l'utilisateur. Après le passage à la mise en œuvre de Saga, le retard du service de commande n'affecte que son propre processus de compensation. Les services de paiement et d'inventaire peuvent toujours être traités de manière asynchrone et le taux de réussite des paiements des utilisateurs est beaucoup plus élevé.
Une implémentation de Saga bien conçue présente généralement plusieurs caractéristiques : les opérations de compensation sont idempotentes (une exécution répétée a le même effet), le statut de la transaction est traçable et les délais d'attente et les mécanismes de nouvelle tentative sont raisonnables. Cela ressemble à des détails techniques, mais ils affectent directement l’expérience de développement.
kpuissanceFace à de telles exigences, nous avons constaté que de nombreuses équipes étaient bloquées dans la conception de la logique de rémunération. Par exemple, la compensation pour « réduire l'inventaire » est « restaurer l'inventaire », mais l'expiration du réseau peut entraîner la répétition de l'opération de compensation. Si vous exécutez simplement « Inventaire +1 », plusieurs compensations entraîneront une confusion des données. Par conséquent, dans leur solution, l'opération de compensation vérifiera si l'ID de transaction d'origine a été traité pour éviter une accumulation répétée.
Si vous constatez que votre équipe passe beaucoup de temps à s'occuper du nettoyage des données « partiellement réussi », ou que l'intégralité du lien est bloquée parce qu'un service est en panne, il est temps de jeter un œil à Saga. En particulier lorsque l'entreprise implique un traitement asynchrone en plusieurs étapes (par exemple, l'achat de cours en ligne implique la sélection de cours, le paiement, l'activation d'autorisations et l'envoi de notifications), ces étapes sont naturellement adaptées à la coordination de Saga.
Au début de la mise en œuvre, il est recommandé de piloter à petite échelle et de sélectionner un processus non essentiel mais typique à transformer en premier. Enregistrez le taux d'erreur, le temps d'achèvement des transactions et les modifications des coûts de développement et de débogage avant et après la transformation. Les données vous diront si cela vaut la peine d’être promu.
Saga n’est pas une solution miracle. Des opérations de compensation mal conçues peuvent causer des « préjudices secondaires » – tels que des remboursements et des déductions répétées. Les événements hors commande peuvent conduire à des statuts incohérents, par exemple, l'événement « annulation de commande » arrive avant l'événement « création de commande ». Ces questions doivent être soigneusement conçues en collaboration avec l’entreprise.
Une stratégie pratique consiste à ajouter un numéro de version ou un horodatage à chaque étape de la transaction et à vérifier la commande lorsque le service en aval la traite. Il est recommandé de mettre en place un panneau de surveillance Saga pour afficher les transactions en cours et les statuts anormaux en temps réel afin de faciliter une intervention rapide. Après tout, quelle que soit la qualité de l’automatisation, elle nécessite toujours un travail manuel.
Les systèmes distribués sont comme plusieurs personnes collaborant pour réaliser des travaux manuels : une synchronisation complète est inefficace et une asynchronité totale est sujette au chaos. Saga trouve un juste milieu : laisser toutes les personnes impliquées travailler à leur propre rythme tout en garantissant que le produit final est complet. Ce n'est pas parfait, mais cela fait passer de nombreux projets de microservices de "à peine exécutés" à une "collaboration fluide".
La prochaine fois que vous aurez un problème de cohérence des données entre les services, jetez un œil aux transactions. Peut-être que ces flux commerciaux apparemment complexes doivent simplement être connectés d’une autre manière.
Créé en 2005,kpuissancea été dédié à un fabricant professionnel d'unités de mouvement compactes, dont le siège est à Dongguan, province du Guangdong, en Chine. Tirant parti des innovations en matière de technologie d'entraînement modulaire,kpuissanceintègre des moteurs hautes performances, des réducteurs de précision et des systèmes de contrôle multiprotocoles pour fournir des solutions de systèmes d'entraînement intelligents efficaces et personnalisées. Kpower a fourni des solutions de systèmes d'entraînement professionnelles à plus de 500 entreprises clientes dans le monde avec des produits couvrant divers domaines tels que les systèmes de maison intelligente, l'électronique automatique, la robotique, l'agriculture de précision, les drones et l'automatisation industrielle.
Heure de mise à jour:2026-01-19
Contactez le spécialiste des produits Kpower pour recommander un moteur ou une boîte de vitesses adapté à votre produit.