Se pubblichi messaggi nell'endpoint Pub/Sub globale, Pub/Sub li archivia automaticamente nella regioneGoogle Cloud più vicina. Se vuoi controllare le regioni in cui vengono archiviati ed elaborati i messaggi, puoi configurare una policy di archiviazione dei messaggi nell'argomento.
Panoramica della policy di archiviazione messaggi
Puoi impostare una policy di archiviazione dei messaggi quando crei un nuovo argomento o quando aggiorni un argomento utilizzando la console, Google Cloud CLI o le API REST.
Il criterio di archiviazione dei messaggi si applica solo ai contenuti dei messaggi. Il criterio non si applica ad altri dati, come nomi di argomenti, etichette o impostazioni di Identity and Access Management (IAM).
Pub/Sub archivia i messaggi quando un client li pubblica su Pub/Sub. Una policy di archiviazione dei messaggi garantisce che Pub/Sub archivi ed elabori i messaggi solo nell'insieme di Google Cloud regioni che specifichi, indipendentemente dalla provenienza delle richieste di pubblicazione o iscrizione. Se la policy consente più regioni per le operazioni di pubblicazione, Pub/Sub archivia il messaggio in una regione consentita più vicina al punto in cui il messaggio pubblicato entra nella rete Google Cloud .
Quando specifichi un criterio di archiviazione dei messaggi, puoi impostare
enforceInTransit su True. Questo flag regola quanto segue:
Le richieste di pubblicazione, pull e streamingPull ricevute in una regione non consentita nei criteri di archiviazione dei messaggi vengono rifiutate con un errore
FAILED_PRECONDITION.Se un client viene eseguito all'interno di Google Cloud una delle regioni consentite, ad esempio in una VM Compute Engine, può utilizzare l'endpoint globale. Le richieste del client vengono instradate localmente nella regione consentita. Il client può anche utilizzare un endpoint basato sulla posizione o un endpoint regionale che ha come target una regione consentita.
Se un client viene eseguito all'interno di Google Cloud in una regione non consentita o all'esterno di Google Cloud, deve utilizzare un endpoint di località o regionale che ha come target una regione nell'elenco delle regioni consentite.
La distribuzione degli abbonamenti push viene gestita solo all'interno delle regioni Cloud consentite. In alcuni casi, questa limitazione può sospendere completamente la consegna dei messaggi per le sottoscrizioni push. Quando una sottoscrizione push entra in questo stato perché le posizioni push sono eccessivamente vincolate da una combinazione di fattori come la posizione di archiviazione dei messaggi, le regioni consentite e la posizione della risorsa di esportazione, questo stato diventa visibile in Stackdriver.
Criteri di archiviazione dei messaggi per i nuovi argomenti
Se non specifichi una policy di archiviazione dei messaggi quando crei un argomento, la policy di archiviazione dei messaggi viene determinata automaticamente in base alla policy dell'organizzazione Restrizione sulla località delle risorse effettiva. Quando non è in vigore alcun criterio dell'organizzazione, il criterio di archiviazione dei messaggi consente tutte le regioni.
Analogamente, in assenza di una policy di archiviazione dei messaggi specificata, il flag
enforceInTransitviene determinato in base al criterio dell'organizzazione Applica le regioni in transito per i messaggi Pub/Sub effettivo. Per saperne di più su questa policy dell'organizzazione, consulta Vincoli delle policy dell'organizzazione.Se specifichi una policy di archiviazione dei messaggi quando crei un argomento, la policy di archiviazione dei messaggi può contenere solo le regioni consentite dai criteri dell'organizzazione Restrizione sulla località delle risorse effettivi. Se non è in vigore alcun criterio dell'organizzazione, il criterio di archiviazione dei messaggi può contenere qualsiasi regione.
Criteri di archiviazione dei messaggi per gli argomenti esistenti
Quando un criterio dell'organizzazione viene aggiornato, le modifiche non vengono propagate automaticamente agli argomenti esistenti. Di conseguenza, il criterio di archiviazione messaggi di un argomento esistente può non essere sincronizzato con il criterio dell'organizzazione più recente. Per maggiori informazioni, consulta Gestire le differenze tra le policy dell'organizzazione e quelle degli argomenti.
Quando il criterio di archiviazione dei messaggi di un argomento viene aggiornato, le modifiche non vengono propagate ai messaggi già pubblicati. I messaggi già memorizzati in base a un criterio precedente non vengono spostati per essere coerenti con il nuovo criterio. Le modifiche si applicano solo ai messaggi pubblicati dopo l'aggiornamento.
Eccezioni
Il criterio specifica un elenco di nomi di regioni Google Cloud consentiti. Pertanto, i seguenti elementi non sono supportati:
- Elenchi di esclusione
- Zone o località multiregionali
Se pubblichi un messaggio con una chiave di ordinamento e la policy di archiviazione dei messaggi esclude la regione più vicina, il servizio Pub/Sub restituisce un errore.
Configurare i criteri di archiviazione dei messaggi
Esistono due modi per configurare le norme di archiviazione dei messaggi per gli argomenti, tra cui:
- Imposta una policy di archiviazione messaggi utilizzando un criterio dell'organizzazione.
- Configura una policy di archiviazione dei messaggi durante la creazione di un argomento.
Impostare un criterio di archiviazione dei messaggi utilizzando un criterio dell'organizzazione
Console
Per configurare un criterio di archiviazione dei messaggi che si applichi a più argomenti, imposta un criterio dell'organizzazione di restrizione sulla località delle risorse.
Vai alla pagina Policy dell'organizzazione nella console Identity and Access Management.
Seleziona il nodo della gerarchia delle risorse (organizzazione, cartella o progetto) per cui vuoi impostare una policy dell'organizzazione.
Nel filtro, inserisci Limitazione della località della risorsa.
Fai clic su Google Cloud - Limitazione della posizione delle risorse.
Fai clic su MODIFICA.
Aggiungi o rimuovi regioni in base alle esigenze.
Tutti i nuovi argomenti che crei ereditano queste impostazioni. Le modifiche non vengono propagate automaticamente agli argomenti esistenti. Per aggiornare gli argomenti esistenti, devi eseguire un'operazione di aggiornamento.
Per saperne di più sulle policy dell'organizzazione, vedi Gestire le risorse Google Cloud .
Configura una policy di archiviazione dei messaggi durante la creazione di un argomento
Console
Quando utilizzi la console Google Cloud , non puoi configurare una policy di archiviazione dei messaggi durante la creazione di un argomento. Invece, tutti i nuovi argomenti ereditano automaticamente i criteri dell'organizzazione relativi alla restrizione sulla località delle risorse.
Tuttavia, dopo aver creato un argomento, puoi modificarne la policy di archiviazione dei messaggi nella console con un'operazione di aggiornamento.
Interfaccia a riga di comando gcloud
Per creare un argomento con una specifica policy di archiviazione dei messaggi, utilizza il
comando
gcloud pubsub topics create
con il flag --message-storage-policy-allowed-regions:
gcloud pubsub topics create TOPIC_ID \ --message-storage-policy-allowed-regions=REGION1,REGION2
Sostituisci quanto segue:
TOPIC_ID: l'ID o il nome del nuovo argomento.REGION1, REGION2: un elenco separato da virgole di regioni Google Cloud supportate.
REST
Per creare un argomento con una policy di archiviazione dei messaggi, utilizza il
metodo projects.topics.create.
La richiesta deve essere autenticata con un token di accesso nell'intestazione Authorization. Per ottenere un token di accesso per le attuali
Credenziali predefinite dell'applicazione: gcloud auth application-default print-access-token.
POST https://pubsub.googleapis.com/v1/projects/PROJECT_ID/topics/TOPIC_ID
Authorization: Bearer $(gcloud auth application-default print-access-token)
Content-Type: application/json --data @response-body.json
Specifica i seguenti campi nel corpo della richiesta:
{
"name": "projects/PROJECT_ID/topics/TOPIC_ID",
"messageStoragePolicy": {
"allowedPersistenceRegions": ["REGION"],
"enforceInTransit": true
}
}
Dove:
PROJECT_ID è l'ID progetto.
TOPIC_ID è l'ID argomento.
REGION è la regione specificata.
Esempio di risposta:
{
"name": "projects/PROJECT_ID/topics/TOPIC_ID",
"messageStoragePolicy": {
"allowedPersistenceRegions": [
"REGION"
],
"enforceInTransit": true
}
}
Per ulteriori informazioni sulla configurazione delle policy di archiviazione dei messaggi, consulta i seguenti riferimenti API.
Aggiornare le policy di archiviazione dei messaggi
Console
Nella console Google Cloud , apri la pagina Dettagli argomento.
Seleziona un argomento da aggiornare.
Puoi selezionare più argomenti.
Nel riquadro delle informazioni, seleziona la scheda Norme di archiviazione.
Questo riquadro potrebbe essere compresso per impostazione predefinita. Se è compresso, fai clic su Mostra riquadro informazioni.
Seleziona o deseleziona tutte le regioni necessarie.
Fai clic su Aggiorna.
Interfaccia a riga di comando gcloud
Per eseguire il push della policy di archiviazione dei messaggi definita nella policy di restrizione sulla località delle risorse della tua organizzazione in un argomento, esegui il seguente comando gcloud pubsub topics update:
gcloud pubsub topics update TOPIC_ID \ --recompute-message-storage-policy
Per aggiornare la policy di archiviazione dei messaggi di un argomento con regioni specifiche, esegui il comando gcloud pubsub topics update con il flag --message-storage-policy-allowed-regions:
gcloud pubsub topics update TOPIC_ID \ --message-storage-policy-allowed-regions=REGION1,REGION2
Sostituisci quanto segue:
TOPIC_ID: l'ID dell'argomento che stai aggiornando.REGION1, REGION2: un elenco separato da virgole di regioni Google Cloud supportate.
REST
Per aggiornare un argomento con una policy di archiviazione dei messaggi, utilizza il metodo
projects.topics.patch.
La richiesta deve essere autenticata con un token di accesso nell'intestazione Authorization. Per ottenere un token di accesso per le attuali
Credenziali predefinite dell'applicazione: gcloud auth application-default print-access-token.
PATCH https://pubsub.googleapis.com/v1/projects/PROJECT_ID/topics/TOPIC_ID
Authorization: Bearer $(gcloud auth application-default print-access-token)
Content-Type: application/json --data @response-body.json
Specifica i seguenti campi nel corpo della richiesta:
{
"name": "projects/PROJECT_ID/topics/TOPIC_ID",
"messageStoragePolicy": {
"allowedPersistenceRegions": ["REGION"], // Replace with your required region
"enforceInTransit": true
}
}
Dove:
PROJECT_ID è l'ID progetto.
TOPIC_ID è l'ID argomento.
REGION è la regione specificata.
Esempio di risposta:
{
"name": "projects/PROJECT_ID/topics/TOPIC_ID",
"messageStoragePolicy": {
"allowedPersistenceRegions": [
"REGION"
],
"enforceInTransit": true
}
}
Per ulteriori informazioni sull'aggiornamento delle norme di archiviazione dei messaggi, consulta i seguenti riferimenti API.
Gestire le differenze tra le policy dell'organizzazione e quelle degli argomenti
Visualizzare le differenze tra le norme dell'organizzazione e quelle dell'argomento
Console
La console Google Cloud mostra eventuali differenze tra le norme dell'organizzazione e le norme di archiviazione dei messaggi dei singoli argomenti.
Per verificare se alcuni argomenti non sono sincronizzati con le policy dell'organizzazione:
Vai alla pagina Dettagli argomento.
Seleziona un argomento.
Nel riquadro delle informazioni, seleziona la scheda Norme di archiviazione.
Questo riquadro potrebbe essere compresso per impostazione predefinita. Se è compresso, fai clic su Mostra riquadro informazioni.
Nel riquadro vengono visualizzate le norme di archiviazione, insieme a eventuali differenze tra le norme dell'organizzazione e quelle degli argomenti.
Interfaccia a riga di comando gcloud
Per esaminare la policy attuale assegnata a un argomento, esegui questo comando:
gcloud pubsub topics describe TOPIC_ID
Sostituisci quanto segue:
TOPIC_ID: l'ID dell'argomento che stai esaminando.
Risolvere le differenze tra le norme dell'organizzazione e quelle degli argomenti
Console
Nella console Google Cloud , apri la pagina Dettagli argomento.
Seleziona un argomento.
Nel riquadro delle informazioni, seleziona la scheda Norme di archiviazione.
Questo riquadro potrebbe essere compresso per impostazione predefinita. Se è compresso, fai clic su Mostra riquadro informazioni.
Nel riquadro vengono visualizzate le norme di archiviazione, insieme a eventuali discrepanze.
Se vengono rilevate discrepanze, il riquadro informativo mostra tre opzioni per sincronizzare il criterio di archiviazione dell'argomento con il criterio della tua organizzazione, tra cui:
Gli argomenti consentono l'archiviazione in località non consentite.
Aggiorna per consentire l'archiviazione solo in località autorizzate dal criterio.
L'argomento non consente l'archiviazione in alcune posizioni consentite.
Aggiorna per consentire l'archiviazione ovunque sia consentito dal criterio.
Gli argomenti sono scaduti in località sia non consentite che consentite.
Aggiorna per consentire l'archiviazione in località autorizzate dal criterio.
Seleziona l'opzione appropriata per risolvere i problemi.
Fai clic su Aggiorna argomento.
Si apre la finestra di dialogo Sincronizza con la policy di archiviazione dell'organizzazione.
Fai clic su Aggiorna argomento.
Monitoraggio e risoluzione dei problemi
Per aiutarti a capire dove vengono archiviati i dati dei messaggi, Pub/Sub offre metriche suddivise per ogni regione Google Cloud .
Puoi utilizzare queste metriche per:
- Scopri come vengono distribuiti i tuoi dati in tutto il mondo.
- Ottimizza la posizione di deployment di publisher e abbonati in base a questi dati.
Metriche di archiviazione dei messaggi
Conteggi dei messaggi archiviati non confermati:
subscription/num_unacked_messages_by_region
Volume di dati archiviati:
subscription/unacked_bytes_by_region
Età del messaggio meno recente:
subscription/oldest_unacked_message_age_by_region
Sono disponibili metriche analoghe per argomenti e snapshot. Inoltre, sono disponibili metriche corrispondenti per i messaggi confermati che vengono facoltativamente conservati per la riproduzione. Ad esempio:
subscription/num_retained_acked_messages_by_region
Implicazioni per le prestazioni e la disponibilità
La policy di archiviazione dei messaggi non influisce sul contratto di servizio complessivo, ma introduce un compromesso tra controllo e disponibilità quando publisher o abbonati operano al di fuori di Google Cloud o in regioni non consentite dalla policy. Gli utenti che eseguono client publisher all'interno dell'insieme di regioni consentite dalle norme di archiviazione dei messaggi non vedono modifiche alla latenza o alla disponibilità del servizio.
Per comprendere questi compromessi, è utile considerare il routing delle richieste di pubblicazione. In genere, Pub/Sub tenta di archiviare i messaggi il più vicino possibile all'origine della richiesta. Le richieste provenienti daGoogle Cloud sono, in genere, associate alle istanze Pub/Sub nella stessa regione. Se un publisher si trova in una sola regione, l'aggiunta di altre regioni alla policy di archiviazione dei messaggi non aumenta la disponibilità. Quando la pubblicazione avviene al di fuori di Google Cloud, è coinvolto un ulteriore livello di routing per indirizzare la richiesta a una regione Google Cloud vicina in cui è disponibile il servizio Pub/Sub.
Valuta la possibilità di utilizzare una policy di archiviazione dei messaggi che consenta solo la regione us-central1.
- Un client publisher in esecuzione in
us-east1invia una richiestaPublish. - La richiesta viene indirizzata a un server Pub/Sub in
us-east1. - Anziché archiviare i dati in
us-east1, la richiesta viene indirizzata alla regione più vicina consentita dal criterio di archiviazione dei messaggi, ovverous-central1. - Pub/Sub archivia i messaggi pubblicati in
us-central1e inoltra i messaggi ai sottoscrittori da questa posizione.
Questo meccanismo ha implicazioni per la latenza delle richieste e la disponibilità complessiva del sistema. Poiché la richiesta attraversa più link di rete, richiede più tempo per essere completata e ha una probabilità relativamente maggiore di non riuscire.Ciò significa anche che gli abbonati potrebbero vedere il messaggio un po' più tardi perché deve raggiungere la regione consentita più vicina prima di essere inviato. Se la policy consente una sola regione, ma le tue applicazioni publisher vengono eseguite in più regioni, l'applicazione distribuita diventa disponibile solo come la singola regione consentita.
Passaggi successivi
- Consulta la panoramica delle API Pub/Sub per informazioni su come utilizzare gli endpoint globali o locali.