Casi d'uso del motore del flusso di lavoro


90

Mi piacerebbe conoscere problemi specifici che tu - il lettore SO - hai risolto utilizzando i motori di flusso di lavoro e quali librerie / framework hai usato se non ne avessi eseguito uno tuo. Vorrei anche sapere quando un motore del flusso di lavoro non è stata la scelta migliore e se / come hai scelto qualcosa di più semplice, come un'applicazione di tipo Elenco attività / Elenco di lavoro / Gestione attività che utilizza macchine a stati.

Domande:

  • Quali problemi hai utilizzato per risolvere i motori del flusso di lavoro?
  • Quali librerie / framework hai usato?
  • Quando è bastato un sistema più semplice come una macchina a stati / gestione delle attività?
  • Bonus: come hai fatto / hai fatto la distinzione tra Task Management e Workflow Engine ?

Cerco esperienze di prima mano.

Alcune delle risorse che ho verificato:

Risposte:


61

Anch'io sono di parte, poiché sono l'autore principale di StonePath .

Ho sviluppato applicazioni per flussi di lavoro per il Dipartimento di Stato degli Stati Uniti, il Centro di Ginevra per lo sminamento umanitario, diversi clienti Fortune 500 e, più recentemente, il sistema scolastico pubblico di Washington DC. Ogni volta che ho visto un "motore del flusso di lavoro" che ha cercato di essere l'unico riferimento principale per i processi aziendali, ho visto un'organizzazione lottare contro se stessa per aggirare lo strumento. Ciò può essere dovuto al fatto che queste soluzioni sono sempre state guidate da fornitori / prodotti, e quindi finiscono con un team tattico di `` consulenti '' che alimentano costantemente l'app ... ma per questo motivo, tendo a reagire negativamente quando sento il vantaggi degli strumenti basati sui processi che promettono di "centralizzare le definizioni del flusso di lavoro in un unico posto e renderle ripetibili".

Detto questo, Ruote mi piace molto: seguo quel progetto da un po 'di tempo e se avessi bisogno di quel tipo di soluzione, sarà il prossimo strumento che sarò disposto a provare. StonePath ha uno scopo molto diverso da ruote - dove Ruote è utile a Ruby in generale, StonePath è rivolto a Rails, il framework web scritto in Ruby. Laddove Ruote riguarda i processi aziendali di lunga durata e le definizioni associate, StonePath si occupa della gestione del flusso di lavoro e delle attività basate sullo stato. Francamente, penso che la distinzione dall'esterno che guarda all'interno potrebbe essere sottile - molte volte gli stessi tipi di processi aziendali possono essere rappresentati in entrambi i modi - il modello basato su stato e attività tende ad essere mappato al mio modello mentale.

Consentitemi di descrivere i punti salienti di un flusso di lavoro basato sullo stato. In breve, immagina un flusso di lavoro che ruota attorno all'elaborazione di qualcosa come un mutuo ipotecario o il rinnovo del passaporto. Mentre il documento si sposta "in ufficio", viaggia da stato a stato. Immagina di essere responsabile del documento e il tuo capo ti chiedesse un aggiornamento di stato ogni poche ore e volesse una breve risposta ... diresti cose come "È in inserimento dati" ... "Stiamo controllando le credenziali del richiedente ora "..." siamo in attesa del controllo qualità "..." Abbiamo finito "... e così via. Questi sono gli stati in un flusso di lavoro basato sullo stato. Ci spostiamo da stato a stato tramite transizioni come "approva", "applica", contraccolpo "," nega "e così via, che tendono ad essere verbi di azione.

La parte successiva di un flusso di lavoro basato su stato / attività è la creazione di attività. Un'attività è un'unità di lavoro, tipicamente con una data di scadenza e istruzioni di gestione, che collega un elemento di lavoro (la richiesta di prestito o il rinnovo del passaporto, ad esempio), a un utente "in scatola". Le attività possono avvenire in parallelo tra loro o in sequenza e possiamo creare attività automaticamente quando entriamo negli stati, creare attività manualmente quando le persone si rendono conto che il lavoro deve essere svolto e richiedere che le attività siano completate prima di poter passare a un nuovo stato. Tutto questo tipo di comportamento è opzionale e fa parte della definizione del flusso di lavoro.

La tana del coniglio può andare molto più in profondità di questo, e ho scritto un articolo a riguardo per il numero 4 di PragPub, il Pragmatic Programmer's Magazine. Controlla il link reo sopra per un PDF aggiornato di quell'articolo.

