Question

J'aimerais connaître les problèmes spécifiques que vous - le lecteur SO - avez résolus à l'aide des moteurs de workflow et quelles bibliothèques/frameworks vous avez utilisés si vous n'avez pas lancé le vôtre.J'aimerais également savoir quand un moteur de workflow n'était pas le meilleur choix et si/comment vous avez choisi quelque chose de plus simple, comme une application de type TaskList/WorkList/Task-Management utilisant des machines à états.

Des questions:

  • Quels problèmes avez-vous résolus à l’aide de moteurs de workflow ?
  • Quelles bibliothèques/frameworks avez-vous utilisés ?
  • Quand un système plus simple de type machine d'état/gestion des tâches a-t-il suffi ?
  • Prime:Comment avez-vous/faites-vous la distinction entre Gestion des tâches et Moteur de flux de travail?

Je recherche des expériences concrètes.

Certaines des ressources que j'ai consultées :

Était-ce utile?

La solution

Je suis également partial, car je suis l'auteur principal de Chemin de pierre.

J'ai développé des applications de workflow pour les États-Unis.Département d'État, le Centre de déminage humanitaire de Genève, plusieurs clients Fortune 500 et, plus récemment, le système scolaire public de Washington DC.Chaque fois que j'ai vu un « moteur de workflow » qui essayait d'être la référence unique pour les processus métiers, j'ai vu une organisation se battre pour contourner cet outil.Cela peut être dû au fait que ces solutions ont toujours été axées sur le fournisseur/produit, et se retrouvent ensuite avec une équipe tactique de « consultants » alimentant constamment l'application...mais pour cette raison, j'ai tendance à réagir négativement lorsque j'entends parler des avantages des outils basés sur des processus qui promettent de « centraliser les définitions de flux de travail en un seul endroit et de les rendre reproductibles ».

Cela dit, j'aime beaucoup Ruote - je suis ce projet depuis un certain temps et si j'ai besoin de ce genre de solution, ce sera le prochain outil que je serai prêt à essayer.StonePath a un objectif très différent de ruote - là où Ruote est utile à Ruby en général, StonePath est destiné à Rails, le framework Web écrit en Ruby.Alors que Ruote concerne les processus métier de longue durée et leurs définitions associées, StonePath concerne la gestion des flux de travail et des tâches basés sur l'état.Franchement, je pense que la distinction avec l'extérieur peut être subtile - souvent les mêmes types de processus métier peuvent être représentés d'une manière ou d'une autre - le modèle basé sur l'état et les tâches a cependant tendance à correspondre à mon modèle mental.

Permettez-moi de décrire les points forts d'un flux de travail basé sur l'état.En bref, imaginez un flux de travail centré sur le traitement de quelque chose comme un prêt hypothécaire ou le renouvellement d'un passeport.À mesure que le document se déplace « dans le bureau », il voyage d'un État à l'autre.Imaginez si vous êtes responsable du document et que votre patron vous demande toutes les quelques heures une mise à jour de son statut et souhaite une brève réponse...vous diriez des choses comme "C'est en cours de saisie de données"..."Nous vérifions actuellement les informations d'identification du candidat"..."nous attendons un examen de la qualité"..."Nous avons fini"...et ainsi de suite.Il s'agit des états dans un flux de travail basé sur l'état.Nous passons d'un état à l'autre via des transitions - comme "approuver", "appliquer", le pot-de-vin, "refuser", etc.ce sont généralement des verbes d’action.Des choses comme celle-ci sont constamment modélisées dans les logiciels comme une machine à états.

La partie suivante d'un flux de travail basé sur un état/tâche est la création de tâches.Une tâche est une unité de travail, généralement avec une date d'échéance et des instructions de traitement, qui relie un élément de travail (la demande de prêt ou le renouvellement du passeport, par exemple) à une « boîte de réception » d'un utilisateur.Les tâches peuvent se dérouler en parallèle les unes avec les autres ou de manière séquentielle, et nous pouvons créer des tâches automatiquement lorsque nous entrons dans des états, créer des tâches manuellement lorsque les gens réalisent que le travail doit être effectué et exiger que les tâches soient terminées avant de pouvoir passer à un nouvel état.Tout ce type de comportement est facultatif et fait partie de la définition du workflow.

