用于工作流程的 Airflow 与 AWS Step Functions

san*_*ayr 22 airflow aws-step-functions

我正在开发一个项目,该项目从 AWS S3 获取一组输入数据,对其进行预处理和分割,启动 10K 批处理容器以在 AWS Batch 上并行处理分割数据,对数据进行后聚合并推送它到 S3。

我已经从其他项目中获得了 Airflow + Batch 的软件模式,但还没有处理 10k 并行任务的缩放因子。Airflow 很好,因为我可以查看哪些任务失败并在调试后重试任务。但是在一个 Airflow EC2 实例上处理这么多任务似乎是一个障碍。另一种选择是让一项任务启动 10k 容器并从那里监控它。

我没有使用 Step Functions 的经验,但听说它是 AWS 的 Airflow。Step Functions + Batch 在线看起来有很多模式。Step Functions 似乎是检查我的用例的好方法吗?您对失败的工作/重试任务的能力是否与使用 Airflow 获得相同的见解?

ams*_*msh 53

我曾在 Apache Airflow 和 AWS Step Functions 上工作过,以下是一些见解:

  • Step Functions 提供开箱即用的维护。它具有您的用例所需的高可用性和可扩展性,对于 Airflow,我们必须通过服务器或容器 (kubernetes) 上的自动扩展/负载平衡来实现。*
  • Airflow 和 Step Functions 都有用户友好的 UI。虽然 Airflow 支持状态机的多种表示,但 Step Functions 仅将状态机显示为 DAG。
  • 从 2.0 版本开始,Airflow 的 Rest API 现在是稳定的。一系列生产分级 cli 和SDK 的.
  • Airflow 有服务器成本,而 Step Functions 有 4000 次/月的免费步骤执行(免费套餐),之后是 0.000025 美元/步。例如,如果您对每天运行一次的 AWS Batch 使用 10K 步,则您每天需要支付 0.25 美元(每月 7.5 美元)。Airflow 服务器(t2.large ec2 1 年预留实例)的价格为每月 41.98 美元。无论哪种情况,我们都必须使用 AWS Batch。**
  • AWS Batch 可以集成到AirflowStep Functions
  • 您可以在 Apache Airflow 中清除并重新运行失败的任务,但在 Step Functions 中,您必须创建自定义实现来处理该任务。您也可以在 Step Functions 定义中使用回退处理自动重试
  • 对于 Step Functions 中的失败任务,当您单击它时,您将获得失败状态的可视化表示和详细消息。您也可以使用 aws cli 或 sdk 来获取详细信息。
  • Step Functions 使用易于使用的 JSON 作为状态机定义,而 Airflow 使用 Python 脚本。
  • Step Functions 支持异步回调,即状态机暂停,直到外部源通知它恢复。而 Airflow 还没有添加这个功能。

总的来说,我看到了使用 AWS Step Functions 的更多优势。您必须根据您的用例考虑这两种服务的维护成本和开发成本。

更新(适用于 Apache Airflow 服务的 AWS 托管工作流):

  • *借助适用于 Apache Airflow 服务的 AWS Managed Workflows,您可以将 Airflow 服务的部署、维护、自动扩展/负载平衡和安全性卸载到 AWS。但请考虑您愿意接受的版本号,因为 AWS 托管服务大多落后于最新版本。(例如,截至 2021 年 3 月 8 日,最新版本的开源气流为 2.01,而 MWAA 允许版本为 1.10.12)
  • **环境、实例和存储的 MWAA 成本。更多细节在这里

  • 监控和日志记录怎么样?我们有相同的 AWS 步骤功能和气流记录工具吗? (4认同)
  • 这对于 AWS 管理的 Airflow 仍然有效吗...?如果没有,让我们在这里更新答案 (2认同)
  • Step Functions 状态机不是 DAG。他们可以有周期。 (2认同)

And*_*amm 6

我在个人和工作项目中使用了 Airflow 和 Step Functions。

  • 总的来说,我喜欢步骤函数,但事实上,您需要使用 Event Bridge 来安排执行,这非常烦人。实际上,我认为这里气流可以充当阶跃函数的触发器。
  • 如果 Airflow 的管理成本更低,我总是会选择它,因为我发现每当您需要绕开主要用例时,管理基于 Json 的管道都很麻烦。这种情况总是以某种方式发生在我身上。当您需要进行源代码控制时,这会变得更加复杂。
  • 这是一个比较主观的评估,但我发现 Airflow 的监控能力远远大于步骤功能。

还有一些有关 Airflow 与 Step 函数使用的信息

在此输入图像描述