Leggi il contratto di leasing

Questa pagina descrive e spiega come utilizzare i lease di lettura di Spanner. I lease di lettura aiutano i tuoi database e i tuoi posizionamenti a ridurre la latenza di lettura avanzata nelle regioni di lettura/scrittura o di sola lettura a costo di una latenza di scrittura più elevata.

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 elaborare 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 o posizionamento, Spanner concede a queste regioni il diritto di pubblicare letture coerenti a livello locale. In questo modo, le regioni non leader possono gestire direttamente le letture intense senza comunicare con la regione leader. La pubblicazione 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 le letture coerenti nelle istanze multiregionali o in due regioni. Quando i lease di lettura sono attivati, le letture coerenti all'interno delle transazioni di sola lettura vengono eseguite localmente senza contattare il leader. Per le transazioni di lettura-scrittura, le letture vengono comunque indirizzate all'regione leader a meno che tu non utilizzi l'isolamento in lettura continua con il routing leader-aware disattivato.

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, 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 tuo workload può tollerare durate più lunghe del blocco di scrittura o ha una bassa contesa di scrittura.

Quando si verificano 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.

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

Caso d'uso di esempio

Considera 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:

  • Le letture di lease non riducono la latenza per le letture che fanno parte di una transazione di lettura/scrittura. Se vuoi ottenere una latenza intra-regionale per le letture all'interno delle transazioni di lettura/scrittura, devi utilizzare il livello di isolamento di lettura ripetibile e disattivare il routing consapevole del leader per utilizzare i lease di lettura. Anche quando si utilizza l'isolamento di lettura ripetibile, le letture nelle transazioni di lettura/scrittura potrebbero comunque essere indirizzate alla regione leader, in particolare dopo che si è verificata una scrittura all'interno della transazione, per garantire la coerenza di lettura delle scritture.
  • 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.
  • Non puoi disattivare o modificare la regione di lease di lettura in un posizionamento esistente. Questa limitazione è soggetta a modifiche o rimozione al momento del rilascio della versione GA del geo-partitioning o successivamente. Se vuoi disattivare il lease di lettura in un posizionamento esistente, segui questi passaggi:
    • Crea un nuovo posizionamento senza specificare l'opzione di lease di lettura o con una regione di lease di lettura diversa da quella che vuoi utilizzare.
    • Utilizza DML partizionato per aggiornare il posizionamento dei dati nel nuovo posizionamento. Questo aggiornamento avvia un processo in background per spostare i dati. Spanner può spostare circa 10 righe di posizionamento al secondo per ogni nodo nella partizione dell'istanza di destinazione. Durante questo periodo, l'utilizzo della CPU potrebbe essere influenzato a causa dello spostamento.
    • Elimina il posizionamento originale al termine dello spostamento dei dati.

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 saperne di più, 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.

  • Se vuoi ottenere una lettura della latenza intraregionale all'interno di transazioni di lettura/scrittura o non puoi sempre cambiare l'opzione di connessione, utilizza il livello di isolamento di lettura ripetibile e disattiva il routing consapevole del leader. Queste impostazioni sono necessarie anche se la transazione di lettura/scrittura ha solo letture. In caso contrario, le letture all'interno delle transazioni di lettura-scrittura vengono sempre indirizzate all'regione leader. In una transazione di questo tipo, il lease di lettura viene disattivato dopo la prima istruzione DML di scrittura. Questo perché le scritture sono sempre indirizzate all'regione leader. Pertanto, per leggere la scrittura, le letture successive devono essere eseguite anche nella regione leader.

    postgres://USER_ID:PASSWORD@localhost:5432/DATABASE_ID?sslmode=disable&options=-c \
      default_isolation_level=REPEATABLE_READ -c routeToLeader=false
    host=/tmp port=5432 database=DATABASE_ID \
      options='-c default_isolation_level=REPEATABLE_READ -c routeToLeader=false'
    

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 una o più regioni in cui vuoi attivare il lease di lettura. Ad esempio, europe-west1, europe-west4.

    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 una o più regioni in cui vuoi attivare il lease di lettura. Ad esempio, europe-west1, europe-west4.

  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 del database Spanner.
  • INSTANCE_ID: l'identificatore dell'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 del database Spanner.
  • INSTANCE_ID: l'identificatore dell'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 una o più regioni in cui vuoi attivare il lease di lettura. Ad esempio, europe-west1, europe-west4.

    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 una o più regioni in cui vuoi attivare il lease di lettura. Ad esempio, europe-west1, europe-west4.

  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 del database Spanner.
  • INSTANCE_ID: l'identificatore dell'istanza Spanner.
  • READ_LEASE_REGION con una o più regioni in cui vuoi attivare il lease di lettura. Ad esempio, europe-west1, europe-west4.

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 del database Spanner.
  • INSTANCE_ID: l'identificatore dell'istanza Spanner.
  • READ_LEASE_REGION con una o più regioni in cui vuoi attivare il lease di lettura. Ad esempio, europe-west1, europe-west4.

