Airflow 与 AWS Step Functions 的工作流对比
Airflow versus AWS Step Functions for workflow
我正在开发一个项目,该项目从 AWS S3 获取一组输入数据,对其进行预处理和分配,启动 10K 个批处理容器以在 AWS Batch 上并行处理分配后的数据,post-聚合数据,并将其推送到 S3。
我已经有其他项目的 Airflow + Batch 软件模式,但还没有处理 10k 并行任务的缩放因子。 Airflow 很好,因为我可以查看哪些任务失败并在调试后重试任务。但是在一个 Airflow EC2 实例上处理那么多任务似乎是一个障碍。另一种选择是让一项任务启动 10k 容器并从那里对其进行监控。
我没有使用过 Step Functions,但听说它是 AWS 的 Airflow。网上似乎有很多 Step Functions + Batch 的模式。 Step Functions 是否是检查我的用例的好途径?对于失败的作业/重试任务的能力,您是否获得了与使用 Airflow 时相同的见解?
我研究过 Apache Airflow 和 AWS Step Functions,这里有一些见解:
- Step Functions 提供开箱即用的维护。它具有 use-case 所需的高可用性和可扩展性,对于 Airflow,我们必须通过 auto-scaling/load 在服务器或容器 (kubernetes) 上进行平衡。*
- Airflow 和 Step Functions 都具有用户友好性 UI。虽然 Airflow 支持状态机的多种表示形式,但 Step Functions 仅将状态机显示为 DAG。
- 从版本 2.0 开始,Airflow 的 Rest API 现在是 stable. AWS Step Functions are also supported by a range of production graded cli and SDK's。
- Airflow 有服务器成本,而 Step Functions 每月有 4000 次免费步骤执行(免费套餐),之后每步 0.000025 美元。例如如果您每天对 运行 一次的 AWS Batch 使用 10K 步,则价格为每天 0.25 美元(每月 7.5 美元)。 Airflow 服务器(t2.large ec2 1 年预留实例)的价格为每月 41.98 美元。对于这两种情况,我们都必须使用 AWS Batch。**
- AWS Batch 可以集成到 Airflow and Step Functions。
- 您可以清除并重新运行 Apache Airflow 中的失败任务,但在 Step Functions 中,您还必须在 Step Functions 定义中创建一个 custom implementation to handle that. You may handle automated retries with back-offs。
- 对于 Step Functions 中的失败任务,您将看到失败状态的可视化表示以及单击它时的详细消息。您也可以使用 aws cli 或 sdk 获取详细信息。
- Step Functions 使用易于使用的 JSON 作为状态机定义,而 Airflow 使用 Python 脚本。
- Step Functions 支持async callbacks, i.e. state machine pauses until an external source notifies it to resume. While Airflow has yet to add此功能。
总体而言,我看到了使用 AWS Step Functions 的更多优势。您将必须根据您的用例考虑这两种服务的维护成本和开发成本。
更新(Apache Airflow 服务的 AWS 托管工作流):
- *借助适用于 Apache Airflow 服务的 AWS Managed Workflows,您可以将 Airflow 服务的部署、维护、autoscaling/load 平衡和安全工作卸载到 AWS。但请考虑您愿意接受的版本号,因为 AWS 托管服务大多落后于最新版本。 (例如截至2021年03月08日,开源airflow最新版本为2.01,而MWAA允许版本为1.10.12)
- **MWAA 在环境、实例和存储方面的成本。 More details here.
我正在开发一个项目,该项目从 AWS S3 获取一组输入数据,对其进行预处理和分配,启动 10K 个批处理容器以在 AWS Batch 上并行处理分配后的数据,post-聚合数据,并将其推送到 S3。
我已经有其他项目的 Airflow + Batch 软件模式,但还没有处理 10k 并行任务的缩放因子。 Airflow 很好,因为我可以查看哪些任务失败并在调试后重试任务。但是在一个 Airflow EC2 实例上处理那么多任务似乎是一个障碍。另一种选择是让一项任务启动 10k 容器并从那里对其进行监控。
我没有使用过 Step Functions,但听说它是 AWS 的 Airflow。网上似乎有很多 Step Functions + Batch 的模式。 Step Functions 是否是检查我的用例的好途径?对于失败的作业/重试任务的能力,您是否获得了与使用 Airflow 时相同的见解?
我研究过 Apache Airflow 和 AWS Step Functions,这里有一些见解:
- Step Functions 提供开箱即用的维护。它具有 use-case 所需的高可用性和可扩展性,对于 Airflow,我们必须通过 auto-scaling/load 在服务器或容器 (kubernetes) 上进行平衡。*
- Airflow 和 Step Functions 都具有用户友好性 UI。虽然 Airflow 支持状态机的多种表示形式,但 Step Functions 仅将状态机显示为 DAG。
- 从版本 2.0 开始,Airflow 的 Rest API 现在是 stable. AWS Step Functions are also supported by a range of production graded cli and SDK's。
- Airflow 有服务器成本,而 Step Functions 每月有 4000 次免费步骤执行(免费套餐),之后每步 0.000025 美元。例如如果您每天对 运行 一次的 AWS Batch 使用 10K 步,则价格为每天 0.25 美元(每月 7.5 美元)。 Airflow 服务器(t2.large ec2 1 年预留实例)的价格为每月 41.98 美元。对于这两种情况,我们都必须使用 AWS Batch。**
- AWS Batch 可以集成到 Airflow and Step Functions。
- 您可以清除并重新运行 Apache Airflow 中的失败任务,但在 Step Functions 中,您还必须在 Step Functions 定义中创建一个 custom implementation to handle that. You may handle automated retries with back-offs。
- 对于 Step Functions 中的失败任务,您将看到失败状态的可视化表示以及单击它时的详细消息。您也可以使用 aws cli 或 sdk 获取详细信息。
- Step Functions 使用易于使用的 JSON 作为状态机定义,而 Airflow 使用 Python 脚本。
- Step Functions 支持async callbacks, i.e. state machine pauses until an external source notifies it to resume. While Airflow has yet to add此功能。
总体而言,我看到了使用 AWS Step Functions 的更多优势。您将必须根据您的用例考虑这两种服务的维护成本和开发成本。
更新(Apache Airflow 服务的 AWS 托管工作流):
- *借助适用于 Apache Airflow 服务的 AWS Managed Workflows,您可以将 Airflow 服务的部署、维护、autoscaling/load 平衡和安全工作卸载到 AWS。但请考虑您愿意接受的版本号,因为 AWS 托管服务大多落后于最新版本。 (例如截至2021年03月08日,开源airflow最新版本为2.01,而MWAA允许版本为1.10.12)
- **MWAA 在环境、实例和存储方面的成本。 More details here.