Comprima mensagens

Se estiver a usar o Pub/Sub para publicar mensagens que representam uma grande quantidade de dados, pode usar o gRPC para comprimir os dados e poupar custos de rede antes de o cliente publicador enviar o pedido de publicação. A compressão do Pub/Sub para gRPC usa o algoritmo Gzip.

Este documento fornece informações sobre a compressão de mensagens publicadas num tópico.

Acerca da compressão de mensagens

A taxa de compressão para usar a funcionalidade de compressão do lado do cliente gRPC é diferente para diferentes clientes publicadores e depende dos seguintes fatores:

  • Quantidade de dados. A taxa de compressão melhora quando o tamanho da carga útil aumenta de algumas centenas de bytes para muitos kilobytes de dados. As definições de lote de um pedido de publicação determinam a quantidade de dados incluídos em cada pedido de publicação. Recomendamos que ative as definições de lote em conjunto com a compressão gRPC para obter os melhores resultados.

  • Tipo de dados. Os dados baseados em texto, como JSON ou XML, são mais compressíveis em comparação com dados binários, como imagens.

Se o seu cliente publicador estiver em Google Cloud, pode usar a métrica Bytes enviados (instance/network/sent_bytes_count) para medir o débito de publicação em bytes. Se o cliente do publicador estiver numa aplicação diferente, tem de usar as ferramentas específicas do cliente para fazer a medição.

O exemplo de código nesta secção mostra um fragmento de código de biblioteca cliente Java de exemplo que também inclui a compressão gRPC.

Antes de começar

Antes de configurar o fluxo de trabalho de publicação, certifique-se de que concluiu as seguintes tarefas:

Funções necessárias

Para receber as autorizações de que precisa para comprimir mensagens, peça ao seu administrador para lhe conceder a função de IAM Publicador do Pub/Sub (roles/pubsub.publisher) no seu tópico. Para mais informações sobre a atribuição de funções, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.

Também pode conseguir as autorizações necessárias através de funções personalizadas ou outras funções predefinidas.

Precisa de autorizações adicionais para criar ou atualizar tópicos e subscrições.

Comprima uma mensagem

C++

Antes de experimentar este exemplo, siga as instruções de configuração do C++ no artigo Início rápido: usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API C++ do Pub/Sub.

namespace g = ::google::cloud;
namespace pubsub = ::google::cloud::pubsub;
[](std::string project_id, std::string topic_id) {
  auto topic = pubsub::Topic(std::move(project_id), std::move(topic_id));
  auto publisher = pubsub::Publisher(pubsub::MakePublisherConnection(
      std::move(topic),
      g::Options{}
          // Compress any batch of messages over 10 bytes. By default, no
          // messages are compressed, set this to 0 to compress all batches,
          // regardless of their size.
          .set<pubsub::CompressionThresholdOption>(10)
          // Compress using the GZIP algorithm. By default, the library uses
          // GRPC_COMPRESS_DEFLATE.
          .set<pubsub::CompressionAlgorithmOption>(GRPC_COMPRESS_GZIP)));
  auto message_id = publisher.Publish(
      pubsub::MessageBuilder{}.SetData("Hello World!").Build());
  auto done = message_id.then([](g::future<g::StatusOr<std::string>> f) {
    auto id = f.get();
    if (!id) throw std::move(id).status();
    std::cout << "Hello World! published with id=" << *id << "\n";
  });
  // Block until the message is published
  done.get();
}

Java

Antes de experimentar este exemplo, siga as instruções de configuração do Java no artigo Início rápido: usar bibliotecas cliente. Para mais informações, consulte a documentação de referência da API Java do Pub/Sub.