Configurare i criteri di archiviazione dei messaggi

Se pubblichi messaggi nell'endpoint Pub/Sub globale, Pub/Sub li archivia automaticamente nella regione Google Cloud più vicina. Se vuoi controllare le regioni in cui vengono archiviati ed elaborati i messaggi, puoi configurare un criterio di archiviazione dei messaggi nell'argomento.

Panoramica dei criteri di archiviazione dei messaggi

Puoi impostare un criterio di archiviazione dei messaggi quando crei un nuovo argomento o quando lo aggiorni 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. Un criterio di archiviazione dei messaggi garantisce che Pub/Sub archivi ed elabori i messaggi solo nell'insieme di regioni Google Cloud specificate, indipendentemente dall'origine delle richieste di pubblicazione o di sottoscrizione. Se il criterio 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 messaggio di errore FAILED_PRECONDITION.

  • L'invio per le iscrizioni push viene gestito solo all'interno delle regioni Cloud consentite. In alcuni casi, questa limitazione può mettere completamente in pausa la consegna dei messaggi per le iscrizioni 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 un criterio di archiviazione dei messaggi quando crei un argomento, il criterio viene determinato automaticamente in base al criterio dell'organizzazione relativo alla restrizione sulla località delle risorse in vigore. Quando non sono in vigore criteri dell'organizzazione, il criterio di archiviazione dei messaggi consente tutte le regioni.

  • Analogamente, in assenza di un criterio di archiviazione dei messaggi specificato, il flag enforceInTransit viene determinato in base al criterio dell'organizzazione Applica le regioni in transito per i messaggi Pub/Sub efficace. Per ulteriori informazioni su questo criterio dell'organizzazione, consulta Vincoli delle policy dell'organizzazione.

  • Se specifichi un criterio di archiviazione dei messaggi quando crei un argomento, questo può contenere solo le regioni consentite dal criterio dell'organizzazione Limitazione della località delle risorse in vigore. Quando 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 si propagano automaticamente agli argomenti esistenti. Di conseguenza, il criterio di archiviazione dei messaggi di un argomento esistente può non essere più sincronizzato con il criterio dell'organizzazione più recente. Per maggiori informazioni, consulta Gestire le differenze tra i criteri dell'organizzazione e quelli 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 conformi al nuovo criterio. Le modifiche si applicano solo ai messaggi pubblicati dopo l'update.

Eccezioni

Il criterio specifica un elenco di nomi di regioni Google Cloud consentiti. Di conseguenza, i seguenti elementi non sono supportati:

  • Elenchi di esclusione
  • Zone o località con più regioni

Se pubblichi un messaggio con una chiave di ordinamento e il criterio 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 i criteri di archiviazione dei messaggi per gli argomenti, tra cui:

  • Imposta un criterio di archiviazione dei messaggi utilizzando un criterio dell'organizzazione.
  • Configura un criterio di archiviazione dei messaggi quando crei 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 Restringi località risorse.

  1. Vai alla pagina Criteri dell'organizzazione nella console Identity and Access Management.

    Vai a Criteri dell'organizzazione

  2. Seleziona il nodo della gerarchia delle risorse (organizzazione, cartella o progetto) per cui vuoi impostare un criterio dell'organizzazione.

  3. Nel filtro, inserisci Limitazione della località della risorsa.

  4. Fai clic su Google Cloud - Resource Location Restriction (Google Cloud - Limitazione della località della risorsa).

  5. Fai clic su MODIFICA.

  6. Aggiungi o rimuovi le regioni in base alle esigenze.

    Tutti i nuovi argomenti che crei erediteranno queste impostazioni. Le modifiche non vengono propagate automaticamente agli argomenti esistenti. Per aggiornare gli argomenti esistenti, devi eseguire un'operazione di aggiornamento.

Per ulteriori informazioni sui criteri dell'organizzazione, vedi Gestire le risorse Google Cloud.

Configurare un criterio di archiviazione dei messaggi durante la creazione di un argomento

Console

Quando utilizzi la console Google Cloud, non puoi configurare un criterio di archiviazione dei messaggi quando crei un argomento. Tutti i nuovi argomenti ereditano automaticamente il criterio dell'organizzazione relativo alla restrizione sulla località delle risorse.

Tuttavia, dopo aver creato un argomento, puoi modificare il relativo criterio di archiviazione dei messaggi nella console con un'operazione di aggiornamento.

Interfaccia a riga di comando gcloud

Per creare un argomento con un criterio di archiviazione dei messaggi specifico, 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 delle regioni Google Cloud supportate.

REST

Per creare un argomento con un criterio 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 Credenziali predefinite dell'applicazione correnti: 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.

Risposta di esempio:

{
  "name": "projects/PROJECT_ID/topics/TOPIC_ID",
  "messageStoragePolicy": {
    "allowedPersistenceRegions": [
      "REGION"
    ],
    "enforceInTransit": true
  }
}

Per ulteriori informazioni sulla configurazione dei criteri di archiviazione dei messaggi, consulta i seguenti riferimenti all'API.

Aggiornare i criteri di archiviazione dei messaggi

