Leggi il contratto di leasing

La pagina descrive e spiega come utilizzare i lease di lettura di Spanner. I lease di lettura aiutano i database a ridurre la latenza di lettura nelle regioni non leader per le transazioni che richiedono una elevata coerenzata.

Per impostazione predefinita, quando Spanner riceve una richiesta di lettura coerente in una regione non leader, la replica che gestisce la lettura contatta la regione di lettura/scrittura leader dell'istanza. Questo contatto conferma che i suoi dati sono aggiornati prima di soddisfare la richiesta. Questo processo comporta un round trip di rete tra la regione che riceve la richiesta e la regione leader. A differenza della comunicazione all'interno di una singola regione, la distanza geografica tra le regioni aggiunge ulteriore latenza alla richiesta.

L'utilizzo dei lease di lettura di Spanner elimina la necessità di questo round trip. Quando imposti una o più regioni di lease di lettura per il tuo database, Spanner concede il diritto di pubblicare letture localmente a una o più regioni non leader, di lettura/scrittura o di sola lettura. In questo modo, le regioni non leader possono gestire direttamente le letture coerenti senza comunicare con la regione leader. La gestione di letture coerenti da una regione non leader più vicina al client riduce la latenza tra le regioni. In questo modo si ottiene una latenza intraregionale per letture coerenti nelle istanze a due o più regioni.

L'attivazione o la disattivazione della funzionalità di lease di lettura in una regione non richiede tempi di inattività. Tuttavia, le operazioni di scrittura hanno una latenza maggiore quando utilizzi la funzionalità, perché l'attivazione del lease di lettura richiede al leader di contattare le regioni del lease di lettura quando gestisce le operazioni di scrittura. Come effetto collaterale, le scritture mantengono i blocchi più a lungo, il che può influire sui carichi di lavoro di scrittura con elevata contesa. Per saperne di più, vedi Quando utilizzare i lease di lettura. Il lease di lettura è più adatto alle applicazioni che sono disposte a scambiare una maggiore latenza di scrittura con letture forti più veloci. Ad esempio, un sistema di controllo dell'accesso in cui il workload ha letture frequenti ma scritture rare.

Per scoprire come attivare i lease di lettura in una regione non leader, vedi Utilizzare i lease di lettura.

Quando utilizzare i lease di lettura

Attiva i lease di lettura se la tua applicazione e il tuo workload soddisfano i seguenti criteri:

  • La bassa latenza per letture solide è più importante della bassa latenza per le scritture.
  • Il carico di lavoro può tollerare durate di blocco della scrittura più lunghe o ha una bassa contesa di scrittura.

L'abilitazione dei lease di lettura aumenta la latenza di scrittura, il che fa sì che i blocchi di scrittura vengano mantenuti più a lungo. Se il tuo carico di lavoro di scrittura ha già un'elevata contesa di scrittura, questa funzionalità può peggiorare la latenza di scrittura e ridurre il throughput.

Quando ci sono scritture simultanee, la scelta tra l'utilizzo delle API di query o delle API di lettura influisce sulle prestazioni di un database che utilizza regioni di lease di lettura.

L'esecuzione di istruzioni SQL in Spanner comporta la lettura di dati da più righe o intervalli. Quando si utilizzano le API di query con i lease di lettura abilitati, le letture devono attendere le scritture simultanee per correttezza. Di conseguenza, potresti osservare una latenza maggiore, soprattutto quando il carico di scrittura è maggiore. Le API di lettura sono generalmente più tolleranti alle scritture simultanee rispetto alle API di query. Se utilizzi spesso le API di query con carichi di scrittura elevati, valuta la possibilità di ridurre la frequenza delle scritture o di utilizzare invece le letture non aggiornate.

Le API di lettura sono ottimizzate per la lettura di righe o intervalli di dati specifici. Devono solo attendere le scritture che modificano i dati esatti che stanno tentando di leggere. Se utilizzi API di lettura, solo le scritture sugli stessi intervalli di dati bloccano le letture. Di conseguenza, quando ci sono scritture simultanee e utilizzi regioni di lease di lettura, le letture coerenti di Spanner hanno un rendimento migliore e una latenza inferiore.

Per scoprire di più sul monitoraggio della latenza, consulta Monitoraggio.

Caso d'uso di esempio

