Configurare i criteri di archiviazione dei messaggi

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

Panoramica delle policy di archiviazione dei 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.

La policy di archiviazione dei messaggi si applica solo ai contenuti dei messaggi. La policy 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 sottoscrizione. 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 Google Cloud rete.

Quando specifichi una policy 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 nella policy di archiviazione dei messaggi vengono rifiutate con un errore FAILED_PRECONDITION.

  • Se un client viene eseguito in una delle regioni consentite , ad esempio in una VM Compute Engine, può utilizzare l'endpoint globale . Google Cloud Le richieste del client vengono instradate localmente nella regione consentita. Il client può anche utilizzare un endpoint di località o endpoint regionale che ha come target una regione consentita.

  • Se un client viene eseguito in una regione non consentita Google Cloud o al di fuori di essa Google Cloud, deve utilizzare un endpoint di località o regionale che ha come target una regione nell'elenco delle regioni consentite.

  • La consegna per le sottoscrizioni push viene gestita solo nelle regioni Cloud consentite. In alcuni casi, questa restrizione può sospendere completamente la consegna dei messaggi per le sottoscrizioni push. Quando una sottoscrizione push entra in questo stato perché le località push sono eccessivamente vincolate da una combinazione di fattori come la località di archiviazione dei messaggi, le regioni consentite e la località delle risorse di esportazione, questo stato diventa visibile in Stackdriver.

Policy 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 alcuna policy dell'organizzazione, la policy di archiviazione dei messaggi consente tutte le regioni.

  • Allo stesso modo, in assenza di una policy di archiviazione dei messaggi specificata, il flag enforceInTransit viene determinato in base alla policy dell'organizzazione Applica regioni in transito per i messaggi Pub/Sub effettiva. 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 dalla policy dell'organizzazione Restrizione sulla località delle risorse effettiva. Quando non è in vigore alcuna policy dell'organizzazione, la policy di archiviazione dei messaggi può contenere qualsiasi regione.

Policy di archiviazione dei messaggi per gli argomenti esistenti

  • Quando una policy dell'organizzazione viene aggiornata, le modifiche non vengono propagate automaticamente agli argomenti esistenti. Di conseguenza, la policy di archiviazione dei messaggi di un argomento esistente può non essere sincronizzata con la policy dell'organizzazione più recente. Per saperne di più, consulta Gestisci le differenze tra le policy dell'organizzazione e quelle degli argomenti.

  • Quando la policy di archiviazione dei messaggi di un argomento viene aggiornata, le modifiche non vengono propagate ai messaggi già pubblicati. I messaggi già archiviati in base a una policy precedente non vengono spostati per essere coerenti con la nuova policy. Le modifiche si applicano solo ai messaggi pubblicati dopo l'aggiornamento.

Eccezioni

La policy specifica un elenco di nomi di regioni consentite Google Cloud . 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.

Configura le policy di archiviazione dei messaggi

Esistono due modi per configurare le policy di archiviazione dei messaggi per gli argomenti, tra cui:

  • Imposta una policy di archiviazione dei messaggi utilizzando una policy dell'organizzazione.
  • Configura una policy di archiviazione dei messaggi durante la creazione di un argomento.

Imposta una policy di archiviazione dei messaggi utilizzando una policy dell'organizzazione

Console

Per configurare una policy di archiviazione dei messaggi che si applichi a più argomenti, imposta una policy dell'organizzazione Restrizione sulla località delle risorse.

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

    Vai a Policy dell'organizzazione

  2. Seleziona il nodo della gerarchia delle risorse (organizzazione, cartella o progetto) a cui vuoi impostare una policy dell'organizzazione.

  3. Nel filtro, inserisci Restrizione sulla località delle risorse.

  4. Fai clic su Google Cloud - Restrizione sulla località delle risorse.

  5. Fai clic su MODIFICA.

  6. Aggiungi o rimuovi le 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, consulta Gestisci le tue Google Cloud risorse.

Configura una policy di archiviazione dei messaggi durante la creazione di un argomento

Console

Quando utilizzi la Google Cloud console, non puoi configurare una policy di archiviazione dei messaggi durante la creazione di un argomento. Tutti i nuovi argomenti ereditano automaticamente la policy dell'organizzazione 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.

gcloud CLI

Per creare un argomento con una policy di archiviazione dei messaggi specifica, utilizza il gcloud pubsub topics create comando con il --message-storage-policy-allowed-regions flag:

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 supportate Google Cloud .

REST

Per creare un argomento con una policy di archiviazione dei messaggi, utilizza il projects.topics.create metodo.

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 corrente: 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 saperne di più sulla configurazione delle policy di archiviazione dei messaggi, consulta i seguenti riferimenti API.