Lavorando con StonePath negli ultimi mesi, ho scoperto che il modello basato sullo stato si mappa molto bene su architetture web riposanti - in particolare, le attività e le transizioni di stato si mappano bene come risorse nidificate. Aspettatevi di vedere futuri scritti da me su questo argomento.


2
eccezionale! Non vedo l'ora di saperne di più sulle sottili differenze tra i motori del flusso di lavoro come le ruote e i motori di stato / attività come Stonepath, perché non avendoci provato prima, è difficile vedere da cosa iniziare. Ho letto tutto ciò che ho trovato su stonepath e ruote e un milione di altri white paper su BPM e flussi di lavoro, quindi una conoscenza simile a "esperienza di prima mano" come questa ridurrà DAVVERO la curva iniziale. grazie ancora.
Lance Pollard

31

Sono di parte, sono uno degli autori di ruote .

variante 1) macchina a stati allegata a una risorsa (documento, ordine, fattura, libro, mobile).

variante 2) macchina a stati collegata a una risorsa virtuale denominata task

variante 3) motore del flusso di lavoro che interpreta le definizioni del flusso di lavoro

Ora la tua domanda è contrassegnata come "BPM" e possiamo essere espansa in "Gestione dei processi aziendali". Come si verifica questo tipo di gestione in ciascuna variante?

Nella variante 1, il processo aziendale (o flusso di lavoro) è sparso nell'applicazione. La macchina a stati collegata alla risorsa impone alcuni aspetti del flusso di lavoro, ma solo quelli relativi alla risorsa. Potrebbero esserci altre risorse con la propria macchina a stati che seguono lo stesso processo aziendale.

Nella variante 2, il flusso di lavoro può essere concentrato attorno alla risorsa dell'attività e rappresentato dalla macchina a stati attorno a quella risorsa.

Nella variante 3, il flusso di lavoro viene eseguito interpretando una risorsa chiamata definizione del flusso di lavoro (o definizione del processo aziendale).

Cosa succede quando il processo aziendale cambia? Vale la pena avere un motore del flusso di lavoro in cui i processi aziendali sono risorse gestibili?

La maggior parte delle librerie della macchina a stati ha 1 stato impostato + transizioni. I motori del flusso di lavoro sono, per la maggior parte, interpreti della definizione del flusso di lavoro e consentono di eseguire insieme più flussi di lavoro diversi.

Quale sarà il costo della modifica del flusso di lavoro?

Le varianti non si escludono a vicenda. Ho visto molti esempi in cui un motore di flusso di lavoro cambia lo stato di più risorse, alcune delle quali protette da macchine a stati.

Uso molto anche la variante 3 + 2, per le attività umane: il motore del flusso di lavoro, in alcuni punti durante l'esecuzione di un'istanza di processo, passa un'attività (elemento di lavoro) a un partecipante umano (l'attività della risorsa viene creata e posta nello stato 'pronto') .

Puoi fare molto con la sola variante 2 (la variante del task manager).

Potremmo anche menzionare la variante 0), dove non c'è macchina a stati, nessun motore di flusso di lavoro e i processi aziendali sono sparsi e / o codificati nell'applicazione.

Puoi fare molte domande, ma se non ti prendi il tempo di leggere le risposte e non ti prendi il tempo di provare e sperimentare, non andrai molto lontano e non acquisirai mai alcun talento per quando usarlo questo o quello strumento.


grazie mille per questa risposta, sta chiarendo un bel po 'le cose. non ci sono abbastanza distinzioni là fuori perché il nuovo arrivato abbia una discreta conoscenza della modellazione formale del flusso di lavoro per iniziare a giocare con il codice; sembra che siano tutti i white paper di Java della fine degli anni '90. tu e David di Stonepath state iniziando ad abbattere quella barriera molto. un giorno potrebbe essere facile come imparare i binari. Inizierò a giocare con la variante del task manager tra pochi giorni. Grazie.
Lance Pollard

il collegamento sembra essere morto?
rogerdpack

il progetto è ora morto
Jeshan Babooa

4

In un progetto precedente su cui stavo lavorando, ho aggiunto alcune regole sul tipo di flusso di lavoro a una serie di moduli governativi nel settore sanitario.

I moduli dovevano essere compilati dall'utente finale e, a seconda di alcune risposte, altri moduli dovevano essere compilati in un secondo momento. C'erano anche eventi esterni che avrebbero annullato i moduli pianificati o ne avrebbero programmati di nuovi.

