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

时间:2016-12-20 11:00:17

标签: google-cloud-dataflow

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

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

1 个答案:

答案 0 :(得分:3)

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

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

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