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最近推出了对的支持。现在,使用,可以从上游状态传入一个数组并迭代数组中的每个元素,使用每个项作为并行执行的子工作流的输入。

这些答案中有没有回答您的问题?它使用哪些库?