DAG和Steps
steps:在某些工作流系统中,steps
也称作状态机,通常指的是按顺序执行的一系列步骤,每个步骤可以是一个单一的任务或者一组并行执行的任务。在这种模型中,工作流的执行顺序通常是线性的,每个步骤的开始通常依赖于前一个步骤的完成。
DAG:DAG模型中,工作流被定义为一个有向图,其中节点表示任务,边表示任务之间的依赖关系。这种模型允许更复杂的依赖关系,可以轻松地表示任务之间的并行和条件执行。
steps
强调顺序性,DAG
侧重我依赖什么,dag可以有多个root节点,同层没有依赖关系,可以并发执行,允许最大的并行性。
如果工作流中所有任务的先后顺序已经理清楚了,推荐使用steps
,会更简单。
如果工作流很复杂,只知道每个任务之间的依赖关系,那么使用DAG
可能更合适。
可以使用dag引擎实现steps能力吗?
最难适配的是steps里面的choice,下一步其实不是确定的(在dag里面next都是同一层级,允许并行),check时,choice左边的steps不能依赖右边的节点结果?运行时,动态删除右边dag的出边及其子边?理论上是可以实现的。都使用dag引擎后期适配其他类型的任务可能会带来更多的适配成本。
我们可以选择设计统一的调度执行层,它能够处理不同类型的任务执行模型。在这个框架中,steps和DAG被视为不同的任务执行模型,框架会根据定义的模型来调度和执行任务。例如,steps交给AWS Step Functions引擎执行,dag交给dag引擎执行。