Flusso di esempio:

Paziente ammesso -> Pianifica la valutazione iniziale FOrm -> Pianifica il modulo di revisione trimestrale -> Paziente deceduto -> Annulla la revisione -> Pianifica il modulo di valutazione della dimissione

Molte altre regole erano basate su cose come l'età del paziente, dove venivano ricoverati ecc.

Questa era un'app ASP.NET, le regole erano fondamentalmente una tabella nel database. Ho aggiunto lo scripting, quindi uno script viene eseguito al completamento del modulo per determinare cosa fare dopo. Questo era un design orribile e sarebbe stato perfetto per un motore di flusso di lavoro adeguato.


3

Sono uno degli autori di Cadence Workflow Engine che abbiamo sviluppato in Uber. La differenza tra Cadence e la maggior parte dei motori di flusso di lavoro esistenti è che è focalizzato sullo sviluppatore ed è estremamente flessibile e scalabile (fino a decine di migliaia di aggiornamenti al secondo e fino a miliardi di flussi di lavoro aperti). I flussi di lavoro vengono scritti come programmi orientati agli oggetti e il motore garantisce che lo stato degli oggetti del flusso di lavoro, inclusi gli stack di thread e le variabili locali, sia completamente preservato in caso di errori dell'host.

Quali problemi hai utilizzato per risolvere i motori del flusso di lavoro? La cadenza viene utilizzata praticamente per qualsiasi applicazione di backend che vive oltre una singola risposta alla richiesta. Esempi di utilizzo sono:

  • Lavori CRON distribuiti
  • Gestione delle pipeline ML / dati
  • Reagire agli eventi aziendali. Ad esempio, eventi di viaggio su Uber. Il flusso di lavoro può accumulare lo stato in base agli eventi ricevuti ed eseguire attività quando necessario.
  • Distribuzione dei servizi su Mesos / Kubernetes
  • Implementazione della pipeline CI
  • Garantire il completamento di più chiamate di servizio quando viene ricevuta una richiesta. Compresa l' implementazione del modello SAGA
  • Gestione delle attività dei lavoratori umani (simile ad Amazon MTurk )
  • Elaborazione dei media
  • Instradamento dei ticket di assistenza clienti
  • Elaborazione dell'ordine
  • Servizio di test simile a ChaosMonkey

e molti altri

L'altro set di casi d'uso si basa sul porting dei motori di flusso di lavoro esistenti per l'esecuzione su Cadence. Praticamente qualsiasi linguaggio di specifica del flusso di lavoro del motore esistente può essere portato per essere eseguito su Cadence. Esistono più sistemi Uber interni che sono stati portati. In questo modo un singolo servizio di backend può alimentare più sistemi di flusso di lavoro specifici del dominio.

Quali librerie / framework hai usato?

Cadence è un servizio autonomo scritto in Go with Go e nelle librerie lato client Java . L'unica dipendenza esterna è l'archiviazione. I database Cassandra e SQL sono supportati.

Cadence supporta anche la replica asincrona interregionale (utilizzando la terminologia AWS).

Quando è bastato un sistema più semplice come una macchina a stati / gestione delle attività?

All'interno di Uber il servizio Cadence è gestito dal nostro team. Quindi il sovraccarico della creazione di qualsiasi macchina a stati personalizzata / gestione delle attività è sempre maggiore rispetto all'utilizzo di Cadence. All'esterno dell'azienda è necessario predisporre il servizio e il deposito. Se si dispone già di un database SQL, la distribuzione del servizio è banale tramite un'immagine docker. Il docker viene utilizzato anche per eseguire un servizio Cadence locale per lo sviluppo su un personal computer o laptop.



2

Sono uno degli autori di Imixs-Workflow . Imixs-Workflow è un motore di flusso di lavoro open source basato su BPMN 2.0 e completamente integrato nello stack tecnologico Java EE.
Sviluppo motori di workflow da solo da più di 10 anni. Proverò a rispondere alla tua domanda in breve:

> Quali problemi hai utilizzato per risolvere i motori del flusso di lavoro?

Il mio obiettivo personale quando ho iniziato a pensare ai motori del flusso di lavoro era evitare di codificare in modo rigido la logica di business all'interno della mia applicazione. Molte cose in un'applicazione aziendale possono essere riutilizzate, quindi ha senso mantenerle configurabili. Per esempio:

  • inviare una notifica
  • visualizzare le attività aperte
  • assegnato un compito a una persona
  • descrivere l'attività corrente

