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 coerente nelle regioni di lettura/scrittura o di sola lettura a scapito di una maggiore latenza di scrittura.
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 a queste regioni il diritto di pubblicare letture coerenti a livello locale. In questo modo, le regioni non leader possono pubblicare direttamente letture coerenti 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 intra-regionale per le letture coerenti nelle istanze a due o più regioni. Quando i lease di lettura sono attivi, 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 alla 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, consulta 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 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.
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 utilizzare il lease di lettura con il partizionamento geografico.
- 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 intraregionale per le letture all'interno delle transazioni di lettura/scrittura, devi utilizzare il livello di isolamento di lettura ripetibile e disattivare il routing leader-aware 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.
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
sutrue
.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 tua scrittura, anche le letture successive devono essere eseguite 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
Vai alla pagina Istanze nella console Google Cloud .
Seleziona l'istanza in cui vuoi attivare il lease di lettura.
Nella pagina Panoramica dell'istanza che si apre, fai clic su Crea database.
Inserisci un nome per il database.
Seleziona un dialetto del database.
Fai clic su Crea.
La console Google Cloud mostra la pagina Panoramica del database che hai creato.
Nel menu di navigazione, fai clic su Spanner Studio.
Nella pagina Spanner Studio, fai clic su
Nuova scheda o utilizza la scheda dell'editor vuota.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.
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
Vai alla pagina Istanze nella console Google Cloud .
Seleziona l'istanza in cui vuoi attivare il lease di lettura.
Seleziona il database in cui vuoi attivare il lease di lettura.
Nel menu di navigazione, fai clic su Spanner Studio.
Nella pagina Spanner Studio, fai clic su
Nuova scheda o utilizza la scheda dell'editor vuota.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.
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 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
Vai alla pagina Istanze nella console Google Cloud .
Seleziona l'istanza in cui vuoi disattivare il lease di lettura.
Seleziona il database in cui vuoi disattivare il lease di lettura.
Nel menu di navigazione, fai clic su Spanner Studio.
Nella pagina Spanner Studio, fai clic su
Nuova scheda o utilizza la scheda dell'editor vuota.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.
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 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 computing. 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
- Scopri di più sulla replica di Spanner.
- Scopri di più sulle letture al di fuori delle transazioni.