Prendi in considerazione un'applicazione di cui è stato eseguito il deployment a livello globale che esegue scritture negli Stati Uniti e ha client negli Stati Uniti, in Europa e in Asia. Puoi configurare un'istanza Spanner multiregionale, ad esempio nam-eur-asia1, con una regione leader in us-central1 e repliche di sola lettura in europe-west1 e asia-east1.

Quando abiliti il lease di lettura nelle regioni di sola lettura europe-west1 e asia-east1, Spanner esegue letture coerenti da Europa e Asia da queste repliche locali, riducendo la latenza. Il compromesso è un aumento della latenza di scrittura per tutte le scritture. L'aumento della latenza equivale al tempo di andata e ritorno tra la regione leader us-central1 e le regioni di lease di lettura più distanti.

Limitazioni

I lease di lettura di Spanner presentano le seguenti limitazioni:

  • Non puoi abilitare il lease di lettura in una regione di testimonianza.
  • Non puoi utilizzare il lease di lettura con il partizionamento geografico.
  • Le concessioni di lettura non riducono la latenza per le letture che fanno parte di una transazione di lettura/scrittura. Anche se una transazione di lettura-scrittura contiene solo letture, queste vengono comunque eseguite dall'regione leader.
  • Se sposti l'istanza in una configurazione diversa, le impostazioni del lease di lettura non vengono conservate. Devi riattivare il lease di lettura sul database al termine dello spostamento.

Utilizzare i lease di lettura

Prima di poterlo utilizzare, devi attivare i contratti di lettura.

Controllo dell'accesso con IAM

Per impostare le regioni di lease di lettura, un utente deve disporre dell'autorizzazione IAM spanner.databases.create o spanner.databases.updateDdl. Il ruolo Amministratore database (roles/spanner.databaseAdmin) predefinito include queste autorizzazioni. Per maggiori informazioni, consulta la panoramica di IAM per Spanner.

Per informazioni su come concedere le autorizzazioni, vedi Applicare le autorizzazioni IAM.

Prima di iniziare per gli utenti del database PostgreSQL

Se vuoi utilizzare il lease di lettura in un database PostgreSQL, apporta una delle seguenti modifiche alla configurazione del database. In caso contrario, le letture vengono comunque gestite dalla regione leader anche se hai impostato le regioni di lease di lettura.

  • Se utilizzi solo transazioni di sola lettura, configura la connessione PostgreSQL in modo che lo stato predefinito di ogni nuova transazione nel database sia impostato su sola lettura. Per farlo, imposta l'opzione default_transaction_read_only su true.

    postgres://USER_ID:PASSWORD@localhost:5432/DATABASE_ID?sslmode=disable&options=-c \
      default_transaction_read_only=true
    host=/tmp port=5432 database=DATABASE_ID \
      options='-c default_transaction_read_only=true'
    

    Sostituisci quanto segue:

    • USER_ID con l'identificatore univoco dell'utente.

    • PASSWORD con la tua password.

    • DATABASE_ID: l'identificatore univoco del tuo database.

Attivare la lettura dei contratti di noleggio

Per attivare i lease di lettura quando crei un nuovo database, imposta l'opzione read_lease_regions nell'istruzione DDL ALTER DATABASE (GoogleSQL, PostgreSQL):

Console

  1. Vai alla pagina Istanze nella console Google Cloud .

    Istanze

  2. Seleziona l'istanza in cui vuoi attivare il lease di lettura.

  3. Nella pagina Panoramica dell'istanza che si apre, fai clic su Crea database.

  4. Inserisci un nome per il database.

  5. Seleziona un dialetto del database.

  6. Fai clic su Crea.

    La console Google Cloud mostra la pagina Panoramica del database che hai creato.

  7. Nel menu di navigazione, fai clic su Spanner Studio.

  8. Nella pagina Spanner Studio, fai clic su Nuova scheda o utilizza la scheda dell'editor vuota.

  9. Inserisci la seguente istruzione DDL ALTER DATABASE.

    GoogleSQL

    ALTER DATABASE DATABASE_ID
    SET OPTIONS (read_lease_regions = 'READ_LEASE_REGION');
    

    Sostituisci quanto segue:

    • DATABASE_ID con l'identificatore univoco del tuo database.

    • READ_LEASE_REGION con la regione in cui vuoi attivare il lease di lettura. Ad esempio, europe-west1. Puoi attivare il lease di lettura per più regioni. Separa ogni regione con una virgola.

    PostgreSQL

    ALTER DATABASE DATABASE_ID
    SET "spanner.read_lease_regions" = 'READ_LEASE_REGION';
    

    Sostituisci quanto segue:

    • DATABASE_ID con l'identificatore univoco del tuo database.

    • READ_LEASE_REGION con la regione in cui vuoi attivare il lease di lettura. Ad esempio, europe-west1. Puoi attivare il lease di lettura per più regioni. Separa ogni regione con una virgola.

  10. Fai clic su Esegui.