Da questo elenco di funzioni puoi vedere che sto parlando di flussi di lavoro incentrati sull'uomo. In breve: un motore del flusso di lavoro incentrato sull'uomo risponde alle domande: chi è responsabile di un'attività e chi deve essere informato successivamente? E queste sono le domande tipiche dei requisiti aziendali.

> Quali librerie / framework hai usato?

5 anni fa abbiamo iniziato a reimplementare il motore Imixs-Workflow concentrandoci su BPMN 2.0 . BPMN è lo standard comune per la modellazione dei processi. E la cosa sorprendente per me è stata che siamo stati improvvisamente in grado di descrivere processi aziendali anche molto complessi che potevano essere visualizzati ed eseguiti. Consiglio a tutti di utilizzare BPMN per modellare i processi aziendali.

> Quando è bastato un sistema più semplice come una macchina a stati / gestione delle attività?

Una semplice macchina a stati è sufficiente se si desidera monitorare lo stato di un oggetto di business. Questo è il caso in cui inizi a introdurre l'attributo 'status' nel tuo modello di oggetti. Ma nel caso in cui siano necessari processi aziendali con responsabilità, registrazione e controllo del flusso, una macchina a stati non è più sufficiente.

> Bonus: come hai fatto / hai fatto la distinzione tra Task Management e Workflow Engine?

Questo è esattamente il punto in cui molti motori di flusso di lavoro menzionati qui differiscono. Per un flusso di lavoro incentrato sull'uomo, in genere è necessaria una gestione delle attività per distribuire le attività tra gli attori umani. Per un'automazione di processo, questo punto non è così rilevante. È sufficiente se il motore esegue determinate attività. La gestione delle attività e i motori del flusso di lavoro non possono essere confrontati perché la gestione delle attività è sempre una funzione di un motore del flusso di lavoro.


1

Ho implementato il mio motore di flusso di lavoro per supportare l'elaborazione in fasi dei documenti: catalogazione, invio per l'elaborazione delle immagini (lavoriamo con il sw di redazione), se necessario l'invio alla convalida, quindi il rilascio e infine la spedizione al cliente. Nel nostro caso abbiamo un carico di documenti da elaborare, quindi a volte dobbiamo eseguire ciascun servizio separatamente per controllare la consegna e l'utilizzo delle risorse. Semplice nel concetto ma ad alte prestazioni e elaborazione distribuita necessaria, e non siamo riusciti a trovare alcun prodotto standard che si adatti al nostro conto.


1

Ho un'esperienza con l'utilizzo di Activiti motore BPMN 2.0 per la gestione di processi di trasferimento dati ad alte prestazioni e ad alto throughput in un'infrastruttura di nodi di rete. Il compito di base era quello di consentire la configurazione e il monitoraggio di tali processi di trasferimento e controllare ogni nodo di rete (es. Richiedere a node1 di inviare un file di dati a node2 tramite uno specifico livello di trasporto).

Potrebbero esserci migliaia di processi in esecuzione contemporaneamente e complessivamente decine o poche centinaia di migliaia di processi al giorno.

C'erano un sacco di definizioni di processo differenti, ma non era necessariamente richiesto che un operatore del sistema potesse creare flussi di lavoro personalizzati. Quindi il caso d'uso principale per il motore BPM stesso era quello di essere robusto, scalabile e consentire il monitoraggio di ogni flusso di processo.

Alla fine ha funzionato fondamentalmente, ma quello che abbiamo imparato da quel progetto è stato che una piattaforma BPMN, o meglio il motore Activiti in particolare, non era la soluzione migliore per un sistema così ad alto rendimento.

Le sfide principali erano la prioritizzazione dell'esecuzione delle attività, il blocco del DB, i tentativi di esecuzione per citarne i pochi relativi al BPM stesso. Quindi abbiamo dovuto sviluppare una gestione personalizzata di questi, ad esempio:

  • Gestione dei tentativi nel BPM per i casi in cui un nodo non aveva un worker libero per una determinata attività o quando il nodo non era affatto in esecuzione.
  • Esecuzione di attività di trasferimento parallelo in un unico processo e sincronizzazione dei risultati (successo / fallimento).

Non so se altri motori BPMN sarebbero più adatti per tale scenario poiché BPMN è principalmente inteso per attività aziendali di lunga durata che coinvolgono l'interazione dell'utente in cui le prestazioni probabilmente non sono lo stesso problema del nostro caso.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.