Ich bin auch voreingenommen, da ich der Hauptautor von StonePath bin .
Ich habe Workflow-Anwendungen für das US-Außenministerium, das Genfer Zentrum für humanitäre Minenräumung, mehrere Fortune-500-Kunden und zuletzt das Washington DC Public School System entwickelt. Jedes Mal, wenn ich eine 'Workflow-Engine' gesehen habe, die versucht hat, die einzige Hauptreferenz für Geschäftsprozesse zu sein, habe ich eine Organisation gesehen, die sich selbst darum bemüht hat, das Tool zu umgehen. Dies mag daran liegen, dass diese Lösungen immer hersteller- / produktgetrieben waren und dann ein taktisches Team von "Beratern" hat, die die App ständig füttern ... aber aus diesem Grund neige ich dazu, negativ zu reagieren, wenn ich das höre Vorteile prozessbasierter Tools, die versprechen, die Workflow-Definitionen an einem Ort zu zentralisieren und wiederholbar zu machen.
Trotzdem mag ich Ruote sehr - ich verfolge dieses Projekt seit einiger Zeit und sollte ich eine solche Lösung brauchen, wird es das nächste Tool sein, das ich versuchen werde. StonePath hat einen ganz anderen Zweck als ruote - wo Ruote für Ruby im Allgemeinen nützlich ist, richtet sich StonePath an Rails, das in Ruby geschriebene Webframework. Während es bei Ruote um langlebige Geschäftsprozesse und die damit verbundenen Definitionen geht, geht es bei StonePath um die Verwaltung staatlicher Workflows und Aufgaben. Ehrlich gesagt denke ich, dass die Unterscheidung von außen nach innen subtil sein könnte - oft können die gleichen Arten von Geschäftsprozessen so oder so dargestellt werden -, dass das auf Status und Aufgaben basierende Modell jedoch eher meinem mentalen Modell entspricht.
Lassen Sie mich die Highlights eines zustandsbasierten Workflows beschreiben. Kurz gesagt, stellen Sie sich einen Workflow vor, der sich um die Bearbeitung eines Hypothekendarlehens oder einer Passerneuerung dreht. Während sich das Dokument "im Büro" bewegt, wandert es von Staat zu Staat. Stellen Sie sich vor, Sie sind für das Dokument verantwortlich und Ihr Chef hat Sie alle paar Stunden um eine Statusaktualisierung gebeten und eine kurze Antwort gewünscht. Sie würden Dinge wie "Es ist in der Dateneingabe" sagen ... "Wir prüfen die Anmeldeinformationen des Bewerbers jetzt "..." wir warten auf Qualitätsprüfung "..." Wir sind fertig "... und so weiter. Dies sind die Zustände in einem zustandsbasierten Workflow. Wir bewegen uns von Staat zu Staat über Übergänge - wie "genehmigen", "anwenden", "zurückschlagen", "verweigern" und so weiter. Dies sind in der Regel Aktionsverben.
Der nächste Teil eines zustands- / aufgabenbasierten Workflows ist die Erstellung von Aufgaben. Eine Aufgabe ist eine Arbeitseinheit, in der Regel mit einem Fälligkeitsdatum und Anweisungen zur Bearbeitung, die ein Arbeitselement (z. B. den Kreditantrag oder die Erneuerung des Reisepasses) mit einem Benutzer "in Box" verbindet. Aufgaben können parallel oder nacheinander ausgeführt werden, und wir können Aufgaben automatisch erstellen, wenn wir Status eingeben, Aufgaben manuell erstellen, wenn die Benutzer erkennen, dass die Arbeit erledigt werden muss, und Aufgaben müssen abgeschlossen sein, bevor wir in einen neuen Status wechseln können. All diese Verhaltensweisen sind optional und Teil der Workflow-Definition.
Das Kaninchenloch kann viel tiefer gehen, und ich habe einen Artikel darüber für Ausgabe 4 von PragPub, dem Pragmatic Programmer's Magazine, geschrieben. Unter dem obigen Reo-Link finden Sie ein aktualisiertes PDF dieses Artikels.
Bei der Arbeit mit StonePath in den letzten Monaten habe ich festgestellt, dass das zustandsbasierte Modell sehr gut zu erholsamen Webarchitekturen passt - insbesondere die Aufgaben und Zustandsübergänge lassen sich gut als verschachtelte Ressourcen abbilden. Erwarten Sie zukünftiges Schreiben von mir zu diesem Thema.
Ich bin voreingenommen, ich bin einer der Autoren von Ruote .
Variante 1) Zustandsmaschine, die an eine Ressource angehängt ist (Dokument, Bestellung, Rechnung, Buch, Möbelstück).
Variante 2) Zustandsmaschine, die an eine virtuelle Ressource namens Task angeschlossen ist
Variante 3) Workflow-Engine zur Interpretation von Workflow-Definitionen
Jetzt ist Ihre Frage mit "BPM" gekennzeichnet. Wir können sie in "Geschäftsprozessmanagement" erweitern. Wie erfolgt diese Art der Verwaltung in jeder der Varianten?
In Variante 1 ist der Geschäftsprozess (oder Workflow) in der Anwendung verteilt. Die an die Ressource angehängte Zustandsmaschine erzwingt einige Aspekte des Workflows, jedoch nur diejenigen, die sich auf die Ressource beziehen. Möglicherweise gibt es andere Ressourcen mit einer eigenen Zustandsmaschine, die demselben Geschäftsprozess folgen.
In Variante 2 kann der Workflow auf die Aufgabenressource konzentriert und von der Zustandsmaschine um diese Ressource herum dargestellt werden.
In Variante 3 wird der Workflow durch Interpretieren einer Ressource ausgeführt, die als Workflow-Definition (oder Geschäftsprozessdefinition) bezeichnet wird.
Was passiert, wenn sich der Geschäftsprozess ändert? Lohnt es sich, eine Workflow-Engine zu haben, in der Geschäftsprozesse überschaubare Ressourcen sind?
Die meisten Zustandsmaschinenbibliotheken haben 1 eingestellte Zustände + Übergänge. Workflow-Engines sind in den meisten Fällen Workflow-Definitionsinterpreter und ermöglichen die gleichzeitige Ausführung mehrerer verschiedener Workflows.
Was kostet die Änderung des Workflows?
Die Varianten schließen sich nicht gegenseitig aus. Ich habe viele Beispiele gesehen, bei denen eine Workflow-Engine den Status mehrerer Ressourcen ändert, von denen einige von Statusmaschinen geschützt werden.
Ich verwende Variante 3 + 2 auch häufig für menschliche Aufgaben: Die Workflow-Engine übergibt an einigen Stellen beim Ausführen einer Prozessinstanz eine Aufgabe (Workitem) an einen menschlichen Teilnehmer (Ressourcenaufgabe wird erstellt und in den Status "Bereit" versetzt). .
Sie können allein mit Variante 2 (der Task-Manager-Variante) einen langen Weg gehen.
Wir könnten auch Variante 0) erwähnen, bei der es keine Zustandsmaschine, keine Workflow-Engine gibt und die Geschäftsprozesse in der Anwendung verstreut und / oder fest codiert sind.
Sie können viele Fragen stellen, aber wenn Sie sich nicht die Zeit nehmen, die Antworten zu lesen, und sich nicht die Zeit nehmen, sie auszuprobieren und zu experimentieren, werden Sie nicht sehr weit gehen und nie ein Gespür dafür bekommen, wann Sie sie verwenden sollen dieses oder jenes Werkzeug.
quelle
Bei einem früheren Projekt, an dem ich gearbeitet habe, habe ich einer Reihe von Regierungsformularen in der Healhcare-Branche einige Workflow-Regeln hinzugefügt.
Formulare mussten vom Endbenutzer ausgefüllt werden, und abhängig von einigen Antworten sollten andere Formulare zu einem späteren Zeitpunkt ausgefüllt werden. Es gab auch externe Ereignisse, bei denen geplante Formulare abgebrochen oder neue geplant wurden.
Probenfluss:
Eingelassener Patient -> Erste Beurteilung planen -> Vierteljährliches Überprüfungsformular planen -> Patient gestorben -> Überprüfung abbrechen -> Entlassungsbewertungsformular planen
Viele andere Regeln basierten auf Dingen wie dem Alter des Patienten, wo sie aufgenommen wurden usw.
Dies war eine ASP.NET-App, die Regeln waren im Grunde eine Tabelle in der Datenbank. Ich habe Skripte hinzugefügt, damit beim Ausfüllen des Formulars ein Skript ausgeführt wird, um zu bestimmen, was als Nächstes zu tun ist. Dies war ein schreckliches Design und wäre perfekt für eine richtige Workflow-Engine gewesen.
quelle
Ich bin einer der Autoren der Cadence Workflow Engine, die wir bei Uber entwickelt haben. Der Unterschied zwischen Cadence und den meisten vorhandenen Workflow-Engines besteht darin, dass es sich auf Entwickler konzentriert und äußerst flexibel und skalierbar ist (bis zu Zehntausenden von Updates pro Sekunde und bis zu Milliarden offener Workflows). Die Workflows werden als objektorientierte Programme geschrieben, und die Engine stellt sicher, dass der Status der Workflowobjekte einschließlich Thread-Stacks und lokaler Variablen bei Hostfehlern vollständig erhalten bleibt.
und viele andere
Die anderen Anwendungsfälle basieren auf der Portierung vorhandener Workflow-Engines für die Ausführung unter Cadence. Praktisch jede vorhandene Engine-Workflow-Spezifikationssprache kann für die Ausführung unter Cadence portiert werden. Es wurden mehrere interne Uber-Systeme portiert. Auf diese Weise kann ein einzelner Backend-Service mehrere domänenspezifische Workflow-Systeme mit Strom versorgen.
Cadence ist ein eigenständiger Dienst, der in clientseitigen Bibliotheken von Go with Go und Java geschrieben ist . Die einzige externe Abhängigkeit ist die Speicherung. Cassandra- und SQL-Datenbanken werden unterstützt.
Cadence unterstützt auch die asynchrone Replikation zwischen Regionen (unter Verwendung der AWS-Terminologie).
Innerhalb von Uber wird der Cadence-Service von unserem Team verwaltet. Der Aufwand für die Erstellung einer benutzerdefinierten Zustandsmaschinen- / Aufgabenverwaltung ist daher immer höher als für die Verwendung von Cadence. Außerhalb des Unternehmens müssen der Service und der Speicher dafür eingerichtet werden. Wenn Sie bereits über eine SQL-Datenbank verfügen, ist die Dienstbereitstellung über ein Docker-Image trivial. Der Docker wird auch verwendet, um einen lokalen Cadence-Dienst für die Entwicklung auf einem PC oder Laptop auszuführen.
quelle
Check rails_workflow gem - Ich denke, das kommt dem nahe, was Sie suchen.
quelle
Ich bin einer der Autoren von Imixs-Workflow . Imixs-Workflow ist eine Open-Source-Workflow-Engine, die auf BPMN 2.0 basiert und vollständig in den Java EE-Technologie-Stack integriert ist.
Ich entwickle Workflow-Engines seit mehr als 10 Jahren selbst. Ich werde versuchen, Ihre Frage kurz zu beantworten:
> Welche Probleme haben Sie mit Workflow-Engines gelöst?
Mein persönliches Ziel, als ich anfing, über Workflow-Engines nachzudenken, war es, zu vermeiden, dass die Geschäftslogik in meiner Anwendung hart codiert wird. Viele Dinge in einer Geschäftsanwendung können wiederverwendet werden, daher ist es sinnvoll, sie konfigurierbar zu halten. Beispielsweise:
Aus dieser Funktionsliste können Sie ersehen, dass es sich um menschenzentrierte Workflows handelt. Kurz gesagt: Eine menschenzentrierte Workflow-Engine beantwortet die Fragen: Wer ist für eine Aufgabe verantwortlich und wer muss als nächstes informiert werden? Und dies sind die typischen Fragen bei den Geschäftsanforderungen.
> Welche Bibliotheken / Frameworks haben Sie verwendet?
Vor 5 Jahren haben wir begonnen, die Imixs-Workflow-Engine mit Schwerpunkt auf BPMN 2.0 neu zu implementieren . BPMN ist der gängige Standard für die Prozessmodellierung. Und das Überraschende für mich war, dass wir plötzlich auch hochkomplexe Geschäftsprozesse beschreiben konnten, die visualisiert und ausgeführt werden konnten. Ich empfehle jedem, BPMN zur Modellierung von Geschäftsprozessen zu verwenden.
> Wann hat ein einfacheres State Machine / Task Management-ähnliches System ausgereicht?
Eine einfache Zustandsmaschine reicht aus, wenn Sie nur den Status eines Geschäftsobjekts verfolgen möchten. Dies ist der Fall, wenn Sie beginnen, das Attribut 'status' in Ihr Objektmodell einzuführen. Wenn Sie jedoch Geschäftsprozesse mit Verantwortlichkeiten, Protokollierung und Flusskontrolle benötigen, reicht eine Zustandsmaschine nicht mehr aus.
> Bonus: Wie haben Sie zwischen Task Management und Workflow Engine unterschieden?
Dies ist genau der Punkt, an dem sich viele der hier genannten Workflow-Engines unterscheiden. Für einen menschenzentrierten Workflow benötigen Sie normalerweise ein Aufgabenmanagement, um Aufgaben auf menschliche Akteure zu verteilen. Für eine Prozessautomatisierung ist dieser Punkt nicht so relevant. Es ist ausreichend, wenn der Motor bestimmte Aufgaben ausführt. Aufgabenverwaltung und Workflow-Engines können nicht verglichen werden, da die Aufgabenverwaltung immer eine Funktion einer Workflow-Engine ist.
quelle
Ich habe meine eigene Workflow-Engine entwickelt, um die schrittweise Verarbeitung von Dokumenten zu unterstützen - Katalogisierung, Senden zur Bildverarbeitung (wir arbeiten mit redaction sw), bei Bedarf zur Validierung senden, dann freigeben und schließlich an den Client zurücksenden. In unserem Fall müssen wir eine Menge Dokumente verarbeiten, sodass wir manchmal jeden Service separat ausführen müssen, um die Lieferung und den Ressourcenverbrauch zu steuern. Einfach im Konzept, aber hohe Leistung und verteilte Verarbeitung erforderlich, und wir konnten kein Standardprodukt finden, das zu uns passt.
quelle
Ich habe Erfahrung mit der Verwendung der Activiti BPMN 2.0-Engine für die Verarbeitung von Datenübertragungsprozessen mit hoher Leistung und hohem Durchsatz in einer Infrastruktur von Netzwerkknoten. Die grundlegende Aufgabe bestand darin, die Konfiguration und Überwachung solcher Übertragungsprozesse zu ermöglichen und jeden Netzwerkknoten zu steuern (dh Knoten1 aufzufordern, eine Datendatei über eine bestimmte Transportschicht an Knoten2 zu senden).
Es können Tausende von Prozessen gleichzeitig ausgeführt werden und insgesamt Zehntausende oder niedrige Hunderttausende Prozesse pro Tag.
Es gab eine Reihe verschiedener Prozessdefinitionen, aber es war nicht unbedingt erforderlich, dass ein Bediener des Systems benutzerdefinierte Workflows erstellen konnte. Der primäre Anwendungsfall für die BPM-Engine selbst war daher, robust und skalierbar zu sein und die Überwachung jedes Prozessflusses zu ermöglichen.
Am Ende hat es im Grunde funktioniert, aber wir haben aus diesem Projekt gelernt, dass eine BPMN-Plattform, oder besser gesagt die Activiti-Engine, nicht die beste Wahl für ein solches Hochdurchsatzsystem ist.
Die Hauptherausforderungen waren die Priorisierung der Aufgabenausführung, das Sperren der Datenbank und Wiederholungsversuche, um nur einige zu nennen, die das BPM selbst betreffen. Also mussten wir eine kundenspezifische Handhabung dieser entwickeln, zum Beispiel:
Ich weiß nicht, ob andere BPMN-Engines für ein solches Szenario besser geeignet wären, da BPMN hauptsächlich für langfristige Geschäftsaufgaben mit Benutzerinteraktion gedacht ist, bei denen die Leistung wahrscheinlich nicht das gleiche Problem darstellt wie in unserem Fall.
quelle