Per attivare il lease di lettura quando crei un nuovo posizionamento, utilizza l'opzione read_lease_regions nell'istruzione DDL CREATE PLACEMENT (GoogleSQL, PostgreSQL) per impostare una o più regioni in cui vuoi utilizzare il lease di lettura:

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 per un posizionamento.

  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 CREATE PLACEMENT.

    GoogleSQL

    CREATE PLACEMENT PLACEMENT_NAME
    OPTIONS (instance_partition="PARTITION_ID",
    read_lease_regions = 'READ_LEASE_REGION');
    

    Sostituisci quanto segue:

    • PLACEMENT_NAME con il nome del posizionamento.
    • PARTITION_ID con l'identificatore univoco della partizione da associare al posizionamento.
    • READ_LEASE_REGION con una o più regioni in cui vuoi attivare il lease di lettura. Ad esempio, europe-west1, europe-west4.

    PostgreSQL

    CREATE PLACEMENT PLACEMENT_NAME
    WITH (instance_partition='PARTITION_ID',
          read_lease_regions = 'READ_LEASE_REGION';
    

    Sostituisci quanto segue:

    • PLACEMENT_NAME con il nome del posizionamento.
    • PARTITION_ID con l'identificatore univoco della partizione da associare al posizionamento.
    • READ_LEASE_REGION con una o più regioni in cui vuoi attivare il lease di lettura. Ad esempio, europe-west1, europe-west4.
  7. Fai clic su Esegui.

gcloud

Per impostare l'opzione di database read_lease_regions per un posizionamento, utilizza gcloud spanner databases ddl update con un'istruzione CREATE PLACEMENT.

GoogleSQL

gcloud spanner databases ddl update DATABASE_ID \
  --instance=INSTANCE_ID \
  --ddl="CREATE PLACEMENT PLACEMENT_NAME OPTIONS (instance_partition=\"PARTITION_ID\", read_lease_regions = 'READ_LEASE_REGION');"`

Sostituisci quanto segue:

  • DATABASE_ID: l'identificatore del database Spanner.
  • INSTANCE_ID: l'identificatore dell'istanza Spanner.
  • PLACEMENT_NAME: il nome del posizionamento.
  • PARTITION_ID: l'identificatore univoco della partizione da associare al posizionamento.
  • READ_LEASE_REGION con una o più regioni in cui vuoi attivare il lease di lettura. Ad esempio, europe-west1, europe-west4.

PostgreSQL

gcloud spanner databases ddl update DATABASE_ID \
  --instance=INSTANCE_ID \
  --ddl="CREATE PLACEMENT PLACEMENT_NAME WITH (instance_partition='PARTITION_ID', read_lease_regions = 'READ_LEASE_REGION';"

Sostituisci quanto segue:

  • DATABASE_ID: l'identificatore del database Spanner.
  • INSTANCE_ID: l'identificatore dell'istanza Spanner.
  • PLACEMENT_NAME: il nome del posizionamento.
  • PARTITION_ID: l'identificatore univoco della partizione da associare al posizionamento.
  • READ_LEASE_REGION con una o più regioni in cui vuoi attivare il lease di lettura. Ad esempio, europe-west1, europe-west4.

Disabilitare le concessioni di lettura

La lettura del contratto di locazione è 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 del database Spanner.
  • INSTANCE_ID: l'identificatore 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 del database Spanner.
  • INSTANCE_ID: l'identificatore 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 intra-regionale. Contemporaneamente, la latenza di scrittura aumenta di un tempo di round trip 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 un numero leggermente inferiore di risorse di calcolo. 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