Le terrier du lapin peut aller bien plus loin que cela, et j'ai écrit un article à ce sujet dans le numéro 4 de PragPub, le magazine Pragmatic Programmer's.Consultez le lien reo ci-dessus pour un PDF mis à jour de cet article.

En travaillant avec StonePath ces derniers mois, j'ai constaté que le modèle basé sur l'état correspond très bien aux architectures Web reposantes - en particulier, les tâches et les transitions d'état correspondent bien aux ressources imbriquées.Attendez-vous à voir de futurs écrits de ma part sur ce sujet.

Autres conseils

Je suis partial, je suis l'un des auteurs de ruote .

variante 1) machine d'état attaché à une ressource (document, commande, facture, livre, meuble).

variante 2) machine d'état attaché à une ressource virtuelle nommée une tâche

variant 3) moteur de flux de travaux d'interpréter les définitions de flux de travail

Maintenant, votre question est étiquetée « BPM » nous pouvons être étendu dans « la gestion des processus métier ». Comment fonctionne ce genre de gestion se produire dans chacune des variantes?

Dans la variante 1, le processus d'affaires (ou flux de travail) est dispersée dans l'application. La machine d'état attaché à la ressource applique certains des aspects du flux de travail, mais seulement celles qui sont liées à la ressource. Il peut y avoir d'autres ressources avec leur propre machine d'état suivant le même processus d'affaires.

Dans la variante 2, on peut concentrer le flux de travail autour de la ressource de la tâche et représentée par la machine d'état autour de cette ressource.

Dans la variante 3, le flux de travail est en interprétant une promulgué ressource appelée une définition de flux de travail (ou la définition des processus métier).

Qu'est-ce qui se passe quand les changements de processus d'affaires? Est-il utile d'avoir un moteur de workflow où les processus d'affaires sont des ressources à gérer?

La plupart des bibliothèques machine d'état ont 1 états + set transitions. Les moteurs de workflow sont, la plupart d'entre eux, les interprètes de définition de flux de travail et ils permettent à plusieurs flux de travail différents pour fonctionner ensemble.

Quel sera le coût de la modification du flux de travail?

Les variantes ne sont pas mutuellement exclusives. Je l'ai vu de nombreux exemples où un moteur de workflow modifie l'état des ressources multiples certains d'entre eux par des machines gardées d'état.

J'utilise aussi la variante 3 + 2 beaucoup, pour les tâches: le moteur de workflow, à quelques points lors de l'exécution d'une instance de processus, les mains une tâche (workitem) à un participant humain (tâche de ressource est créé et placé dans l'état " prêt).

Vous pouvez aller un long chemin avec la variante 2 seule (la variante de gestionnaire de tâches).

On peut citer également la variante 0), où il n'y a pas de machine d'état, aucun moteur de workflow, et le processus d'affaires (es) sont dispersés et / ou hardcoded dans l'application.

Vous pouvez poser beaucoup de questions, mais si vous ne prenez pas le temps de lire les réponses et ne prenez pas le temps d'essayer et d'expérimenter, vous ne serez pas aller très loin, et ne sera jamais acquérir un flair pour quand utiliser tel ou tel outil.

Sur un précédent projet que je travaillais sur i ajouté quelques règles de type workflow à un ensemble de formulaires du gouvernement dans l'industrie Sanitaire avec détermination.

Les formulaires nécessaires à remplir par l'utilisateur final, et en fonction des réponses d'autres formes ont été prévues à remplir à une date ultérieure. Il y avait aussi des événements externes qui annulerait les formes prévues à l'horaire ou le calendrier de nouvelles.

Débit d'échantillon:

patient admis -> Calendrier d'évaluation initiale sous forme -> Formulaire annexe Revue trimestrielle -> Patient mort -> Annuler examen -> Horaire de décharge Formulaire d'évaluation

Beaucoup d'autres règles étaient fondées sur des choses telles que l'âge des patients, où ils ont été admis etc.

