Como restringir locais de recursos do Pub/Sub

Se você publicar mensagens no endpoint global do Pub/Sub, o Pub/Sub armazenará automaticamente as mensagens na região do Google Cloud mais próxima. O Pub/Sub entrega as mensagens aos inscritos em todo o mundo, independentemente de onde as mensagens são armazenadas.

Em alguns casos, você pode precisar de um controle mais preciso de onde suas mensagens são armazenadas. A política de armazenamento de mensagens de tópico do Pub/Sub oferece uma maneira de garantir que todos os dados publicados em um tópico permaneçam em uma região específica ou um conjunto de regiões, independentemente da origem da solicitação de publicação. Quando várias regiões são permitidas pela política, o Pub/Sub seleciona a região permitida mais próxima.

Se você publicar uma mensagem com uma chave de ordem e a política de armazenamento de mensagens excluir a região mais próxima, o serviço Pub/Sub retornará um erro.

A política de armazenamento de mensagens de um tópico pode ser configurada das seguintes maneiras:

  • Para configurar todos os tópicos no escopo de toda uma organização, você pode usar a política de organização Restrição de localização de recursos. As políticas para toda a organização são mantidas na seção Políticas da organização do console "IAM e Admin".

  • Para ter um controle preciso, configure uma política de armazenamento de mensagens de um tópico ao criá-lo ou por meio da operação UpdateTopic.

Política de armazenamento de mensagens em novos tópicos

  • Se você não especificar uma política de armazenamento de mensagens ao criar um tópico, essa política será determinada automaticamente com base na política da organização Restrição de localização de recursos em vigor. Quando nenhuma política da organização está em vigor, a política de armazenamento de mensagens permite todas as regiões.

  • Se você especificar uma política de armazenamento de mensagens ao criar um tópico, essa política poderá conter apenas as regiões permitidas pela política da organização Restrição de localização de recursos em vigor. Quando nenhuma política da organização estiver em vigor, a política de armazenamento de mensagens poderá conter qualquer região.

Atualizações da política de armazenamento de mensagens sobre tópicos e mensagens existentes

  • Quando uma política da organização é atualizada, as alterações não se propagam automaticamente para tópicos existentes. Desse modo, a política de armazenamento de mensagens de um tópico existente pode ficar fora de sincronia com a política da organização mais recente. Veja abaixo mais informações sobre como resolver essas diferenças, caso elas ocorram.

  • Quando a política de armazenamento de mensagens de um tópico é atualizada, as alterações não se propagam automaticamente para mensagens já publicadas. As mensagens já armazenadas com base em uma política antiga não são movidas para ficarem consistentes com a nova política. Em vez disso, as alterações se aplicam somente às mensagens publicadas após a atualização.

Como configurar políticas de armazenamento de mensagens

Para configurar a política de armazenamento de mensagens, sincronize-a com a política da organização ou especifique-a explicitamente para um tópico. Configure a política usando:

Como usar a ferramenta gcloud para atualizar ou definir políticas de armazenamento de mensagens de tópico

Atualize a política atual sobre um tópico com a política da organização atual:

gcloud pubsub topics update TOPIC --recompute-message-storage-policy

Defina uma política de armazenamento de mensagens explícita em um tópico, como uma lista de regiões permitidas do Google Cloud:

gcloud pubsub topics update TOPIC --message-storage-policy-allowed-regions=us-central1,us-east1

Essa operação garante que as mensagens publicadas posteriormente no tópico sejam armazenadas em us-central1 ou us-east1.

Como visualizar e resolver as diferenças entre as políticas da organização e de tópico

O Console do Cloud mostra as diferenças entre a política da organização e as políticas de armazenamento de mensagens individuais. Também é possível sincronizar a política de armazenamento de mensagens de um tópico com a política da organização no Console do Cloud. Não é possível especificar políticas de armazenamento de mensagens em nível de tópico no Console do Cloud.

Para ver quais tópicos não estão sincronizados com a política da organização, acesse o console e abra a guia Política de armazenamento no painel de informações à direita.

Também é possível examinar a política atual usando a linha de comando.

gcloud pubsub topics describe TOPIC

Como atualizar vários tópicos

Para atualizar um ou mais tópicos:

  1. Acesse a guia Política de armazenamento no console.
  2. Selecione um ou mais tópicos.
  3. Clique em Atualizar.

Exceções

A política especifica uma lista de nomes de regiões permitidas do Google Cloud. Dessa maneira, os seguintes itens não são compatíveis:

  • Listas de exclusão
  • Zonas ou locais multirregionais

Monitoramento e solução de problemas

Para ajudar você a entender onde os dados de mensagens são armazenados, oferecemos métricas do Pub/Sub divididas por região do Google Cloud:

Contagens de mensagens armazenadas não confirmadas:

subscription/num_unacked_messages_by_region

Volume de dados armazenados:

subscription/unacked_bytes_by_region

Idade da mensagem mais antiga:

subscription/oldest_unacked_message_age_by_region

Métricas análogas estão disponíveis para tópicos e snapshots. Além disso, as métricas correspondentes estão disponíveis para mensagens confirmadas que são retidas opcionalmente para repetição. Exemplo:

subscription/num_retained_acked_messages_by_region

Você pode usar essas métricas para:

  • entender como seus dados são distribuídos em todo o mundo;
  • otimizar o local de implantação de editores e assinantes com base nesses dados.

Consequências de desempenho e disponibilidade

A política de armazenamento de mensagens não afeta o SLA geral, mas introduz uma compensação entre disponibilidade e controle quando editores ou assinantes são executados fora do Google Cloud ou em regiões não permitidas pela política. Os usuários que executam clientes editores dentro do conjunto de regiões permitido pela política de armazenamento de mensagens não perceberão alterações na latência ou na disponibilidade do serviço.

Para entender essas compensações, vale a pena considerar como as solicitações de publicação são encaminhadas. Geralmente, o Pub/Sub tenta armazenar as mensagens o mais próximo possível da origem da solicitação. As solicitações originadas no Google Cloud são, em regra, vinculadas às instâncias do Pub/Sub na mesma região. Se um editor estiver localizado em uma única região, simplesmente adicionar mais regiões à política de armazenamento de mensagens não aumentará a disponibilidade. Ao publicar de fora do GCP, uma camada adicional de roteamento é envolvida para levar a solicitação a uma região do GCP próxima de onde o serviço Pub/Sub está disponível.

Considere uma política de armazenamento de mensagens que permita somente a região us-central1.

  1. Um cliente editor em execução em us-east1 emite uma solicitação Publish.
  2. A solicitação é roteada para um servidor Pub/Sub em us-east1.
  3. Em vez de armazenar os dados em us-east1, a solicitação é roteada para a região mais próxima permitida pela política de armazenamento de mensagens, que é us-central1.
  4. O Pub/Sub armazena as mensagens publicadas em us-central1 e as encaminha para os assinantes a partir desse local.

Esse mecanismo tem implicações na latência da solicitação e na disponibilidade geral do sistema. Como a solicitação transfere mais links de rede, a conclusão leva mais tempo e tem uma chance relativamente maior de falha. Isso também significa que os assinantes podem ver a mensagem um pouco mais tarde, porque ela precisa viajar até a região permitida mais próxima antes de ser enviada. Se a política permitir uma única região, mas seus aplicativos editores forem executados em várias regiões, o aplicativo distribuído ficará tão disponível quanto a única região permitida.