Controllo delle versioni del flusso di lavoro

5

Credo di avere un malinteso fondamentale quando si tratta di motori del flusso di lavoro che gradirei se tu potessi aiutarmi a risolvere. Non sono sicuro che il mio fraintendimento sia specifico per il motore del flusso di lavoro che sto utilizzando o se si tratti di un malinteso generale. Mi capita di utilizzare Windows Workflow Foundation (WWF).

TLDR-versione

WWF consente di implementare processi aziendali in flussi di lavoro di lunga durata (pensa a mesi o addirittura anni). Quando viene avviato, i flussi di lavoro non possono essere modificati. Ma quale processo aziendale non può cambiare in qualsiasi momento? E se un processo aziendale cambia, non vorresti che il tuo software riflettesse questa modifica per le "istanze" già avviate del processo di business? Cosa mi manca?

Sfondo

Nel WWF definisci un flusso di lavoro combinando un insieme di attività. Esistono diversi tipi di attività - alcuni di essi sono per il controllo del flusso, come IfElseActivity e WhileActivty mentre altri consentono di eseguire attività effettive, come CodeActivity che consente di eseguire codice .NET e InvokeWebServiceActivity che consente di chiamare i servizi Web. Le attività sono combinate con un flusso di lavoro utilizzando un visual designer. Puoi praticamente trascinare le attività da una casella degli strumenti a un'area di progettazione e connettere le attività l'una con l'altra. Il flusso di lavoro e le attività hanno parametri di input, parametri di output e variabili.

Abbiamo un singolo flusso di lavoro che a volte viene eseguito nel giro di pochi giorni, ma può durare 5-6 mesi. Il WWF si preoccupa di mantenere lo stato del flusso di lavoro (quale attività stiamo attualmente eseguendo, quali sono i valori delle variabili e così via).

Finora penso che il WWF abbia senso. Alcune persone preferiranno implementare una rappresentazione software di un processo aziendale utilizzando un visual designer per la scrittura di tutto questo in codice.

Quindi qual è il problema allora?

Quello che in realtà non ottieni è il seguente:

WWF è progettato per gestire flussi di lavoro di lunga durata. Ma allo stesso tempo, il WWF non ha alcuna funzionalità integrata che ti permetta di modificare i flussi di lavoro in esecuzione. Pertanto, se si modella un processo aziendale utilizzando un flusso di lavoro ed è in esecuzione per 6 mesi, è meglio sperare che il processo aziendale non cambi. Perché se lo fa, dovrai avere più versioni del flusso di lavoro in esecuzione allo stesso tempo. Questo mi sembra un errore di progettazione fondamentale, ma allo stesso tempo sembra più probabile che abbia frainteso qualcosa.

