编排引擎和框架?

Eug*_*rin 12 java workflow frameworks orchestration

我正在寻找一个编排框架/引擎/工具包来替换/升级现有软件,主要是因为可扩展性限制。我所说的编排是指通用任务和工作流的异步和分布式执行。

更具体地说,要求几乎是这些:

  • 通用任务的包装和执行,如果依赖于语言,则在 Java 中
  • 用于任务和工作流按需触发的 API
  • 调度也会很好
  • 支持分布式架构和可扩展性(主要用于大量小任务)
  • 持久性和弹性
  • 高级工作流配置功能(执行此操作,然后并行执行3 个任务,然后执行此操作,具有优先级、依赖项...)
  • 监控和管理 UI(或至少 API)

现有系统是一个老式的单体服务(在 Java 中),它具有大部分功能,包括应尽可能保持不变的执行逻辑本身。

有没有人有类似问题的经验?在我看来,它应该很常见,如果我必须完全自己实现它会很奇怪。我在这里发现了一些问题(比如这个这个)讨论编排和编排系统的理论,但不是实现它的工具的真实例子。此外,我认为我们并不是在谈论微服务 - 任务并不长且繁重,它们只是很多,在后台运行,执行多种类型的短期作业。我不会为每种工作类型创建服务。

此时我也没有在寻找云和容器服务——据我所知,部署是一个不同的问题。

我得到的最接近的是Netflix Conductor 引擎,它通过运行一个编排服务器来满足大多数需求,该服务器管理在 servlet(或任何语言的任何 Web 服务 - 加分项)中实现的任务。然而,它似乎主要是为了在工作流中安排繁重的任务而不是运行大量的小任务,这让我想知道在 servlet 中调用许多小任务的开销是多少。

有没有人对我可以使用的导体或其他工具有经验或任何意见?或者甚至是我解决问题的整个方法?

编辑:我意识到这是一种“需要的研究建议”,所以让我们简单地将其分为 3 个问题:

  1. 我是否应该为上述要求寻找编排解决方案?
  2. 有没有人有使用Netflix Conductor 的经验?有任何反馈吗?
  3. 它有好的竞争对手吗?

Max*_*eev 8

Netflix Conductor的主要竞争对手是Temporal Workflow。通过使用代码而不是 JSON DSL 来实现编排逻辑,它的扩展性更好,对开发人员更友好。

它还可以通过实施特定的优化(本地活动)来处理细粒度的任务,这些优化允许将多个小任务批处理到单个数据库更新中。

Temporal 已经在 Uber、Coinbase、HashiCorp、Dagadog、Stripe 和其他数百家公司进行了五年多的生产强化。

  • 仅供参考,给出的答案来自 Temporal 的创建者,并不是说这个事实降低了它的价值。我发现 Temporal 的唯一问题是 SDK 支持有限,特别是在 .NET 生态系统中(例如 C# 语言)。在这种情况下我会选择Conductor。 (3认同)

dem*_*ica 6

也许您正在寻找类似 Airflow https://airflow.apache.org/的东西?

如果语言相关,则用 Java 封装和执行通用任务

https://github.com/apache/incubator-airflow/tree/master/airflow/hooks https://github.com/apache/incubator-airflow/tree/master/airflow/contrib/operators

用于按需触发任务和工作流程的 API

https://airflow.apache.org/api.html(实验性)

安排一下也不错

想想类固醇的 cron - https://airflow.apache.org/scheduler.html

支持分布式架构和可扩展性(主要针对大量小任务)

使用 dask 或 celery 节点进行扩展 - Airflow + celery 或 dask。为了什么,什么时候?

持久性和弹性

使用 postgres db 和rabbitMQ - 如果您的部署架构是无状态的(例如,使用 docker 的可重复容器和卷),如果您使用 Kubernetes 或 Consul,那么您应该在 WAL 复制方面处于良好状态,还有其他方法可以在其他组件上实现更高的弹性

高级工作流程配置功能(执行此操作,然后并行执行这 3 个任务,然后执行此操作,具有优先级、依赖性......)

Airflow 使用 DAG。能力可以说是相当先进了。如果您确实需要的话,您还可以使用 XCOM 进行参数共享

监控和管理 UI(或至少 API)

有一个,显示任务和时间表,并有甘特图视图。还可以轻松查看日志和运行详细信息,还可以直接从 UI 手动安排任务

还可以看看 oozie 和 azkaban

这有帮助吗?