-
Notifications
You must be signed in to change notification settings - Fork 31
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)
- Sequence. Yes: a signal exchanged between two processes automatically establishes a sequence.
- Parallel Split. Yes: for example, a
dataflow
process with multiple outputs connected to different processes automatically splits the execution into parallel branches. - Synchronization. Yes: a
dataflow
process synchronizes all branches of execution associated with its inputs. - Exclusive Choice. Yes: this pattern is enabled by a
choice
process whose function evaluates the condition and sets thecondition
flag for one of the output signals. - 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).
- Multi-Choice. Yes: the
choice
process type enables this pattern. - Structured Synchronizing Merge. Yes: this pattern is made possible by the
choice
andjoin
processes connected with themerge
control signal. This signal sets theNb
andNj
parameters ofjoin
to the number of branches enabled bychoice
in a given firing. This is illustrated in the figure below. - 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.
- Structured Discriminator. Yes: the
join
process with parametersNj=1, Nb=# of inputs
enables this pattern. - Blocking Discriminator. Yes: same as structured discriminator with additional
next
signal emitted by thejoin
process after reset (see Blocking Partial Join for illustration). - Cancelling Discriminator. No: cancelling of tasks (firings) is not supported at the moment.
- Structured Partial Join. Yes: the
join
process fulfills this pattern with its parametersNj
- number of branches to join,Nb
- number of active branches. - Blocking Partial Join. Yes: same as Structured Partial Join with additional
next
signal emitted by thejoin
process after reset, as illustrated in the figure below. - Cancelling Partial Join. No: cancelling of tasks (firings) is not supported at the moment.
- 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.
- Local Synchronizing Merge. Yes: same as Structured Synchronizing Merge (described above).
- General Synchronizing Merge. Not supported
- 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, theMergePaths
process gets a count of items to be collected (pathCnt
) and for everythumbPath
received, it adds it to a collection, decreases the valuepathCnt
, and emits it to itself. WhenpathCnt
reaches 0, the process emits the other signal (thumbPathList
) signal, concluding the merge. - Thread Split. Yes: the
parlevel
property of a process enables this pattern, as in the AppEngine image gallery workflow. - Multiple Instances without Synchronization
- Multiple Instances with a Priori Design-Time Knowledge
- Multiple Instances with a Priori Run-Time Knowledge
- Multiple Instances without a Priori Run-Time Knowledge
- Static Partial Join for Multiple Instances
- Cancelling Partial Join for Multiple Instances
- Dynamic Partial Join for Multiple Instances
- Deferred Choice
- Interleaved Parallel Routing
- Milestone
- Critical Section
- Interleaved Routing
- Cancel Task
- Cancel Case
- Cancel Region
- Cancel Multiple Instance Activity
- Complete Multiple Instance Activity
- Arbitrary Cycles
- Structured Loop
- Recursion
- Implicit Termination
- Explicit Termination
- Transient Trigger
- Persistent Trigger
- Task Data. Yes: all variables defined inside the function of a process (implemented in JavaScript) are only visible by a given process.
- Block Data.
- Scope Data
- 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.
- 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.
- Folder Data
- Workflow Data
- Environment Data
- Data Interaction - Task to Task
- Data Interaction - Block Task to Sub-Workflow Decomposition
- Data Interaction - Sub-Workflow Decomposition to Block Task
- Data Interaction - to Multiple Instance Task
- Data Interaction - from Multiple Instance Task
- Data Interaction - Case to Case
- Data Interaction - Task to Environment - Push-Oriented
- Data Interaction - Environment to Task - Pull-Oriented
- Data Interaction - Environment to Task - Push-Oriented
- Data Interaction - Task to Environment - Pull-Oriented
- Data Interaction - Case to Environment - Push-Oriented
- Data Interaction - Environment to Case - Pull-Oriented
- Data Interaction - Environment to Case - Push-Oriented
- Data Interaction - Case to Environment - Pull-Oriented
- Data Interaction - Workflow to Environment - Push-Oriented
- Data Interaction - Environment to Workflow - Pull-Oriented
- Data Interaction - Environment to Workflow - Push-Oriented
- Data Interaction - Workflow to Environment - Pull-Oriented
- Data Transfer by Value - Incoming. Yes: by receiving a signal with a data value.
- Data Transfer by Value - Outgoing. Yes: by sending a signal with a data value.
- Data Transfer - Copy In/Copy Out
- Data Transfer by Reference - Unlocked. Yes: data references can be passed in signals instead of actual values.
- 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.
- Data Transformation - Input. Yes: data can be transformed in the process function, before the actual processing.
- Data Transformation - Output. Yes: data can be transformed in the process function, after the actual processing and right before invoking the callback.
- Task Precondition - Data Existence
- Task Precondition - Data Value
- Task Postcondition - Data Existence
- Task Postcondition - Data Value
- Event-based Task Trigger
- Data-based Task Trigger
- 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 thecondition
flag for output signals accordingly. Example: Streaming Map/Reduce workflow.