并行(parallel)节点
更新时间:2024-07-05
概述
parallel 节点用来并行执行多个节点,它定义了多个分支,每个分支内包含一系列串行的节点。
parallel 会把自己经过 stateDataFilter
过滤后的输入数据,拷贝给每个分支的开始节点,作为它们的输入数据。在所有分支执行结束后,parallel 再把分支的输出汇总,放入自己的节点数据内并输出。若其中一个分支执行失败,那么 parallel 节点也会失败。
参数
以下为 parallel 节点所包含的参数字段:
字段 | 类型 | 描述 |
---|---|---|
type(必需) | string | 节点类型,值为 "parallel" |
name(必需) | string | 节点名称 |
branches(必需) | array of branch | 分支数组 |
next(二选一) | string | 当前节点运行结束后,下一个要运行的节点 |
end(二选一) | bool | 设定 end 参数为 true,表示该节点运行结束后,没有继续要运行的节点。只可以定义 next 或 end 中的一个 |
description(可选) | string | 节点描述信息 |
stateDataFilter(可选) | object | 节点输入输出过滤,参考输入与输出 |
retry(可选) | object | 错误重试定义,参考错误重试 |
catch(可选) | object | 错误捕获定义,参考错误捕获 |
分支 branch 的定义:
字段 | 类型 | 描述 |
---|---|---|
start(必需) | string | 分支的开始节点 |
states(必需) | array of state | 该分支的节点数组 |
可以看到,分支的定义其实就是一个简化版的完整工作流的定义。
示例
示例工作流定义如下,parallel 节点定义了两个分支:
YAML
1name: demo
2start: hello
3states:
4 - type: parallel
5 name: hello
6 branches:
7 - start: func1
8 states:
9 - type: operation
10 name: func1
11 resource: "brn:bce:cfc:su:123456:function:test1:$LATEST"
12 next: func2
13 - type: operation
14 name: func2
15 resource: "brn:bce:cfc:su:123456:function:test2:$LATEST"
16 end: true
17 - start: pass1
18 states:
19 - type: pass
20 name: pass1
21 data:
22 bce: xflow
23 end: true
24 next: succ
25 - type: succeed
26 name: succ
假定工作流的输入是 {"hello":"world"}
,那么 parallel 节点及两个分支的输入数据均为 {"hello":"world"}
。
假定分支1的输出数据是 {"result":"success"}
,分支2从定义可知输出数据是 {"hello":"world", "bce":"xflow"}
,
最终 parallel 的输出数据是
Plain Text
1{
2 "hello":"world",
3 "bce":"xflow",
4 "result":"success"
5}