Práticas recomendadas para assinar um tópico do Pub/Sub

Ao realizar uma assinatura, o cliente assinante recebe mensagens de um tópico do Pub/Sub. Confira algumas práticas recomendadas para assinaturas do Pub/Sub.

Este documento pressupõe que você já esteja familiarizado com o processo de assinatura de um tópico do Pub/Sub e de recebimento de mensagens no cliente assinante.

Se você não conhece o Pub/Sub, consulte um dos guias de início rápido e aprenda a executar o Pub/Sub usando o console, Google Cloud CLI ou as bibliotecas de cliente.

Escolher a assinatura certa

O Pub/Sub oferece assinaturas padrão, como push e pull. Além das assinaturas padrão, o Pub/Sub também oferece assinaturas de exportação que permitem armazenar mensagens diretamente em um Google Cloud recurso, sem exigir o Dataflow como intermediário. Por exemplo, as assinaturas do BigQuery armazenam mensagens em uma tabela do BigQuery.

As assinaturas push são recomendadas para os seguintes cenários:

  • Não é possível incluir nenhum código no aplicativo assinante que importe a biblioteca de cliente como uma dependência.

  • O cliente assinante não pode fazer solicitações de saída.

  • Você quer usar a mesma instância para processar mensagens de diferentes tópicos e assinaturas em que o cliente assinante não conhece a lista de assinaturas.

Para casos gerais, recomendamos o uso da biblioteca de cliente de alto nível. Se você estiver usando o pull unário, não defina returnImmediately como true. Definir como true afeta negativamente a performance do pull. O campo returnImmediately foi descontinuado.

Processar mensagens antes de confirmá-las

Por padrão, o Pub/Sub descarta uma mensagem de uma assinatura depois que ela é confirmada. Se você não processar uma mensagem antes de enviar uma confirmação e o processamento falhar, o serviço não vai reenviar a mensagem. A exceção é quando você configurou a retenção de mensagens confirmadas ou a retenção de tópicos e realiza uma operação de busca.

Se você tiver assinantes de alta latência, talvez seja necessário definir valores personalizados para o controle de fluxo e o gerenciamento de concessão.

Configurar o controle de fluxo do assinante para picos de tráfego temporários

O controle de fluxo no lado do assinante permite evitar que os assinantes sejam sobrecarregados por picos de tráfego. Ele pode permitir que os mecanismos de escalonamento automático respondam a uma carga aumentada ou podem distribuir o processamento da carga por um período maior. O primeiro método economiza latência, enquanto o segundo economiza custos.

Para configurar o controle de fluxo, defina valores adequados para maximum outstanding messages e total outstanding message bytes. Os valores padrão dessas variáveis de controle de fluxo e os nomes das variáveis podem variar entre as bibliotecas de cliente.

  • Maximum outstanding messages define o número máximo de mensagens entregues ao cliente para as quais o Pub/Sub não recebeu confirmações ou confirmações negativas.

  • Total outstanding message bytes define o tamanho total máximo de mensagens entregues ao cliente para as quais o Pub/Sub não recebeu confirmações ou confirmações negativas.

Se o limite de uma dessas opções for excedido, o cliente assinante não vai extrair mais mensagens. Esse comportamento continua até que as mensagens já extraídas sejam confirmadas ou confirmadas negativamente. Dessa forma, é possível trocar a capacidade de processamento pelo custo associado à execução de mais assinantes.

Processar entregas duplicadas

Por padrão, o Pub/Sub oferece a entrega de mensagens pelo menos uma vez aos assinantes. Isso significa que as mensagens podem ser entregues várias vezes, mesmo que tenham sido confirmadas. As seções a seguir discutem como resolver cenários comuns de reentrega.

Reentrega consistente de muitas mensagens

Se você estiver enfrentando casos em que muitas mensagens são sempre reentregues, seus assinantes estão sobrecarregados ou não estão confirmando as mensagens antes do vencimento do prazo.

Se você estiver usando uma assinatura por pull, talvez seja necessário definir valores personalizados para o controle de fluxo ou aumentar os períodos de extensão de concessão usando o gerenciamento de concessão.

Se você estiver usando assinaturas push, talvez seja necessário aumentar a configuração do prazo de confirmação. Você também pode seguir as práticas recomendadas sobre como manter uma assinatura saudável.