gcloud

Per impostare l'opzione del database read_lease_regions durante la creazione del database, utilizza gcloud spanner databases create.

GoogleSQL

gcloud spanner databases create DATABASE_ID \
  --instance=INSTANCE_ID \
  --ddl="ALTER DATABASE DATABASE_ID SET OPTIONS (read_lease_regions = 'READ_LEASE_REGION');"

Sostituisci quanto segue:

  • DATABASE_ID: l'identificatore permanente del tuo database Spanner.
  • INSTANCE_ID: l'identificatore permanente per l'istanza Spanner.
  • READ_LEASE_REGION: la regione in cui vuoi attivare il lease di lettura. Ad esempio, europe-west1. Puoi attivare il lease di lettura per più regioni. Separa ogni regione con una virgola.

PostgreSQL

gcloud spanner databases create DATABASE_ID \
  --instance=INSTANCE_ID \
  --ddl="ALTER DATABASE DATABASE_ID \
    SET "spanner.read_lease_regions" = 'READ_LEASE_REGION';"

Sostituisci quanto segue:

  • DATABASE_ID: l'identificatore permanente del tuo database Spanner.
  • INSTANCE_ID: l'identificatore permanente per l'istanza Spanner.
  • READ_LEASE_REGION: la regione in cui vuoi attivare il lease di lettura. Ad esempio, europe-west1. Puoi attivare il lease di lettura per più regioni. Separa ogni regione con una virgola.

Per attivare il lease di lettura quando aggiorni un database esistente, imposta l'opzione read_lease_regions nell'istruzione DDL ALTER DATABASE (GoogleSQL, PostgreSQL):

Console

  1. Vai alla pagina Istanze nella console Google Cloud .

    Istanze

  2. Seleziona l'istanza in cui vuoi attivare il lease di lettura.

  3. Seleziona il database in cui vuoi attivare il lease di lettura.

  4. Nel menu di navigazione, fai clic su Spanner Studio.

  5. Nella pagina Spanner Studio, fai clic su Nuova scheda o utilizza la scheda dell'editor vuota.

  6. Inserisci la seguente istruzione DDL ALTER DATABASE.

    GoogleSQL

    ALTER DATABASE DATABASE_ID \
    SET OPTIONS (read_lease_regions = 'READ_LEASE_REGION');
    

    Sostituisci quanto segue:

    • DATABASE_ID con l'identificatore univoco del tuo database.

    • READ_LEASE_REGION con la regione in cui vuoi attivare il lease di lettura. Ad esempio, europe-west1. Puoi attivare il lease di lettura per più regioni. Separa ogni regione con una virgola.

    PostgreSQL

    ALTER DATABASE DATABASE_ID \
    SET "spanner.read_lease_regions" = 'READ_LEASE_REGION';
    

    Sostituisci quanto segue:

    • DATABASE_ID con l'identificatore univoco del tuo database.

    • READ_LEASE_REGION con la regione in cui vuoi attivare il lease di lettura. Ad esempio, europe-west1. Puoi attivare il lease di lettura per più regioni. Separa ogni regione con una virgola.

  7. Fai clic su Esegui.

gcloud

Per impostare l'opzione del database read_lease_regions, utilizza gcloud spanner databases ddl update.

GoogleSQL

gcloud spanner databases ddl update DATABASE_ID \
  --instance=INSTANCE_ID \
  --ddl="ALTER DATABASE DATABASE_ID \
    SET OPTIONS (read_lease_regions = 'READ_LEASE_REGION');"

Sostituisci quanto segue:

  • DATABASE_ID: l'identificatore permanente del tuo database Spanner.
  • INSTANCE_ID: l'identificatore permanente per l'istanza Spanner.
  • READ_LEASE_REGION con la regione in cui vuoi attivare il lease di lettura. Ad esempio, europe-west1. Puoi attivare il lease di lettura per più regioni. Separa ogni regione con una virgola.

PostgreSQL

gcloud spanner databases ddl update DATABASE_ID \
  --instance=INSTANCE_ID \
  --ddl="ALTER DATABASE DATABASE_ID \
    SET "spanner.read_lease_regions" = 'READ_LEASE_REGION';"