Console

  1. Nella console Google Cloud, apri la pagina Dettagli argomento.

    Vai a Dettagli argomento

  2. Seleziona un argomento da aggiornare.

    Puoi selezionare più argomenti.

  3. Nel riquadro informativo, seleziona la scheda Criteri di archiviazione.

    Questo riquadro potrebbe essere compresso per impostazione predefinita. Se è compresso, fai clic su Mostra riquadro informazioni.

  4. Seleziona o deseleziona tutte le regioni necessarie.

  5. Fai clic su Aggiorna.

Interfaccia a riga di comando gcloud

Per inviare il criterio di archiviazione dei messaggi definito nel criterio di restrizione sulla località delle risorse della tua organizzazione a un argomento, esegui il seguente comando gcloud pubsub topics update:

gcloud pubsub topics update TOPIC_ID \
    --recompute-message-storage-policy

Per aggiornare il criterio 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 delle regioni Google Cloud supportate.

REST

Per aggiornare un argomento con un criterio 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 Credenziali predefinite dell'applicazione correnti: 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.

Risposta di esempio:

{
  "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 i criteri dell'organizzazione e quelli degli argomenti

Visualizzare le differenze tra i criteri dell'organizzazione e quelli degli argomenti

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 gli argomenti non sono sincronizzati con i criteri della tua organizzazione:

  1. Vai alla pagina Dettagli argomento.

    Vai a Dettagli argomento

  2. Seleziona un argomento.

  3. Nel riquadro informativo, seleziona la scheda Criteri di archiviazione.

    Questo riquadro potrebbe essere compresso per impostazione predefinita. Se è compresso, fai clic su Mostra riquadro informazioni.

    Nel riquadro vengono visualizzati i criteri di archiviazione, insieme a eventuali differenze tra i criteri dell'organizzazione e quelli degli argomenti.

Interfaccia a riga di comando gcloud

Per esaminare il criterio corrente assegnato a un argomento, esegui il seguente 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 relative a organizzazioni e argomenti

Console

  1. Nella console Google Cloud, apri la pagina Dettagli argomento.

    Vai a Pub/Sub.

  2. Seleziona un argomento.

  3. Nel riquadro informativo, seleziona la scheda Criteri di archiviazione.

    Questo riquadro potrebbe essere compresso per impostazione predefinita. Se è compresso, fai clic su Mostra riquadro informazioni.

    Nel riquadro vengono visualizzati i criteri di archiviazione, insieme a eventuali discrepanze.

    In caso di discrepanze, il riquadro delle informazioni mostra tre opzioni per sincronizzare il criterio di archiviazione dell'argomento con quello dell'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 obsoleti sia per le località non consentite che per quelle consentite.

      Aggiorna per consentire l'archiviazione in località autorizzate dal criterio.

  4. Seleziona l'opzione appropriata per risolvere i problemi.

  5. Fai clic su Aggiorna argomento.

    Viene visualizzata la finestra di dialogo Sincronizza con la policy di archiviazione dell'organizzazione.

  6. 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 implementazione di publisher e abbonati in base a questi dati.

Metriche relative allo spazio 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 gli argomenti e gli snapshot. Inoltre, sono disponibili le metriche corrispondenti per i messaggi confermati che possono essere conservati facoltativamente per la riproduzione. Ad esempio:

subscription/num_retained_acked_messages_by_region

Implicazioni per le prestazioni e la disponibilità

Il criterio di archiviazione dei messaggi non influisce sullo SLA complessivo, ma introduce un compromesso tra disponibilità e controllo quando i publisher o gli abbonati vengono eseguiti al di fuori di Google Cloud o in regioni non consentite dal criterio. Gli utenti che eseguono client publisher all'interno dell'insieme di regioni consentite dal criterio di archiviazione dei messaggi non notano alcuna modifica nella latenza o nella disponibilità del servizio.

Per comprendere questi compromessi, vale la pena considerare come vengono indirizzate le richieste di pubblicazione. In genere, Pub/Sub tenta di archiviare i messaggi il più vicino possibile all'origine della richiesta. Le richieste provenienti da Google Cloud sono, in genere, associate alle istanze Pub/Sub nella stessa regione. Se un publisher si trova in una singola regione, l'aggiunta di altre regioni al criterio di archiviazione dei messaggi non aumenta la disponibilità. Quando pubblichi da un computer esterno a Google Cloud, è necessario un livello aggiuntivo di instradamento per inviare la richiesta a una regione Google Cloud vicina in cui è disponibile il servizio Pub/Sub.

Prendiamo in considerazione un criterio di archiviazione dei messaggi che consenta solo la regione us-central1.

  1. Un client publisher in esecuzione in us-east1 invia una richiesta Publish.
  2. La richiesta viene indirizzata a un server Pub/Sub in us-east1.
  3. Invece di archiviare i dati in us-east1, la richiesta viene inoltrata alla regione più vicina consentita dal criterio di archiviazione dei messaggi, ovvero us-central1.
  4. Pub/Sub archivia i messaggi pubblicati in us-central1 e li inoltra ai sottoscrittori da questa posizione.

Questo meccanismo ha implicazioni sulla latenza delle richieste e sulla disponibilità complessiva del sistema. Poiché la richiesta attraversa più link di rete, richiede più tempo per essere completata e ha una probabilità relativamente più elevata 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 il criterio consente una singola regione, ma le applicazioni del publisher vengono eseguite in più regioni, l'applicazione distribuita diventa disponibile solo nella singola regione consentita.

Passaggi successivi