编排引擎和框架?
Posted
技术标签:
【中文标题】编排引擎和框架?【英文标题】:Orchestration engines and frameworks? 【发布时间】:2018-10-03 12:26:29 【问题描述】:我正在寻找一个编排框架/引擎/工具包来替换/升级现有软件,主要是因为可扩展性限制。我所说的编排是指通用任务和工作流的异步和分布式执行。
更具体地说,要求几乎是这些:
通用任务的包装和执行,如果依赖于语言,则使用 Java 用于按需触发任务和工作流的 API 调度也不错 支持分布式架构和可扩展性(主要用于大量小任务) 持久性和弹性 高级工作流配置功能(执行this,然后并行执行这 3 个任务,然后执行 this,具有优先级、依赖关系...) 监控和管理 UI(或至少 API)现有系统是一种老式的单体服务(在 Java 中),其中包含大部分内容,包括执行逻辑本身,应该尽可能保持原样。
有没有人遇到过类似的问题?在我看来,它应该很常见,如果我必须完全自己实现它会很奇怪。我在这里发现了一些问题(如this 和this)讨论编排和编排系统的理论,但没有实现它的工具的真实示例。此外,我认为我们并不是在谈论微服务——这些任务并不冗长和繁重,它们只是很多,在后台运行,执行多种类型的短作业。我不会为每种工作类型创建服务。
我现在也不在寻找云和容器服务 - 据我了解,部署是一个不同的问题。
我得到的最接近的是Netflix Conductor engine,它通过运行一个编排服务器来管理大部分需求,该服务器管理在 servlet(或任何语言的任何 Web 服务 - 一个加号)中实现的任务。然而,它似乎主要是为在工作流中安排繁重的任务而不是运行大量的小任务而构建的,这让我想知道在 servlet 中调用许多小任务的开销是多少。
是否有人对我可以使用的 Conductor 或其他工具有经验或有任何意见?甚至是我解决问题的全部方法?
编辑:我意识到这是一种“需要研究建议”,所以让我们简单地把它放在 3 个问题中:
-
我是否适合为上述要求寻找编排解决方案?
有人有使用过 Netflix 指挥 的经验吗?有什么反馈吗?
它有好的竞争对手吗?
【问题讨论】:
你看过 Apache Camel 吗?它是 EIP 的事实上的实现,它可以完成您列表中的所有事情等等? 【参考方案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 或 celery 节点进行扩展 - Airflow + celery or dask. For what, when?
持久性和弹性
使用 postgres db 和 rabbitMQ - 如果您的部署架构是无状态的(例如,可重复的容器和带有 docker 的卷),您应该使用 WAL 复制处于良好状态 如果您使用 Kubernetes 或 Consul,还有其他方法可以在其他组件上实现更高的弹性
高级工作流配置功能(先执行此操作,然后并行执行这 3 个任务,然后执行此操作,具有优先级、依赖关系...)
Airflow 使用 DAG。这些功能可以称为相当先进。如果您确实需要,您还可以使用 XCOM 进行参数共享
监控和管理 UI(或至少 API)
有一个,显示任务和时间表,并具有甘特图。还可以轻松查看日志和运行详细信息,还可以直接从 UI 手动安排任务
也看看 oozie 和 azkaban
这有帮助吗?
【讨论】:
【参考方案2】:Netflix Conductor 的主要竞争对手是Temporal Workflow。通过使用代码而不是 JSON DSL 来实现编排逻辑,它可以更好地扩展并且对开发人员更友好。
通过实施允许将多个小任务批处理到单个数据库更新中的特定优化(本地活动),它还可以很好地处理细粒度任务。
在 Uber、Coinbase、HashiCorp、Dagadog、Stripe 和数百家其他公司中,Temporal 已在生产中强化了五年多。
【讨论】:
仅供参考,给出的答案来自 Temporal 的创建者,并不是说这个事实降低了它的价值。我看到 Temporal 的唯一问题是有限的 SDK 支持,尤其是在 .NET 生态系统中(例如 C# 语言)。在这种情况下,我会选择指挥。【参考方案3】:您可以看看 unify-flowret,这是我在美国运通开发新平台时创建的一个轻量级 Java 编排引擎。如果您认为 Netflix Conductor 似乎非常适合您的问题,那么您绝对应该看看 unify-flowret,因为 Netflix Conductor 是我们在构建 unify-flowret 之前评估过的选项之一。
Unify-flowret 提供核心编排功能,并依赖应用程序来提供其他一切。您可以使用步骤和路线在一个非常简单的 JSON 文件中定义工作流。然后,在想要使用小花的应用程序中,您创建某些实现,例如将状态持久化到数据库的实现(这样可以使用任何数据存储)。或者将一个对象返回给Flowret的实现,Flowret将在该对象上调用step函数。这样,为了简单起见,大部分需求都被推迟到应用程序中,而不是在编排引擎中实现所有类型的需求。
Unify-flowret 以嵌入式模式运行,因此可以水平扩展。它从中断的地方继续。它在遇到碰撞时具有弹性,并且会从最后记录的位置恢复。它通过工作流 JSON 中的定义提供真正的技术并行处理。它提供了一个 SLA 框架,通知应用程序未来要设置的里程碑。它以工作篮的形式提供工作管理功能。还有许多其他功能!
我们在美国运通内使用它来满足非常复杂的编排需求方面取得了巨大成功。
您可以在 https://github.com/americanexpress/unify-flowret 上查看 unify-flowret。
【讨论】:
以上是关于编排引擎和框架?的主要内容,如果未能解决你的问题,请参考以下文章
JVS开源框架系列:逻辑引擎帮助说明「含软开企服的开源地址」