Aggiorna le policy di archiviazione dei messaggi

Console

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

    Vai a Dettagli argomento

  2. Seleziona un argomento da aggiornare.

    Puoi selezionare più argomenti.

  3. Nel riquadro Informazioni, seleziona la scheda Policy 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.

gcloud CLI

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 gcloud pubsub topics update comando:

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 supportate Google Cloud .

REST

Per aggiornare un argomento con una policy di archiviazione dei messaggi, utilizza il projects.topics.patch metodo.

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 corrente: 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 saperne di più sull'aggiornamento delle policy di archiviazione dei messaggi, consulta i seguenti riferimenti API.

Gestisci le differenze tra le policy dell'organizzazione e quelle degli argomenti

Visualizza le differenze tra le policy dell'organizzazione e quelle degli argomenti

Console

La Google Cloud console mostra le eventuali differenze tra la policy dell'organizzazione e le policy di archiviazione dei messaggi dei singoli argomenti.

Per verificare se gli argomenti non sono sincronizzati con la policy dell'organizzazione:

  1. Vai alla pagina Dettagli argomento.

    Vai a Dettagli argomento

  2. Seleziona un argomento.

  3. Nel riquadro Informazioni, seleziona la scheda Policy di archiviazione.

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

    Le policy di archiviazione vengono visualizzate nel riquadro, insieme a eventuali differenze tra le policy dell'organizzazione e quelle degli argomenti.

gcloud CLI

Per esaminare la policy corrente assegnata 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.

Risolvi le differenze tra le policy dell'organizzazione e quelle degli argomenti

Console

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

    Vai a Pub/Sub

  2. Seleziona un argomento.

  3. Nel riquadro Informazioni, seleziona la scheda Policy di archiviazione.

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

    Le policy di archiviazione vengono visualizzate nel riquadro, insieme a eventuali discrepanze.

    Se sono presenti discrepanze, il riquadro informazioni mostra tre opzioni per sincronizzare la policy di archiviazione dell'argomento con la policy dell'organizzazione, tra cui:

    • Gli argomenti consentono l'archiviazione in località non consentite.

      Aggiorna per consentire l'archiviazione solo in località autorizzate dalla policy.

    • L'argomento non consente l'archiviazione in alcune località consentite.

      Aggiorna per consentire l'archiviazione ovunque sia consentito dalla policy.

    • Gli argomenti non sono aggiornati in località sia non consentite che consentite.

      Aggiorna per consentire l'archiviazione in località autorizzate dalla policy.

  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 Google Cloud regione.

Puoi utilizzare queste metriche per:

  • Comprendere come vengono distribuiti i dati in tutto il mondo.
  • Ottimizzare la località di deployment di publisher e sottoscrittori in base a questi dati.

Metriche di archiviazione dei messaggi

Conteggi dei messaggi archiviati senza riconoscimento:

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 conservati facoltativamente per la riproduzione. Ad esempio:

subscription/num_retained_acked_messages_by_region

Implicazioni per prestazioni e disponibilità

La policy di archiviazione dei messaggi non influisce sullo SLA complessivo, ma introduce un compromesso tra disponibilità e controllo quando i publisher o i sottoscrittori vengono eseguiti al di fuori o in regioni non consentite dalla policy. Google Cloud Gli utenti che eseguono client publisher nell'insieme di regioni consentite dalla policy di archiviazione dei messaggi non vedono modifiche nella latenza o nella disponibilità del servizio.

Per comprendere questi compromessi, è utile considerare come vengono instradate 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, di norma, vincolate alle istanze Pub/Sub nella stessa regione. Se un publisher si trova in una singola regione, l'aggiunta di altre regioni alla policy di archiviazione dei messaggi non aumenta la disponibilità. Quando pubblichi da fuori Google Cloud, è coinvolto un livello aggiuntivo di routing per inviare la richiesta a una regione vicina in cui è disponibile il servizio Pub/Sub. Google Cloud

Considera una policy di archiviazione dei messaggi che consente solo la regione us-central1.

  1. Un client publisher in esecuzione in us-east1 invia una richiesta Publish.
  2. La richiesta viene instradata a un server Pub/Sub in us-east1.
  3. Anziché archiviare i dati in us-east1, la richiesta viene instradata alla regione più vicina consentita dalla policy di archiviazione dei messaggi, ovvero us-central1.
  4. Pub/Sub archivia i messaggi pubblicati in us-central1 e li inoltra ai sottoscrittori da questa località.

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 i sottoscrittori 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 singola regione, ma le applicazioni publisher vengono eseguite in più regioni, l'applicazione distribuita diventa disponibile solo come la singola regione consentita.

Passaggi successivi