在多个管道上创建具有多个输入源的单个管道的意义,每个管道都定义了单独的输入源?

Posted

技术标签:

【中文标题】在多个管道上创建具有多个输入源的单个管道的意义,每个管道都定义了单独的输入源?【英文标题】:Significance of creating single pipeline having multiple input sources over multiple pipelines each having separate input sources defined? 【发布时间】:2016-12-20 11:00:17 【问题描述】:

我正在开发一个项目,该项目通过 pubsub 接收来自多个客户端的请求,数据流管道将以流模式处理以发出响应。每个流都有一些共同的逻辑,并且还具有对 BigTable/BigQuery 的读/写。

使用单个管道通过单独的管道接收来自不同客户端的输入的每个输入有哪些优点和缺点(开发和维护方面)?

【问题讨论】:

【参考方案1】:

在开发方面,它们具有大致相同的复杂性:您可能仍将通用代码编写在一个地方,或者甚至整个管道代码都相同,但您为不同的客户端使用不同的参数启动它.

在维护方面,这两种方法各有利弊。

一条管道可能更便宜。例如。如果总体流量非常低并且处理所有客户端可以容纳在 1 台机器上,那么它实际上会发生在 1 台机器上 - 但是如果你做单独的管道,每个管道不能使用少于 1 台机器,所以你会一直使用至少 N。 一个管道可能更易于在 UI 中观察和监控,并且更易于部署。但是,这取决于管道的结构:您是否要通过相同的转换来传输所有客户端的数据,或者说,每个客户端有 1 个读取转换(例如,如果每个客户端都从不同的 PubSub 主题和写入不同的 BigQuery 表)?如果都是相同的转换,那么您将获得启动管道一次的好处,并且在添加或删除客户端时根本不需要做任何事情(否则,您需要update 管道)。 使用多个管道(每个客户端一个),可以更轻松地隔离不同客户端的问题。例如。您可以一一停止处理单个客户端,或者一一更新它们(例如,如果您正在测试一些实验性代码并且不想在错误的情况下同时破坏所有客户端)。管道中的错误不太可能导致一个客户端的数据与另一个客户端的数据混淆。

【讨论】:

以上是关于在多个管道上创建具有多个输入源的单个管道的意义,每个管道都定义了单独的输入源?的主要内容,如果未能解决你的问题,请参考以下文章

具有多个要求用户输入的程序的 linux 管道

shell第四篇(上)

Vulkan:一个管道和多个描述符集?

我们能否从单个devops存储库为多个Web应用程序创建多个部署

如何在单个 git repo 中拥有多个 lambda 函数并为其创建 CI/CD 管道

如何在具有多个数据帧列输入的 sklearn 管道中编写转换器