2

我开始使用 Spring Dataflow,发现自己遇到了一些我无法回答的问题,阅读了文档并进行了一些测试。欢迎任何澄清(如果您不能一次回答所有问题,请回答您可以回答的问题,如果需要,我会合并完整的答案)

  1. Spring Dataflow 旨在编写应用程序工作流,例如: 的输出app A是 的输入app B,等等。工作流程不需要是线性的,因为 的输出app A可能是 和 的app B输入app C那准确吗?

  2. 流水线中的应用程序以“消息驱动”的方式进行通信,这一点写得很好。App A将消息发送到代理(例如 RabbitMQ 或 Kafka),并app B从中使用消息。我们的流程中可以有多个不同的经纪人。但是消息传递是在应用程序之间发送信息的唯一方式吗?例如,是否可以通过 HTTP REST 请求进行app A调用?app B如果是这样,如何?

  3. 由于应用程序依赖于异步消息传递(参见上面的问题),Dataflow 的附加值是什么?我的意思是,如果您配置app A为向foo主题发送消息,并app B使用来自同一主题的消息,您可以分别部署两者(没有数据流),它会工作。据我了解,Dataflow 只提供了一种一次性部署和取消部署它们的方法,而不是一个接一个。那是对的吗 ?

  4. 与上一个问题一样,异步消息传递将您从定义流顺序中抽象出来(即您可以app B在之前开始app A)。整个系统只有在两个应用程序都启动时才能工作,但它们甚至不需要相互了解。唯一需要的是他们使用相同的代理和主题,一个发送消息,另一个获取消息。那么,为什么您绝对需要在 Spring Cloud Dataflow 中将一个应用程序的输出链接到另一个应用程序的输入?这是一种强制两个应用程序使用相同主题的方法,但仅此而已吗?

4

2 回答 2

6

Spring Dataflow 旨在编写应用程序工作流

Spring Cloud Data Flow (SCDF) 是一种编排服务,允许您将微服务应用程序组合成一个连贯的管道。接受的应用程序(今天)基于 Spring Cloud Stream (SCSt) 或 Spring Cloud Task (SCT) 编程模型,因此您可以分别编排流和任务/批处理管道。根据要求,您可以操作线性或复杂的 DAG 类型的工作流。

但是消息传递是在应用程序之间发送信息的唯一方式吗?

现在,是的。SCSt 提供的当前绑定器抽象支持消息传递通道,我们正在推广绑定模型。下一代正在演变为添加对KStream作为输入/输出以及 Reactor 的Flux作为输入/输出的支持。我们还不支持 RESTful 绑定机制。

由于应用程序依赖于异步消息传递(参见上面的问题),Dataflow 的附加值是什么?

您可以编排单个 SCSt/SCT 应用程序。独立应用程序包括诸如“绑定器连接信息”、“通道绑定目标”等属性 - 您需要提供它们。一旦您有了分区和扩展等要求,您就必须保留更多这些应用程序属性。这就是 SCDF 的编排层增加价值的地方。除了可用于更快创建流/批处理管道的 DSL、REST-API、Dashboard/Flo 之外,SCDF 还可以自动创建那些已知属性,以使用明确定义的命名约定连接应用程序。

Dataflow 仅提供一种一次性部署和取消部署它们的方法,而不是一个一个地部署。那是对的吗 ?

如果您使用一组应用程序部署流,SCDF 会按顺序部署它们。您可以取消部署、销毁和查询由应用程序组成的流的聚合状态。而且,对于任务,您可以启动、销毁和查询执行状态等。

为什么在 Spring Cloud Dataflow 中绝对需要将一个应用程序的输出链接到另一个应用程序的输入?

这还不清楚。对于流处理,您需要在 SCDF 的上下文中至少有 2 个应用程序(源和接收器)。但是,您可以使用 SCSt 构建聚合应用程序,并将聚合(源、处理器和接收器)编排单个单元。

于 2016-12-08T20:41:34.060 回答
0

值得一提的是,新的 SCDF 执行模型和整体架构限制了我们大多数人所属的一些用例(至少是我们操作的电信环境)。换句话说,在容器引擎之上运行的 SCDF 是不久的将来——某个地方。我们在生产中使用 SpringXD,它与 Zookeeper(分布式)一起工作就像一个魅力。现在,有了 SCDF 的概念,我必须想到别的东西,尽管我已经设法在 Kubernetes 集群(在我的实验室)上安装和运行了 SCDF。

于 2017-01-05T09:08:10.987 回答