具有可变依赖性的用例的气流 dag 定义

definition of airflow dag for a use case with variable dependencies

我想将气流用于以下用例:

注意:此处描述的每个 airflow 任务实际上都是对远程微服务的简单调用(grpc 调用)。

目前我想到的设计:

我的问题:

你最初的想法是我会同意的。拥有 150 个不同的工作流程,每个工作流程有 10K 个任务,这会导致一个完全动态且难以管理的场景。一方面你说每个任务只是一个简单的 gRPC 但同时你提到页面级任务真的很复杂以封装在单个任务后面并且存在外部依赖性可能导致以小时为单位的流量瓶颈。

如果我是你,我会重新设计解决方案并将页面级报告转移到不同的层。例如,创建一个可以执行所有这些复杂计算的服务将是比尝试在 Airflow 中实现它更好的选择。这样您可能会显着减少页面级任务的数量。

关于您的具体问题:

  • Airflow 与大小写无关 - 每个场景都可以是完美的,具体取决于 设计。 Oozie 真的很老派,很笨重,没有太多的 Airfow 提供的集成功能。路易吉我没用过
  • 如前所述,这种方法既不可预测又难以管理。我预见到混乱:)
  • 挂起 UI 是一个很好的指标,表明您应该重新审视您的实施设计。但是 UI 应该是您的第一要务 - 您如何在单个工作流中监控和管理 10,000 个任务?正确 - 你不能。并将其乘以 150。
  • 我不久前从一家公司读到一篇文章,他们在使用 Celery 进行横向扩展时遇到了问题,他们决定改为纵向扩展,运行 许多调度程序进程在同一个 VM 上并行处理。不太确定这是否是一个对您的方案有很大帮助的设置。

如果我是你,我会为所有 150 个站点使用一个工作流程。我会为每个网站创建一个 subdag(顺便说一句,official docs 中没有提到 'unstable' 这个词)并尝试将复杂的计算操作卸载到不同的层以减少数量尽可能多的页面级任务。