A página descreve e explica como usar as concessões de leitura do Spanner. As concessões de leitura ajudam as suas bases de dados a reduzir a latência de leitura em regiões não principais para transações que requerem consistência forte.
Por predefinição, quando o Spanner recebe um pedido de leitura forte numa região não principal, a réplica que serve a leitura contacta a região de leitura/escrita principal da instância. Este contacto confirma que os respetivos dados estão atualizados antes de processar o pedido. Este processo incorre num processo de ida e volta da rede entre a região que recebe o pedido e a região principal. Ao contrário da comunicação numa única região, a distância geográfica entre regiões adiciona latência adicional ao pedido.
A utilização de concessões de leitura do Spanner elimina a necessidade desta viagem de ida e volta. Quando define uma ou mais regiões de concessão de leitura para a sua base de dados, o Spanner concede o direito de publicar leituras localmente a uma ou mais regiões que não sejam a região principal, de leitura/escrita ou só de leitura. Isto permite que as regiões não principais apresentem diretamente leituras fortes sem comunicar com a região principal. A publicação de leituras fortes a partir de uma região não principal mais próxima do cliente reduz a latência entre regiões. Isto alcança a latência intrarregional para leituras fortes em instâncias de duas regiões ou várias regiões.
A ativação ou a desativação da funcionalidade de concessões de leitura numa região não requer tempo de inatividade. No entanto, as escritas têm uma latência mais elevada quando usa a funcionalidade, porque a ativação da concessão de leitura requer que o líder contacte as regiões de concessão de leitura quando serve escritas. Como efeito secundário, as escritas mantêm os bloqueios durante mais tempo, o que pode afetar as cargas de trabalho de escrita com elevada contenção. Para mais informações, consulte o artigo Quando usar concessões de leitura. A leitura de concessão é mais adequada para aplicações que estão dispostas a sacrificar o aumento da latência de escrita em troca de leituras fortes mais rápidas. Por exemplo, um sistema de controlo de acesso em que a carga de trabalho tem leituras frequentes, mas escritas raras.
Para saber como ativar concessões de leitura numa região não principal, consulte o artigo Use read leases (Use concessões de leitura).
Quando usar concessões de leitura
Ative as concessões de leitura se a sua aplicação e carga de trabalho cumprirem os seguintes critérios:
- A latência baixa para leituras fortes é mais importante do que a latência baixa para escritas.
- A sua carga de trabalho pode tolerar durações de bloqueio de escrita mais longas ou tem uma baixa contenção de escrita.
A ativação de concessões de leitura aumenta a latência de escrita, o que faz com que os bloqueios de escrita sejam mantidos durante mais tempo. Se a sua carga de trabalho de escrita já tiver uma elevada contenção de escrita, esta funcionalidade pode piorar a latência de escrita e reduzir o débito.
Quando existem gravações simultâneas, a escolha entre usar as APIs de consulta ou as APIs de leitura afeta o desempenho de uma base de dados que usa regiões de concessão de leitura.
A execução de declarações SQL no Spanner envolve a leitura de dados de várias linhas ou intervalos. Quando usar APIs de consulta com concessões de leitura ativadas, as leituras têm de aguardar as escritas simultâneas para garantir a correção. Consequentemente, pode observar uma latência mais elevada, especialmente quando existe uma carga de gravação maior. As APIs de leitura são geralmente mais tolerantes a escritas simultâneas do que as APIs de consulta. Se usar frequentemente APIs de consulta com cargas de gravação elevadas, pondere reduzir a frequência de gravações ou usar leituras desatualizadas.
As APIs de leitura estão otimizadas para ler linhas ou intervalos de dados específicos. Só têm de esperar por escritas que modifiquem os dados exatos que estão a tentar ler. Se estiver a usar APIs de leitura, apenas as escritas nos mesmos intervalos de dados exatos bloqueiam as suas leituras. Como resultado, quando existem escritas simultâneas e usa regiões de concessão de leitura, as leituras fortes do Spanner têm um melhor desempenho e uma latência inferior.
Para saber mais sobre a monitorização da latência, consulte o artigo Monitorizar.
Exemplo de utilização
Considere uma aplicação implementada globalmente que faz gravações nos EUA e tem clientes nos EUA, na Europa e na Ásia. Pode configurar uma instância do Spanner de várias regiões, como nam-eur-asia1
, com uma região principal em us-central1
e réplicas só de leitura em europe-west1
e asia-east1
.
Quando ativa a concessão de leitura nas regiões europe-west1
e asia-east1
só de leitura, o Spanner disponibiliza leituras fortes da Europa e da Ásia a partir dessas réplicas locais, o que reduz a latência. A contrapartida é um aumento na latência de escrita para todas as escritas. O aumento da latência é equivalente ao tempo de resposta
entre a região principal us-central1
e as regiões de concessão de leitura mais distantes.
Limitações
As concessões de leitura do Spanner têm as seguintes limitações:
- Não pode ativar a concessão de leitura numa região de testemunho.
- Não pode usar a concessão de leitura com a geopartição.
- As concessões de leitura não reduzem a latência das leituras que fazem parte de uma transação de leitura/escrita. Mesmo que uma transação de leitura/escrita contenha apenas leituras, essas leituras continuam a ser publicadas a partir da região principal.
- Se mover a sua instância para uma configuração de instância diferente, as definições de concessão de leitura não são preservadas. Tem de reativar a concessão de leitura na base de dados após a conclusão da mudança.
Use concessões de leitura
Tem de ativar as concessões de leitura antes de a poder usar.
Controlo de acesso com a IAM
Para definir regiões de concessão de leitura, um utilizador precisa da autorização do IAM spanner.databases.create
ou spanner.databases.updateDdl
. A função de administrador da base de dados (roles/spanner.databaseAdmin
) predefinida
inclui estas autorizações. Para mais informações, consulte a
vista geral do IAM para o Spanner.
Para obter informações sobre como conceder autorizações, consulte o artigo Aplique autorizações de IAM.
Antes de começar para utilizadores da base de dados PostgreSQL
Se quiser usar a concessão de leitura numa base de dados PostgreSQL, faça uma das seguintes alterações de configuração à sua base de dados. Caso contrário, as leituras continuam a ser servidas pela região principal, mesmo que tenha definido regiões de concessão de leitura.
Se usar apenas transações de leitura, configure a sua ligação ao PostgreSQL de modo que o estado predefinido de cada nova transação na base de dados seja definido como só de leitura. Para o fazer, defina a opção
default_transaction_read_only
comotrue
.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'
Substitua o seguinte:
USER_ID com o identificador exclusivo do utilizador.
PASSWORD com a sua palavra-passe.
DATABASE_ID com o identificador exclusivo da sua base de dados.
Ative as concessões de leitura
Para ativar as concessões de leitura quando cria uma nova base de dados, defina a opção read_lease_regions
na declaração DDL ALTER DATABASE
(GoogleSQL,
PostgreSQL)
:
Consola
Aceda à página Instâncias na Google Cloud consola.
Selecione a instância na qual quer ativar a concessão de leitura.
Na página Vista geral da instância apresentada, clique em Criar base de dados.
Para o nome da base de dados, introduza um nome.
Selecione um dialeto da base de dados.
Clique em Criar.
A Google Cloud consola apresenta a página Vista geral da base de dados que criou.
No menu de navegação, clique em Spanner Studio.
Na página Spanner Studio, clique em
Novo separador ou use o separador do editor vazio.Introduza a seguinte declaração
ALTER DATABASE
DDL.GoogleSQL
ALTER DATABASE DATABASE_ID SET OPTIONS (read_lease_regions = 'READ_LEASE_REGION');
Substitua o seguinte:
DATABASE_ID com o identificador exclusivo da sua base de dados.
READ_LEASE_REGION com a região onde quer ativar a concessão de leitura. Por exemplo,
europe-west1
. Pode ativar a concessão de leitura para várias regiões. Separe cada região com uma vírgula.
PostgreSQL
ALTER DATABASE DATABASE_ID SET "spanner.read_lease_regions" = 'READ_LEASE_REGION';
Substitua o seguinte:
DATABASE_ID com o identificador exclusivo da sua base de dados.
READ_LEASE_REGION com a região onde quer ativar a concessão de leitura. Por exemplo,
europe-west1
. Pode ativar a concessão de leitura para várias regiões. Separe cada região com uma vírgula.
Clique em Executar.
gcloud
Para definir a opção de base de dados read_lease_regions
quando criar a base de dados,
use 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');"
Substitua o seguinte:
DATABASE_ID
: o identificador permanente da sua base de dados do Spanner.INSTANCE_ID
: o identificador permanente da sua instância do Spanner.READ_LEASE_REGION
: a região onde quer ativar o aluguer de leitura. Por exemplo,europe-west1
. Pode ativar a concessão de leitura para várias regiões. Separe cada região com uma vírgula.
PostgreSQL
gcloud spanner databases create DATABASE_ID \
--instance=INSTANCE_ID \
--ddl="ALTER DATABASE DATABASE_ID \
SET "spanner.read_lease_regions" = 'READ_LEASE_REGION';"
Substitua o seguinte:
DATABASE_ID
: o identificador permanente da sua base de dados do Spanner.INSTANCE_ID
: o identificador permanente da sua instância do Spanner.READ_LEASE_REGION
: a região onde quer ativar o aluguer de leitura. Por exemplo,europe-west1
. Pode ativar a concessão de leitura para várias regiões. Separe cada região com uma vírgula.
Para ativar a concessão de leitura quando atualiza uma base de dados existente, defina a opção read_lease_regions
na declaração DDL ALTER DATABASE
(GoogleSQL,
PostgreSQL):
Consola
Aceda à página Instâncias na Google Cloud consola.
Selecione a instância na qual quer ativar a concessão de leitura.
Selecione a base de dados na qual quer ativar a concessão de leitura.
No menu de navegação, clique em Spanner Studio.
Na página Spanner Studio, clique em
Novo separador ou use o separador do editor vazio.Introduza a seguinte declaração
ALTER DATABASE
DDL.GoogleSQL
ALTER DATABASE DATABASE_ID \ SET OPTIONS (read_lease_regions = 'READ_LEASE_REGION');
Substitua o seguinte:
DATABASE_ID com o identificador exclusivo da sua base de dados.
READ_LEASE_REGION com a região onde quer ativar a concessão de leitura. Por exemplo,
europe-west1
. Pode ativar a concessão de leitura para várias regiões. Separe cada região com uma vírgula.
PostgreSQL
ALTER DATABASE DATABASE_ID \ SET "spanner.read_lease_regions" = 'READ_LEASE_REGION';
Substitua o seguinte:
DATABASE_ID com o identificador exclusivo da sua base de dados.
READ_LEASE_REGION com a região onde quer ativar a concessão de leitura. Por exemplo,
europe-west1
. Pode ativar a concessão de leitura para várias regiões. Separe cada região com uma vírgula.
Clique em Executar.
gcloud
Para definir a opção de base de dados read_lease_regions
, use
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');"
Substitua o seguinte:
DATABASE_ID
: o identificador permanente da sua base de dados do Spanner.INSTANCE_ID
: o identificador permanente da sua instância do Spanner.- READ_LEASE_REGION com a região onde quer
ativar a concessão de leitura. Por exemplo,
europe-west1
. Pode ativar a concessão de leitura para várias regiões. Separe cada região com uma vírgula.
PostgreSQL
gcloud spanner databases ddl update DATABASE_ID \
--instance=INSTANCE_ID \
--ddl="ALTER DATABASE DATABASE_ID \
SET "spanner.read_lease_regions" = 'READ_LEASE_REGION';"
Substitua o seguinte:
DATABASE_ID
: o identificador permanente da sua base de dados do Spanner.INSTANCE_ID
: o identificador permanente da sua instância do Spanner.- READ_LEASE_REGION com a região onde quer
ativar a concessão de leitura. Por exemplo,
europe-west1
. Pode ativar a concessão de leitura para várias regiões. Separe cada região com uma vírgula.
Desative as concessões de leitura
A concessão de leitura está desativada por predefinição.
Para atualizar e desativar a funcionalidade numa base de dados existente, defina a opção read_lease_regions
na declaração DDL ALTER DATABASE
(GoogleSQL,
PostgreSQL)
como NULL
:
Consola
Aceda à página Instâncias na Google Cloud consola.
Selecione a instância na qual quer desativar a concessão de leitura.
Selecione a base de dados na qual quer desativar a concessão de leitura.
No menu de navegação, clique em Spanner Studio.
Na página Spanner Studio, clique em
Novo separador ou use o separador do editor vazio.Introduza a seguinte declaração
ALTER DATABASE
DDL.GoogleSQL
ALTER DATABASE DATABASE_ID SET OPTIONS (read_lease_regions = NULL);
Substitua DATABASE_ID pelo identificador exclusivo da sua base de dados.
PostgreSQL
ALTER DATABASE DATABASE_ID SET "spanner.read_lease_regions" = NULL;
Substitua DATABASE_ID pelo identificador exclusivo da sua base de dados.
Clique em Executar.
gcloud
Para definir a opção de base de dados read_lease_regions
, use
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);"
Substitua o seguinte:
DATABASE_ID
: o identificador permanente da sua base de dados do Spanner.INSTANCE_ID
: o identificador permanente da sua instância do Spanner.
PostgreSQL
gcloud spanner databases ddl update DATABASE_ID \
--instance=INSTANCE_ID \
--ddl="ALTER DATABASE DATABASE_ID SET "spanner.read_lease_regions" = NULL;"
Substitua o seguinte:
DATABASE_ID
: o identificador permanente da sua base de dados do Spanner.INSTANCE_ID
: o identificador permanente da sua instância do Spanner.
Práticas recomendadas
Para maximizar as vantagens da utilização desta funcionalidade, use sessões multiplexadas, que lhe permitem criar um grande número de pedidos simultâneos numa única sessão.
Monitor
Depois de ativar a concessão de leitura, é importante monitorizar a latência para confirmar que a funcionalidade alcança o efeito pretendido. Para o fazer, identifique a região principal e as regiões com concessão de leitura ativada consultando a tabela do esquema de informações data_options
(GoogleSQL, PostgreSQL) ou a sua base de dados. As regiões com concessão de leitura ativada esperam que as leituras fortes tenham uma latência intrarregional. Simultaneamente, a latência de escrita aumenta entre a região principal e a região mais distante com a concessão de leitura ativada.
Também pode usar a seguinte métrica de latência do Spanner para ajudar a monitorizar as latências dos pedidos de leitura nas suas instâncias:
spanner.googleapis.com/api/read_request_latencies_by_serving_location
Pode filtrar esta métrica através do campo /serving_location
. O campo /serving location
indica a localização do servidor do Spanner a partir do qual o pedido é publicado.
Para ver uma lista completa das métricas disponíveis, consulte a lista de métricas do Spanner.
Considerações sobre o custo
As leituras fortes servidas a partir de regiões com a funcionalidade de concessão de leitura ativada usam ligeiramente menos recursos de computação. Por outro lado, as gravações para bases de dados com a funcionalidade de concessão de leitura ativada usam ligeiramente mais recursos de computação. Para mais informações, consulte os preços da capacidade de computação do Spanner.
A funcionalidade não afeta outros componentes de preços, como o armazenamento e a rede.
O que se segue?
- Saiba mais acerca da replicação do Spanner.
- Saiba mais sobre as leituras fora das transações.