【问题标题】:Dynamic states to be run in parallel using Step Functions使用 Step Functions 并行运行的动态状态
【发布时间】:2018-09-14 18:31:55
【问题描述】:

我们有一个用例,我们需要在工作流开始时按顺序运行一些步骤,然后是需要并行运行的一堆任务。但不同之处在于每个请求的任务数量可能会有所不同。

例如:

Request1: Start -> A -> B -> B1, B2 -> C -> C1, C2 -> D -> End  
Request2: Start -> A -> B -> B1, B2, B3, B4, B5 -> C -> C1 -> D -> End

注意:用-> 分隔的任务是连续的,而用, 分隔的任务是并行运行的。

有没有办法在阶跃函数中对此进行建模? 我们正在考虑做的一件可能的事情是为每个请求创建一个状态函数。这是推荐的吗?还是我应该考虑使用 SWF 并自己维护决策器逻辑?

【问题讨论】:

  • 这些答案是否能回答您的问题?

标签: amazon-web-services workflow amazon-swf aws-step-functions


【解决方案1】:

AWS 最近推出了对 dynamic parallelism 的支持。所以现在,使用Map state,可以从上游状态传入一个数组并迭代数组中的每个元素,将每个项目用作并行执行的子工作流的输入。

【讨论】:

    【解决方案2】:

    我认为这是 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),而是你在 Decider 中围绕每种类型及其当前状态有不同的逻辑。

    【讨论】:

    • 它使用哪些库?
    【解决方案3】:

    如果请求的数量不是太多,那么可以考虑不同的阶跃函数。由于您只需执行任务 A1、B1... 等一次,因此两个步骤函数都可以调用常见任务。

    否则,您可以查看choices 并根据请求分支出状态。

    【讨论】:

      猜你喜欢
      • 2020-09-05
      • 1970-01-01
      • 1970-01-01
      • 2022-09-23
      • 1970-01-01
      • 2021-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多