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

Significance of creating single pipeline having multiple input sources over multiple pipelines each having separate input sources defined?

我正在开发一个项目,该项目通过 pubsub 接收来自多个客户端的请求,数据流管道将以流模式处理以给出响应。每个流程都有一些共同的逻辑,也有read/writes from/to BigTable/BigQuery.

使用单个管道接收来自不同客户端的输入的优点和缺点是什么(开发和维护方面)?

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

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

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