Sostituisci quanto segue:

  • DATABASE_ID: l'identificatore permanente del tuo database Spanner.
  • INSTANCE_ID: l'identificatore permanente per l'istanza Spanner.
  • READ_LEASE_REGION con la regione in cui vuoi attivare il lease di lettura. Ad esempio, europe-west1. Puoi attivare il lease di lettura per più regioni. Separa ogni regione con una virgola.

Disabilitare le concessioni di lettura

La lettura del lease è disattivata per impostazione predefinita.

Per aggiornare e disattivare la funzionalità in un database esistente, imposta l'opzione read_lease_regions nell'istruzione DDL ALTER DATABASE (GoogleSQL, PostgreSQL) su NULL:

Console

  1. Vai alla pagina Istanze nella console Google Cloud .

    Istanze

  2. Seleziona l'istanza in cui vuoi disattivare il lease di lettura.

  3. Seleziona il database in cui vuoi disattivare il lease di lettura.

  4. Nel menu di navigazione, fai clic su Spanner Studio.

  5. Nella pagina Spanner Studio, fai clic su Nuova scheda o utilizza la scheda dell'editor vuota.

  6. Inserisci la seguente istruzione DDL ALTER DATABASE.

    GoogleSQL

    ALTER DATABASE DATABASE_ID SET OPTIONS (read_lease_regions = NULL);
    

    Sostituisci DATABASE_ID con l'identificatore univoco del tuo database.

    PostgreSQL

    ALTER DATABASE DATABASE_ID SET "spanner.read_lease_regions" = NULL;
    

    Sostituisci DATABASE_ID con l'identificatore univoco del tuo database.

  7. Fai clic su Esegui.

gcloud

Per impostare l'opzione del database read_lease_regions, utilizza gcloud spanner databases ddl update.

GoogleSQL

gcloud spanner databases ddl update DATABASE_ID \
  --instance=INSTANCE_ID \
  --ddl="ALTER DATABASE DATABASE_ID SET OPTIONS (read_lease_regions = NULL);"

Sostituisci quanto segue:

  • DATABASE_ID: l'identificatore permanente del tuo database Spanner.
  • INSTANCE_ID: l'identificatore permanente dell'istanza Spanner.

PostgreSQL

gcloud spanner databases ddl update DATABASE_ID \
  --instance=INSTANCE_ID \
  --ddl="ALTER DATABASE DATABASE_ID SET "spanner.read_lease_regions" = NULL;"

Sostituisci quanto segue:

  • DATABASE_ID: l'identificatore permanente del tuo database Spanner.
  • INSTANCE_ID: l'identificatore permanente dell'istanza Spanner.

Best practice

Per massimizzare i vantaggi dell'utilizzo di questa funzionalità, utilizza le sessioni multiplexate, che ti consentono di creare un numero elevato di richieste simultanee in una singola sessione.

Monitoraggio

Dopo aver attivato il lease di lettura, è importante monitorare la latenza per verificare che la funzionalità raggiunga l'effetto previsto. Per farlo, identifica la regione leader e le regioni con il lease di lettura abilitato eseguendo una query sulla tabella dello schema delle informazioni data_options (GoogleSQL, PostgreSQL) o sul tuo database. Le regioni in cui è abilitato il lease di lettura prevedono che le letture coerenti abbiano una latenza intraregionale. Contemporaneamente, la latenza di scrittura aumenta tra la regione leader e la regione più lontana con il lease di lettura abilitato.

Puoi anche utilizzare la seguente metrica di latenza di Spanner per monitorare le latenze delle richieste di lettura nelle tue istanze:

  • spanner.googleapis.com/api/read_request_latencies_by_serving_location

Puoi filtrare questa metrica utilizzando il campo /serving_location. Il campo /serving location indica la posizione del server Spanner da cui viene gestita la richiesta.

Per un elenco completo delle metriche disponibili, consulta l'elenco delle metriche per Spanner.

Considerazioni sui costi

Le letture coerenti pubblicate dalle regioni con la funzionalità di lease di lettura abilitata utilizzano risorse di calcolo leggermente inferiori. D'altra parte, le scritture per i database con la funzionalità di lease di lettura abilitata utilizzano leggermente più risorse di calcolo. Per ulteriori informazioni, consulta la pagina Prezzi della capacità di calcolo di Spanner.

La funzionalità non influisce su altri componenti di prezzo, come lo spazio di archiviazione e la rete.

Passaggi successivi