Amazon web services 使用Step函数并行运行的动态状态
我们有一个用例,在这个用例中,我们需要在工作流开始时按顺序运行一些步骤,然后是一系列需要并行运行的任务。但不同之处在于,每个请求的任务数量可能有所不同 例如:Amazon web services 使用Step函数并行运行的动态状态,amazon-web-services,workflow,amazon-swf,aws-step-functions,Amazon Web Services,Workflow,Amazon Swf,Aws Step Functions,我们有一个用例,在这个用例中,我们需要在工作流开始时按顺序运行一些步骤,然后是一系列需要并行运行的任务。但不同之处在于,每个请求的任务数量可能有所不同 例如: Request1: Start -> A -> B -> B1, B2 -> C -> C1, C2 -> D -> End Request2: Start -> A -> B -> B1, B2, B3, B4, B5 -> C -> C1 -> D -&
Request1: Start -> A -> B -> B1, B2 -> C -> C1, C2 -> D -> End
Request2: Start -> A -> B -> B1, B2, B3, B4, B5 -> C -> C1 -> D -> End
注意:用->
分隔的任务是顺序的,而用,
分隔的任务是并行运行的。
有没有一种方法可以在step函数中对此进行建模?
我们考虑做的一件可能的事情是为每个请求创建一个状态函数。这是推荐的吗?或者我应该考虑使用SWF并自己维护决策器逻辑吗?我认为这是SWF的一个非常简单的用法,您的决策器决定哪些步骤需要运行,并根据需要安排活动 大致如下:
startDecision(fooRequest) {
switch (fooRequest.type) {
case workflowExecutionStarted:
scheduleActivity(type=A)
fooRequest.context.currentState=doingA
break;
case activityTaskCompleted:
handlers[fooRequest.context.currentState](fooRequest);
break;
}
}
handlers[doingA] = function(fooRequest) {
switch (fooRequest.payloadData.foo) {
case type1:
fooRequest.context.currentState=doingB
scheduleActivities([{type=B1},{type=B2}])
break;
case type2:
fooRequest.context.currentState=doingB
scheduleActivities([{type=B1},{type=B2},{type=B3}...])
break;
}
}
handlers[doingB] = function(fooRequest) {
if (numberOfRunningActivities == 0) { // all of them have finished
scheduleActivity(type=C)
state=doingC
} else {
respondEmpty() // still waiting
}
}
等等。决策者的角色基本上是维护状态机,该状态机跟踪下一组要调度的活动。因此,我认为没有必要为每种类型的请求都设置一个状态函数(Activity),而是在决策器中围绕每种类型及其当前状态有不同的逻辑 如果请求数量不太多,则可以考虑使用不同的步骤函数。由于您只需执行任务A1、B1。。。etc只有一次,两个step函数都可以调用公共任务
否则,您可以根据请求查看并分支状态。AWS最近推出了对的支持。现在,使用,可以从上游状态传入一个数组并迭代数组中的每个元素,使用每个项作为并行执行的子工作流的输入。这些答案中有没有回答您的问题?它使用哪些库?