微服务编排选择

Microservices orchestration choices

我正在探索通过某些基础设施跨多个服务编排流程的可能解决方案。搜索显示了一些选项,例如 Conductor、Camunda、Airflow 等

我想知道什么更适合我的用例

  1. 我的一个服务在Java,另一个在Python
  2. 我需要将信息传递给 Java 服务,然后获取输出并将其传递给 Python 服务
  3. 然后将最终输出发布到另一个队列

感觉 Conductor 是个不错的选择,但很想听听您的意见!

所有选项都可以满足所述要求。考虑进一步/未来的要求。它只是一个数据管道吗?是关于编排更大的端到端业务流程吗?您需要支持 long-运行 进程吗?图形形式的端到端透明度有好处吗? BPMN2 标准中的图形流程建模会带来好处吗?是否会有审计或报告要求?或者它会是一个简单的、孤立的、技术性的解决方案?

本文对市场上的工具及其主要用例进行了很好的概述:https://blog.bernd-ruecker.com/understanding-the-process-automation-landscape-9406fe019d93

所有列出的工具在技术上可能能够执行您的工作流程(我没有使用 Conductor 和 Camunda 的经验)。通常做出决定的一些特征是:

  • 开源与闭源
  • 您如何定义工作流程? (例如 Airflow 中的 Python 代码。其他人使用例如 JSON/XML/something 自定义)
  • 它是否带有 UI?
  • 如果我的工作负载开始增加,它能否横向扩展?
  • 它对任何技术都是不可知的还是仅限于 运行 某些技术? (例如,Oozie 是为在 Hadoop 上调度作业而构建的)
  • 其他要求可能是,例如安全、日志记录、监控等

网上有很多编排工具比较,例如1 or 2.

容器编排简介

跨不同集群自动管理基于容器的微服务应用程序的做法称为容器编排。在公司内部,这个概念越来越受欢迎。此外,各种容器编排技术也成为微服务应用部署不可或缺的一部分。

现代的软件开发不再是单一的。相反,它会生成 运行 跨多个容器的基于组件的应用程序。这些适应性强且可扩展的容器协同工作以完成指定的目的或微服务。 根据应用程序的复杂性和负载平衡等其他要求,它们可能跨越许多集群。

容器封装了应用程序代码及其依赖项。为了高效运行,它们从物理或虚拟主机接收所需的资源。当复杂的系统构建为容器时,将它们集群部署需要足够的管理和优先级。

如何选择容器编排工具?

我们研究了多种编排工具,您在选择最适合您的业务时可能会检查这些工具。为此,请确保了解贵公司的要求和运营。然后,您将能够更轻松地权衡每个选项的优缺点。

Kubernetes

Kubernetes 有很多功能,非常适合企业级的容器和集群管理。 Kubernetes 由许多平台管理,包括 Google、AWS、Azure、Pivo​​tal 和 Docker。随着容器化工作负载的增长,您有很多选择。

最大的缺点是它不适用于 Docker Swarm 和 Compose CLI 清单。它也可能难以理解和设置。尽管存在这些缺陷,它仍然是集群部署和管理中最常用的系统之一。

Docker群

对于已经熟悉 Docker Compose 的个人,Docker Swarm 是更好的选择。它易于使用,不需要任何额外的软件。然而,与 Kubernetes 和 Amazon ECS 不同的是,Docker Swarm 缺乏复杂的功能,例如内置日志记录和监控。因此,它更适合刚开始使用容器的小型企业。

亚马逊云服务器

如果您已经熟悉 Amazon Web Services,Amazon ECS 是安装和配置集群的好方法。这是一种快速简便的入门方法,并且可以根据需求进行扩展。它还与许多其他 AWS 服务相连。它也非常适合容器维护资源有限的小型团队。

它的一个缺点是它与非标准部署不兼容。它还包含特定于 ECS 的配置文件,这使调试变得复杂。