编排引擎和框架?

2022-09-04 03:07:05

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

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

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

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

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

在这一点上,我也不是在寻找云和容器服务 - 据我所知,部署是一个不同的问题。

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

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

编辑:我意识到这是一种“需要研究建议”,所以让我们简单地把它放在3个问题中:

  1. 我为上述要求寻找编排解决方案是否正确?
  2. 有没有人有Netflix指挥的经验?对此有任何反馈吗?
  3. 它有好的竞争对手吗?

答案 1

也许您正在寻找类似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或芹菜节点缩放 - 气流+芹菜或dask。为了什么,什么时候?

持久性和弹性

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

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

气流使用DAG。这些功能可以称为相当高级的功能。如果您确实需要,您还可以使用XOM进行参数共享

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

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

也看看oozie和azkaban

这有帮助吗?


答案 2

Netflix Conductor的主要竞争对手是Temporal Workflow。通过使用代码而不是 JSON DSL 来实现业务流程逻辑,它可以更好地扩展,并且对开发人员更友好。

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

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


推荐