是否向Google Cloud Pub-Sub发送Avro消息?

时间:2018-08-01 01:06:08

标签: google-cloud-platform google-cloud-messaging publish-subscribe google-cloud-pubsub

什么是发布到Pub-Sub和从Pub-Sub消费的最佳数据格式?我正在查看Avro消息格式,因为它是二进制格式。 用例是会有实时微服务应用程序将Avro消息发布到pub-sub。鉴于avro消息最适合在批处理消息(以及与二进制消息一起附加的架构)然后发布消息时使用,是否更适合此涉及微服务的用例格式?

2 个答案:

答案 0 :(得分:1)

Google Cloud文档包含一些JSON示例,但是在寻求效率时,主要建议是使用available client libraries,除非您的需求不能满足客户端库所能提供的要求,或者您正在{{3 }},在这种情况下,建议使用两个API。

事实上,提高效率的最重要因素是使用gRPC API而不是REST API(默认情况下,库调用会使用REST API)。如Google App Engine standard environment所述:

  

有两个主要因素在起作用:更有效的数据编码   和HTTP / 2。 gRPC将数据以二进制形式保存在客户端内存和   通过在HTTP / 2和协议缓冲区上构建数据线。这消除了   字符串编码方案所需的处理和空间,例如   Base64或JSON。此外,HTTP / 2本身可以使处理速度更快   单个连接上的多路复用请求和报头压缩。

我在任何地方都没有找到明确提及的数据格式。我建议您为消息使用首选语言,例如Python。 hereClient library description here

基于sample code here,您可以通过以下方式有效地优化PubSub系统:

  
      
  1. 确保您正在使用gRPC
  2.   
  3. 尽可能进行分批处理,以减少通话次数并消除延迟。
  4.   
  5. 仅在需要时和基准测试之后压缩(这意味着应用程序中需要额外的逻辑)
  6.   

最后,如果您打算部署功能强大的PubSub系统,请查看this StackOverflow post。她现在是Google的项目经理,并建议和阐述以下三个技巧:

  
      
  1. 不要低估容量规划的重要性。
  2.   
  3. 确保您的发布/订阅系统是容错的。
  4.   
  5. NSM:永不停止监视。
  6.   

答案 1 :(得分:1)

对于在所有用例中用于消息的最佳格式,将没有一个正确的答案。 Avro当然是一个受欢迎的选择。 Protocol buffersThrift也是另一种可能性。对于发布/订阅,数据全都是字节,并且由发布者和订阅者确定此数据的解释。人们在不同的数据格式上运行comparisons,因此您可能需要根据性能和消息大小方面的需求做出决定。

Pub / Sub本身对defining its data types使用协议缓冲区。关于批处理,Cloud Pub/Sub client libraries会自行进行批处理以进行发布,因此您不必自己担心。您可以通过使用例如Java的Publisher.Builder中的setBatchSettings来控制批处理设置,以根据用例优化吞吐量和延迟(其他语言也具有等效功能)。如果要将某些元数据与一组消息而不是与每条单独的消息相关联,或者在如何将消息一起批处理方面有非常特定的需求,则可以决定自己进行批处理。否则,取决于客户端库来进行批处理可能是正确的决定。