-
Notifications
You must be signed in to change notification settings - Fork 30
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
dataflowprocess with multiple outputs connected to different processes automatically splits the execution into parallel branches. - Synchronization. Yes: a
dataflowprocess synchronizes all branches of execution associated with its inputs. - Exclusive Choice. Yes: this pattern is enabled by a
choiceprocess whose function evaluates the condition and sets theconditionflag 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
choiceprocess type enables this pattern. - Structured Synchronizing Merge. Yes: this pattern is made possible by the
choiceandjoinprocesses connected with themergecontrol signal. This signal sets theNbandNjparameters ofjointo the number of branches enabled bychoicein 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
joinprocess with parametersNj=1, Nb=# of inputsenables this pattern. - Blocking Discriminator. Yes: same as structured discriminator with additional
nextsignal emitted by thejoinprocess 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
joinprocess 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
nextsignal emitted by thejoinprocess 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
choiceprocess, 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, theMergePathsprocess gets a count of items to be collected (pathCnt) and for everythumbPathreceived, it adds it to a collection, decreases the valuepathCnt, and emits it to itself. WhenpathCntreaches 0, the process emits the other signal (thumbPathList) signal, concluding the merge. - Thread Split. Yes: the
parlevelproperty 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
choiceprocess whose function evaluates a condition based e.g. on input signals and sets theconditionflag for output signals accordingly. Example: Streaming Map/Reduce workflow.