Per noi, questo ha avuto alcuni effetti reali :

  • Rilasciamo nuove versioni ogni mese, ma alcuni flussi di lavoro possono essere eseguiti per un anno. Ciò significa che abbiamo diverse versioni del flusso di lavoro in esecuzione in parallelo, in altre parole diverse versioni delle logiche di business. Ciò equivale al fatto che molte versioni diverse del codice vengono eseguite in produzione nello stesso sistema nello stesso momento, il che diventa un po 'difficile da comprendere per gli utenti. (a seconda che avessero fatto clic su un pulsante "Start" 9 o 10 mesi fa, il software si comporterebbe in modo diverso)
  • Il nostro flusso di lavoro si riferisce a diversi tipi di entità e dal momento che il WWF ora ha persistito e serializzato questi non possiamo davvero ridefinire le entità da allora i flussi di lavoro esistenti non possono essere ripresi (la deserializzazione fallirà

Abbiamo ricevuto alcuni suggerimenti su come gestire questo

  • Quando creiamo una nuova versione del flusso di lavoro, annulliamo tutti i flussi di lavoro in esecuzione e ne creiamo di nuovi. Ma nei nostri flussi di lavoro c'è un sacco di lavoro manuale e se iniziamo da zero molte persone devono rifare il loro lavoro.
  • Tieni traccia di ciò che è stato fatto nel flusso di lavoro e quando ne crei uno nuovo ignora le attività che sono già state eseguite. Ritengo che questa alternativa possa funzionare per flussi di lavoro semplici, ma diventa difficile definire automaticamente quali attività saltare se ci sono importanti refactoring per un flusso di lavoro.
  • Quando creiamo una nuova versione del flusso di lavoro, aggiorna le vecchie versioni utilizzando la nuova funzionalità di WWF 4.5 per l'aggiornamento dei flussi di lavoro. Ma poi dovremmo saltare usando il visual designer e scrivere codice per iniettare le attività nei posti giusti nel flusso di lavoro. Secondo MSDN, questa funzionalità di aggiornamento è intesa solo per correzioni di bug minori e modifiche non più grandi.

Cosa mi manca?

    
posta Nitra 08.10.2013 - 20:55
fonte

2 risposte

1

tl; dr: non è previsto che i flussi di lavoro a esecuzione prolungata cambino durante la loro vita. Se esiste la possibilità che possano cambiare, suddividili in flussi di lavoro più piccoli e più brevi e concatenili per creare un flusso di lavoro più ampio.

Modifica della logica di esecuzione è difficile

Perché a volte il tuo computer richiede un riavvio? Perché non è possibile modificare i driver di dispositivo mentre sono in uso. Come fai ad aggirare questo? Rendendo le cose immutabili e scrivendo programmi in stile funzionale.

Il linguaggio di programmazione Erlang è specificamente progettato per essere aggiornato mentre i programmi sono in esecuzione. Come fa questo? Mantenendo immutabili istanze di funzioni in memoria. Quando esegui l'hot patch di un programma in Erlang, Erlang mantiene semplicemente le istanze funzionali esistenti fino al completamento dell'esecuzione. Qualsiasi nuova istanza delle funzioni utilizzerà la nuova versione della funzione e poiché le funzioni sono immutabili, la stabilità è garantita durante la transizione.

Tieni presente che questo non ti aiuterà con i tuoi flussi di lavoro, perché non sarai ancora in grado di applicare hot patch a un flusso di lavoro esistente mentre è in esecuzione. L'hot patching si riferisce a interi sistemi di funzioni, non singole istanze di funzioni in esecuzione. Il tuo flusso di lavoro (essenzialmente una funzione di lunga durata) dovrebbe ancora terminare l'esecuzione per primo.

Come hai già indicato, cambia in esecuzione i flussi di lavoro sono intesi per piccole modifiche, non per modifiche all'ingrosso al flusso di lavoro.

    
risposta data 08.10.2013 - 21:51
fonte
1

Track what has been done in the workflow and when you create a new one skip activites which have already been executed. I feel that this alternative may work for simple workflows, but it becomes hairy to automatically figure out what activities to skip if there's major refactoring done to a workflow.

Il problema è che può diventare peloso anche manualmente per capire quali attività saltare. Ad esempio, cosa succede se l'attività corrente nel vecchio flusso di lavoro non ha attività equivalenti nella nuova? Quindi ti suggerisco di adottare una strategia combinata:

  • usa l'approccio "track & skip" dove è facilmente possibile
  • usa "cancella e riavvia" dove non è possibile
  • per casi speciali potresti provare a creare flussi di lavoro secondari per evitare un riavvio completo, progettato specificamente per continuare un flusso di lavoro già avviato (vecchio) a un'attività specifica, ma senza la necessità di riavviare dall'inizio completo
  • cerca di mantenere basso il numero di "punti di transizione" (le attività in cui gli attori devono passare dalla versione precedente del flusso di lavoro a quelli nuovi) - assicurati che i tuoi attori raggiungano uno di questi punti finché il vecchio flusso di lavoro non viene sostituito da la nuova versione. I punti di transizione dovrebbero avere sempre un pendente nella nuova versione. Questo aiuterà in tutti i casi sopra.
risposta data 08.10.2013 - 23:22
fonte

Leggi altre domande sui tag