Reentrega ocasional de mensagens

Quando você vê mensagens sendo reentregues antes do prazo de confirmação ou depois que as mensagens foram confirmadas em alguns segundos, o Pub/Sub está se comportando conforme o esperado. Esses picos de reentrega não devem ocorrer com frequência, mas, quando ocorrem, é provável que aconteçam em várias mensagens simultaneamente. Seu sistema precisa ser criado para tolerar essas duplicatas ocasionais.

Reentrega repetida de algumas mensagens

Quando você vê um pequeno número de mensagens sendo entregues várias vezes, primeiro confirme se você está confirmando elas. Se não estiver, descubra por que o assinante não está processando as mensagens corretamente. Talvez seja necessário configurar um tópico de mensagens inativas para evitar mais reentregas. Se você estiver confirmando a mensagem, o Pub/Sub ainda poderá estar operando conforme o esperado. Embora muito raro, ainda é possível que um pequeno número de mensagens seja entregue várias vezes se houver interrupções internas de rede ou hardware. O serviço tenta se recuperar nesses casos, mas pode levar vários minutos para que os remédios sejam ativados.

Seu sistema precisa ser tolerante a reentregas. Você pode reduzir a probabilidade delas garantindo que as mensagens sejam processadas e confirmadas o mais rápido possível.

Se o aplicativo não tolerar duplicatas, ative a entrega exatamente uma vez. Lembre-se de que esse recurso só está disponível para assinaturas pull e também resulta em maior latência de publicação para assinatura. Avalie se a troca de maior latência é aceitável para seu caso de uso antes de ativar esse recurso.

Práticas recomendadas para mensagens ordenadas na assinatura

Se você usar a ordenação de mensagens, verifique o seguinte:

  • Escolha assinaturas StreamingPull ou Pull. Para uma assinatura push, o Pub/Sub oferece suporte apenas a uma mensagem pendente para cada chave de ordenação por vez. O envio de solicitações push paralelas em um cenário como esse seria semelhante ao envio de vários lotes de mensagens para a mesma chave de ordenação para extrair assinantes simultaneamente. Portanto, as assinaturas push não são recomendadas para tópicos em que várias mensagens são publicadas com frequência com a mesma chave de ordenação ou em que a latência é extremamente importante.

  • Ative a ordenação de mensagens na assinatura. No lado do editor, se você enviar mensagens com uma chave de ordenação e na mesma região, poderá configurar os assinantes para receber essas mensagens em ordem. No lado do assinante, ative a propriedade de ordenação de mensagens apenas para as assinaturas em que você quer receber mensagens ordenadas. Dependendo do status da propriedade, cada assinatura anexada ao tópico pode determinar se precisa de entrega ordenada sem afetar umas às outras.

  • Confirme as mensagens em ordem. Ao usar a entrega ordenada, as confirmações de mensagens posteriores não são processadas até que as confirmações de mensagens anteriores sejam processadas por chave de ordenação. Por exemplo, se você tiver mensagens 1, 2 e 3 com a mesma chave de ordenação e receber todas elas e confirmar apenas a mensagem 3, o serviço não vai considerar a mensagem 3 como confirmada até que as mensagens 1 e 2 também sejam confirmadas. Se as confirmações das mensagens 1 e 2 nunca forem recebidas, as mensagens 1, 2 e 3 serão reentregues.

Resumo das práticas recomendadas

A tabela a seguir resume as práticas recomendadas neste documento:

Tópico Tarefa
Escolher um tipo de assinatura Escolha o tipo de assinatura certo para suas necessidades de negócios. Se a assinatura for compatível, use também a biblioteca de cliente de alto nível.
Repetir uma mensagem confirmada Processe uma mensagem antes de confirmá-la. Ou configure uma operação de busca para não perder mensagens confirmadas.
Controle de fluxo Configure o controle de fluxo nas configurações do assinante para garantir que os assinantes não fiquem sobrecarregados até que o escalonamento automático seja ativado ou o tempo passe.
Como ordenar mensagens Ao usar mensagens ordenadas, escolha StreamingPull ou Pull, ative a ordenação de mensagens na assinatura e confirme as mensagens em ordem.

A seguir