web-dev-qa-db-fra.com

Quelle est la différence entre une saga, un gestionnaire de processus et une approche documentaire?

Ce que je comprends, c'est que les trois concepts sont liés à des transactions de longue durée.

Un gestionnaire de processus est, à ma connaissance, une machine à états finis qui réagit simplement aux événements et émet des commandes. Il ne contient aucune logique métier, il ne fait que du routage. Son objectif est de vous amener à un état final, où vous savez que votre transaction a réussi ou échoué.

Jusqu'ici tout va bien.

Mais maintenant, mes problèmes de compréhension commencent:

  • Qu'est-ce qu'une saga contrairement à un gestionnaire de processus?
  • Il y a aussi l'approche basée sur les documents, comme mentionné dans sagas CQRS - les ai-je bien compris? … si je comprends bien, un document est juste un "morceau de papier" où vous prenez des notes et la main autour. Comment cela s'inscrit-il dans le concept de commandes et d'événements?

Quelqu'un peut-il expliquer les différences et - ce qui m'intéresserait particulièrement - lequel de ces concepts est bon pour quoi et quand vous en avez besoin. Sont-ils mutuellement exclusifs? Pouvez-vous aller jusqu'au bout avec un seul d'entre eux? Y a-t-il des scénarios où vous en avez besoin de plus d'un? …?

49
Golo Roden

Qu'est-ce qu'une saga contrairement à un gestionnaire de processus?

L'intention de ces modèles est différente. Un gestionnaire de processus est un modèle de flux de travail qui peut, comme vous le dites, être construit au-dessus d'une machine d'état. Un gestionnaire de processus conservera l'état entre les messages et contiendra une logique afin de déterminer quelle action doit être prise en réponse à un message (par exemple, transitionner l'état ou envoyer un autre message). Certains cadres les appellent à tort sagas.

En revanche, une saga (selon les définitions originales) est un modèle destiné à aider à gérer les échecs. Cela implique de multiples workflows à travers les systèmes, où chacun permettra une certaine forme d'action compensatrice à prendre dans une transaction ultérieure dans le cas d'une défaillance ailleurs.

Cette compensation est la caractéristique déterminante d'une saga. Notez que la saga elle-même ne sait pas quoi l'action de compensation pourrait être. Les sagas sont souvent implémentées en utilisant le modèle de glissement de routage.

Sont-ils mutuellement exclusifs? Pouvez-vous aller jusqu'au bout avec un seul d'entre eux?

Ils ne s'excluent pas mutuellement - il est probable, par exemple, qu'un système participant à une saga utilise un gestionnaire de processus pour gérer réellement son élément de traitement.

Autres ressources

Certains de ces messages peuvent aider à fournir plus de détails et à fournir des exemples:

40
James Nugent

Jetez un œil au projet Journey du CQRS sur MSDN:

http://msdn.Microsoft.com/en-us/library/jj591569.aspx

Clarifier la terminologie

Le terme saga est couramment utilisé dans les discussions sur CQRS pour faire référence à un morceau de code qui coordonne et achemine les messages entre des contextes bornés et des agrégats. Cependant, aux fins de ce guide, nous préférons utiliser le terme gestionnaire de processus pour faire référence à ce type d'artefact de code. Il y a deux raisons à cela:

Il existe une définition bien connue et préexistante du terme saga qui a une signification différente de celle généralement comprise par rapport au CQRS. Le terme gestionnaire de processus est une meilleure description du rôle joué par ce type d'artefact de code.

Bien que le terme saga soit souvent utilisé dans le contexte du modèle CQRS, il a une définition préexistante. Nous avons choisi d'utiliser le terme gestionnaire de processus dans ce guide pour éviter toute confusion avec cette définition préexistante.

Le terme saga, en relation avec les systèmes distribués, a été initialement défini dans l'article "Sagas" par Hector Garcia-Molina et Kenneth Salem. Cet article propose un mécanisme qu'il appelle une saga comme alternative à l'utilisation d'une transaction distribuée pour gérer un processus métier de longue durée. Le document reconnaît que les processus métier sont souvent composés de plusieurs étapes, chacune impliquant une transaction, et que la cohérence globale peut être obtenue en regroupant ces transactions individuelles en une transaction distribuée. Cependant, dans les processus métier de longue durée, l'utilisation de transactions distribuées peut avoir un impact sur les performances et la simultanéité du système en raison des verrous qui doivent être maintenus pendant la durée de la transaction distribuée.

26
Jakub Konecki

Saga n'a pas d'état alors que Process Manager l'a.

Une autre différence - Process Manager est une machine d'état, Saga ne l'est pas.

Saga n'a pas

  • état de la machine d'état
  • état des données (certaines données persistantes)

.. et Process Manager a

  • état de la machine d'état
  • état des données (certaines données persistantes)

En savoir plus sur mon blog: http://blog.devarchive.net/2015/11/saga-vs-process-manager.html

Saga et Process Manager sont deux modèles d'intégration. Ils se ressemblent beaucoup, mais pas au total.

  • Saga est un modèle qui vous aide à implémenter chaque transaction commerciale qui couvre plusieurs services en tant que saga. En fait, vous allez créer une séquence de transactions locales où chaque transaction locale met à jour la base de données et publie un message ou un événement pour déclencher la prochaine transaction locale dans la saga. Il existe deux façons d'implémenter une saga: l'orchestration (un orchestrateur indique aux participants les transactions locales à exécuter) et la chorégraphie (chaque transaction locale publie des événements de domaine qui déclenchent des transactions locales dans d'autres services). Il est très courant que l'utilisation de Saga détermine l'utilisation de CQRS et EventSourcing.
  • Process Manager est une unité de traitement qui existe afin de conserver l'état de la séquence et de déterminer la prochaine étape de traitement en fonction des résultats intermédiaires. C'est un modèle de routage. Cela ressemble plus à une saga d'orchestrateur.
4
Dina Bogdan

Process manager et saga acheminent un message à travers plusieurs étapes de traitement lorsque les étapes requises peuvent ne pas être connues au moment de la conception et ne pas être séquentielles.

modèle de gestionnaire de processus est un planificateur d'événements durable qui encapsule la logique spécifique au processus et maintient un point central de contrôle pour décider quoi exécuter ensuite une fois le processus terminé. Les gestionnaires de processus maintiennent l'état, par exemple, disent qu'un paiement a été prélevé sur un client, le fait qu'une commande doit maintenant leur être envoyée est conservé dans le gestionnaire de processus.

modèle de gestionnaire Saga. Encapsule la logique du processus en décidant quoi exécuter ensuite une fois le processus terminé. Une saga ne détient aucun état et décide donc quoi faire ensuite entièrement en fonction du contenu du message ou de l'événement entrant. Donc, dans le cas où un paiement est effectué par un processus, ce processus crée également un nouveau message indiquant qu'une commande doit maintenant être envoyée, y compris ce qui doit être envoyé et à qui. Le message contient également des informations de paiement supplémentaires. En cas de problème lors de l'envoi de la commande, le paiement est remboursé.

2
andrew pate