Skip to content

Workflow patterns

Bartosz Balis edited this page Jul 31, 2019 · 27 revisions

Evaluation of HyperFlow with respect to workflow pattern support (http://www.workflowpatterns.com)

Control patterns

  1. Sequence. Yes: a signal exchanged between two processes automatically establishes a sequence.
  2. Parallel Split. Yes: for example, a dataflow process with multiple outputs connected to different processes automatically splits the execution into parallel branches.
  3. Synchronization. Yes: a dataflow process synchronizes all branches of execution associated with its inputs.
  4. Exclusive Choice. Yes: this pattern is enabled by a choice process whose function evaluates the condition and sets the condition flag for one of the output signals.
  5. Simple Merge. Yes: both simple and multi-merge can be implemented by having multiple processes produce the same signal to another process (multiple-sources-single-sink, see Multi-Merge pattern below for illustration).
  6. Multi-Choice. Yes: the choice process type enables this pattern.
  7. Structured Synchronizing Merge. Yes: this pattern is made possible by the choice and join processes connected with the merge control signal. This signal sets the Nb and Nj parameters of join to the number of branches enabled by choice in a given firing. This is illustrated in the figure below.
  8. Multi-Merge. Yes: both simple and multi-merge can be implemented by having multiple processes produce the same signal to another process, as illustrated below.
  9. Structured Discriminator. Yes: the join process with parameters Nj=1, Nb=# of inputs enables this pattern.
  10. Blocking Discriminator. Yes: same as structured discriminator with additional next signal emitted by the join process after reset (see Blocking Partial Join for illustration).
  11. Cancelling Discriminator. No: cancelling of tasks (firings) is not supported at the moment.
  12. Structured Partial Join. Yes: the join process fulfills this pattern with its parameters Nj - number of branches to join, Nb - number of active branches.
  13. Blocking Partial Join. Yes: same as Structured Partial Join with additional next signal emitted by the join process after reset, as illustrated in the figure below.
  14. Cancelling Partial Join. No: cancelling of tasks (firings) is not supported at the moment.
  15. Generalised AND-Join. Yes: Dataflow process type naturally fulfills this pattern owing to the mechanism of queuing signals built into the HyperFlow model of computation.
  16. Local Synchronizing Merge. Yes: same as Structured Synchronizing Merge (described above).
  17. General Synchronizing Merge. Not supported
  18. Thread Merge. Yes: this pattern can be implemented using a choice process, as in the AppEngine image gallery workflow where we need to wait for all image processing 'threads' to finish before we can generate the HTML file. To this end, the MergePaths process gets a count of items to be collected (pathCnt) and for every thumbPath received, it adds it to a collection, decreases the value pathCnt, and emits it to itself. When pathCnt reaches 0, the process emits the other signal (thumbPathList) signal, concluding the merge.
  19. Thread Split. Yes: the parlevel property of a process enables this pattern, as in the AppEngine image gallery workflow.
  20. Multiple Instances without Synchronization
  21. Multiple Instances with a Priori Design-Time Knowledge
  22. Multiple Instances with a Priori Run-Time Knowledge
  23. Multiple Instances without a Priori Run-Time Knowledge
  24. Static Partial Join for Multiple Instances
  25. Cancelling Partial Join for Multiple Instances
  26. Dynamic Partial Join for Multiple Instances
  27. Deferred Choice
  28. Interleaved Parallel Routing
  29. Milestone
  30. Critical Section
  31. Interleaved Routing
  32. Cancel Task
  33. Cancel Case
  34. Cancel Region
  35. Cancel Multiple Instance Activity
  36. Complete Multiple Instance Activity
  37. Arbitrary Cycles
  38. Structured Loop
  39. Recursion
  40. Implicit Termination
  41. Explicit Termination
  42. Transient Trigger
  43. Persistent Trigger

Data patterns

  1. Task Data. Yes: all variables defined inside the function of a process (implemented in JavaScript) are only visible by a given process.
  2. Block Data.
  3. Scope Data
  4. Multiple Instance Data. Yes: all variables defined inside the function of a process (implemented in JavaScript) are private to a given firing of a process.
  5. Case Data. Yes, partially: case data can be achieved by defining variables shared by all process functions of a given workflow. However, the recommended way of exchanging data is through signals.
  6. Folder Data
  7. Workflow Data
  8. Environment Data
  9. Data Interaction - Task to Task
  10. Data Interaction - Block Task to Sub-Workflow Decomposition
  11. Data Interaction - Sub-Workflow Decomposition to Block Task
  12. Data Interaction - to Multiple Instance Task
  13. Data Interaction - from Multiple Instance Task
  14. Data Interaction - Case to Case
  15. Data Interaction - Task to Environment - Push-Oriented
  16. Data Interaction - Environment to Task - Pull-Oriented
  17. Data Interaction - Environment to Task - Push-Oriented
  18. Data Interaction - Task to Environment - Pull-Oriented
  19. Data Interaction - Case to Environment - Push-Oriented
  20. Data Interaction - Environment to Case - Pull-Oriented
  21. Data Interaction - Environment to Case - Push-Oriented
  22. Data Interaction - Case to Environment - Pull-Oriented
  23. Data Interaction - Workflow to Environment - Push-Oriented
  24. Data Interaction - Environment to Workflow - Pull-Oriented
  25. Data Interaction - Environment to Workflow - Push-Oriented
  26. Data Interaction - Workflow to Environment - Pull-Oriented
  27. Data Transfer by Value - Incoming. Yes: by receiving a signal with a data value.
  28. Data Transfer by Value - Outgoing. Yes: by sending a signal with a data value.
  29. Data Transfer - Copy In/Copy Out
  30. Data Transfer by Reference - Unlocked. Yes: data references can be passed in signals instead of actual values.
  31. Data Transfer by Reference - With Lock. Yes, indirectly. Support of a mutually accessible data store is considered a separate concern, out of scope of the workflow engine. However, functions can use an external store with a lock mechanism in which workflow processes can share data.
  32. Data Transformation - Input. Yes: data can be transformed in the process function, before the actual processing.
  33. Data Transformation - Output. Yes: data can be transformed in the process function, after the actual processing and right before invoking the callback.
  34. Task Precondition - Data Existence
  35. Task Precondition - Data Value
  36. Task Postcondition - Data Existence
  37. Task Postcondition - Data Value
  38. Event-based Task Trigger
  39. Data-based Task Trigger
  40. Data-based Routing. Yes: this pattern can be implemented with a choice process whose function evaluates a condition based e.g. on input signals and sets the condition flag for output signals accordingly. Example: Streaming Map/Reduce workflow.