Ce fut une application ASP.NET, les règles étaient essentiellement une table dans la base de données. J'ai ajouté les scripts, donc un script courrais à la fin du formulaire pour déterminer ce qu'il faut faire ensuite. Ce fut une conception horrible et aurait été parfait pour un moteur de workflow approprié.

Vérifier rails_workflow petit bijou - Je pense que c'est proche de ce que vous chercher.

Je suis l'un des auteurs de Workflow Engine Cadence nous avons développé à Uber. La différence entre Cadence et la majorité des moteurs de workflow existants est qu'il est développeur concentré et est extrêmement flexible et évolutive (à des dizaines de milliers de mises à jour par seconde et jusqu'à des milliards de flux de travail ouverts). Les flux de travail sont écrits comme des programmes orientés objet et le moteur garantit que l'état des objets de flux de travail, y compris les piles de fils et les variables locales est entièrement conservée en cas de défaillance de l'hôte.

  

Quels problèmes avez-vous utilisé des moteurs de workflow pour résoudre?   Cadence est utilisé pour pratiquement toutes les applications de back-end qui vit au-delà d'une réponse à la demande unique. Exemples d'utilisation sont:

  • Emploi distribué Cron
  • Gestion ML / pipelines de données
  • Réagissant à des événements d'affaires. Par exemple les événements de voyage à Uber. Le flux de travail peut accumuler l'état en fonction des événements reçus et l'exécution des activités en cas de besoin.
  • Services de déploiement pour Mesos / Kubernetes
  • CI mise en œuvre du pipeline
  • Veiller à ce que le service complet plusieurs appels lorsqu'une demande est reçue. Y compris mise en œuvre SAGA modèle
  • Gérer les tâches des travailleurs de l'homme (similaires à Amazon MTurk )
  • Traitement des médias
  • Soutien à la clientèle billets d'acheminement
  • Le traitement des commandes
  • Service d'essai similaire à ChaosMonkey

et bien d'autres

L'autre ensemble de cas d'utilisation est basée sur le portage de moteurs de workflow existants pour fonctionner sur Cadence. Pratiquement tous les langages de spécification de flux de travail de moteur existant peut être porté pour fonctionner sur Cadence. Il existe plusieurs systèmes d'Uber internes qui ont été portés. De cette façon, un seul service de back-end peut alimenter plusieurs systèmes de flux de travail spécifiques de domaine.

  

Qu'est-ce que les bibliothèques / cadres avez-vous utilisé?

Cadence est un service autonome écrit en Go avec Aller et noreferrer Java bibliothèques côté client. La seule dépendance externe est le stockage. bases de données Cassandra et SQL sont pris en charge.

Cadence soutenir aussi la réplication asynchrone région transversale (à l'aide de la terminologie AWS).

  

Quand est-ce un Etat plus simple machine / gestion des tâches comme le système suffit?

À l'intérieur Uber le service est géré par Cadence notre équipe. Ainsi, les frais généraux de la construction de tout machine d'état personnalisé / gestion des tâches est toujours supérieure à l'aide de Cadence. En dehors de la société le service et le stockage car il doit être mis en place. Si vous disposez déjà d'une base de données SQL le déploiement de services est trivial à travers une image docker. Le docker est également utilisé pour exécuter un service de cadence locale pour le développement sur un ordinateur personnel ou portable.

Je roulais mon propre moteur de workflow pour appuyer le traitement des documents par étapes - le catalogage, l'envoi de traitement d'image (nous travaillons avec redaction sw), si nécessaire d'envoyer à la validation, puis relâchez et enfin l'expédition au client. Dans notre cas, nous avons un camion plein de documents à traiter si parfois nous devons exécuter chaque service séparément pour contrôler la livraison et l'utilisation des ressources. Concept simple mais haute performance et traitement distribué nécessaire, et nous could't trouver le produit hors du plateau qui correspondent à la facture pour nous.

J'ai une expérience avec l'utilisation de Activiti BPMN 2.0 moteur pour le traitement haute performance et des données à haut débit transférer les processus dans une infrastructure de noeuds de réseau. La tâche essentielle est de permettre la configuration et la surveillance de tels processus de transfert et de contrôle de chaque noeud de réseau (ie. Nœud1 de demande d'envoi d'un fichier de données à NODE2 via la couche de transport spécifique).

Il pourrait y avoir des milliers de processus en cours d'exécution à la fois et des dizaines d'ensemble ou quelques centaines de milliers de processus par jour.

Il y avait des tas différentes définitions de processus, mais il n'a pas nécessairement besoin qu'un opérateur du système peut créer des flux de travail personnalisés. Ainsi, la principale utilisation pour le moteur de BPM lui-même était d'être robuste, évolutive et permettre la surveillance de chaque flux de processus.

En fin de compte essentiellement travaillé, mais ce que nous avons appris de ce projet était qu'une plate-forme BPMN, ou plutôt le moteur Activiti spécifiquement, n'a pas été le meilleur pari pour un tel système à haut débit.

Les principaux défis sont la tâche des priorités d'exécution, verrouillage DB, exécution réessaye pour nommer quelques-uns concernant le BPM lui-même. Nous avons donc dû développer une manipulation personnalisée de ceux-ci, par exemple:

  • Traitement des relances dans le BPM pour les cas où un nœud avait aucun travailleur libre pour tâche donnée, ou lorsque le nœud ne fonctionnait pas du tout.
  • L'exécution des tâches de transfert parallèles dans un seul processus et la synchronisation des résultats (réussite / échec).

Je ne sais pas si d'autres moteurs BPMN seraient plus appropriés pour un tel scénario puisque BPMN est principalement destiné à des tâches d'affaires de longue durée impliquant une interaction utilisateur où la performance est sans doute pas la même question tout comme dans notre cas.

Je suis l'un des auteurs de Imixs-workflow . Imixs-Workflow est un moteur de workflow open source basé sur BPMN 2.0 et entièrement intégré dans la pile de la technologie Java EE.
Je développe des moteurs de workflow par moi-même depuis plus de 10 ans. Je vais essayer de répondre à votre question en bref:

> Quels problèmes avez-vous utilisé les moteurs de workflow pour résoudre?

Mon objectif personnel quand j'ai commencé à penser sur les moteurs de workflow était d'éviter Codding dur la logique métier dans mon application. Beaucoup de choses dans une application métier peuvent être réutilisés de sorte qu'il est logique de les garder configurable. Par exemple:

  • l'envoi d'une notification
  • voir les tâches ouvertes
  • assigné une tâche à une personne
  • décrivant la tâche en cours

A partir de cette liste des fonctions que vous pouvez voir que je parle de flux de travail centré sur l'homme. En bref: Un moteur de workflow centré sur l'homme répond aux questions: Qui est responsable d'une tâche et qui a besoin d'être informé prochain? Et ce sont les questions typiques des besoins des entreprises.

> Qu'est-ce que les bibliothèques / cadres avez-vous utilisé?

il y a 5 ans, nous avons commencé réimplémentant moteur Imixs-flux de travail se concentrant sur BPMN 2.0 . BPMN est la norme commune pour la modélisation du processus. Et la chose surprenante pour moi était que nous étions soudainement en mesure de décrire les processus d'affaires, même très complexes qui pourraient être visualisés et exécutés. Je recommande tout le monde à utiliser BPMN pour modéliser les processus métier.

> Quand est-ce un Etat plus simple machine / gestion des tâches comme le système suffit?

Une simple machine d'état est suffisante si vous voulez juste suivre l'état d'un objet métier. Tel est le cas lorsque vous commencez à introduire l'attribut « statut » dans votre modèle d'objet. Mais dans le cas où vous avez besoin des processus d'affaires avec des responsabilités, contrôler l'exploitation et le flux, puis une machine d'état ne suffisent plus.

> Bonus: Comment avez /-vous faire la distinction entre la gestion des tâches et Workflow Engine

Ceci est exactement le point où de nombreux moteurs de workflow mentionnés ici diffèrent. Pour un flux de travail centrée sur l'homme dont vous avez besoin généralement d'une gestion des tâches à répartir les tâches entre les acteurs humains. Pour une automatisation des processus, ce point est pas pertinent. Il suffit que le moteur effectue certaines tâches. moteurs de gestion et de workflow tâche ne peuvent pas être comparés parce que la gestion des tâches est toujours fonction d'un moteur de workflow.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top