编排引擎和框架?

时间:2018-04-23 12:44:11

标签: java frameworks workflow orchestration

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

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

  • 在Java中包含和执行通用任务(如果语言相关)
  • 按需触发任务和工作流程的API
  • 调度也很不错
  • 支持分布式架构&可伸缩性(主要用于大量小任务)
  • 持久性和适应力
  • 高级工作流程配置功能(,然后这3个任务并行,然后,具有优先级,依赖性......)
  • 监控和管理UI(或至少API)

现有系统是一种旧时尚的单片服务(在Java中),其中大部分都是如此,包括执行逻辑本身应该保持尽可能不受影响。

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

此时我还寻找云和容器服务 - 根据我的理解,部署是一个不同的问题。

我得到的最接近的是Netflix Conductor engine,它通过运行一个管理服务器来处理大多数需求,该服务器管理servlet中实现的任务(或任何语言的任何Web服务 - 一个加号)。然而,它似乎主要是为了在工作流中安排繁重的任务而不是运行大量的小任务而构建的,这让我想知道在servlet中调用许多小任务会产生什么样的开销。

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

编辑:我意识到这需要一种"需要的研究建议"所以我们只想简单地提出三个问题:

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

3 个答案:

答案 0 :(得分:0)

也许您正在寻找类似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 or dask. For what, when?

持久性和弹性

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

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

Airflow使用DAG&#39>。这些功能可以称为相当高级的。如果你真的需要,你也可以使用XCOM进行参数共享

监控和管理用户界面(或至少是API)

有一个,显示任务和时间表&有一个甘特的观点。也可以看到日志&轻松运行细节&还可以直接从UI手动安排任务

另见oozie&阿兹卡班

帮了吗?

答案 1 :(得分:0)

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

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

Cadence在Uber和外部进行了超过两年的生产测试。

答案 2 :(得分:0)

您可以看一下unify-flowret,这是我在开发美国运通新平台时创建的轻量级Java编排引擎。如果您认为Netflix Conductor似乎很适合您的问题,那么您绝对应该看一下unify-flowret,因为Netflix Conductor是我们在构建unify-flowret之前评估过的选项之一。

Unify-flowret提供核心编排功能,并依赖于应用程序提供其他所有功能。您可以使用步骤和路由在非常简单的JSON文件中定义工作流程。然后,在想要使用flowret的应用程序中,您可以创建某些实现,例如用于将状态持久保存到数据库的实现(通过这种方式可以使用任何数据存储)。或将对象返回到flowret的实现,flowret将在该对象上调用step函数。这样,为了使事情简单,而不是在业务流程引擎中实现所有类型的需求,而是将大多数工作交给了应用程序。

Unify-flowret以嵌入式模式运行,因此可以水平扩展。它从中断处恢复。它在遇到碰撞时具有弹性,并将从上次记录的位置恢复。它通过工作流JSON中的定义提供真正的技术并行处理。它提供了一个SLA框架,该框架将通知应用程序将来要建立的里程碑。它以工作篮的形式提供工作管理功能。还有许多其他功能!

我们在美国运通(American Express)中使用它来满足非常复杂的编排要求方面取得了巨大的成功。

您可以在https://github.com/americanexpress/unify-flowret上签出unify-flowret。