A página descreve as leituras direcionadas do Spanner e como usá-las.
As leituras direcionadas no Spanner oferecem a flexibilidade de rotear transações somente leitura e leituras únicas, a uma determinada tipo de réplica ou região em uma configuração de instância multirregional ou um tipo configuração regional com regiões somente leitura opcionais.
Vantagens
As leituras direcionadas oferecem os seguintes benefícios:
- Forneça mais controle sobre os workloads de balanceamento de carga em várias regiões para alcançar uma utilização de CPU mais uniforme e evitar o provisionamento excessivo de instâncias do Spanner.
- Ative o isolamento da carga de trabalho. É possível direcionar suas cargas de trabalho analíticas e as leituras de fluxos de alterações para determinadas Réplicas do Spanner para minimizar o impacto nas cargas de trabalho transacionais em execução no mesmo banco de dados do Spanner.
Operações de consulta com suporte
Consultar operações | As leituras direcionadas são compatíveis? |
---|---|
Leitura desatualizada | Sim |
Leitura forte | Sim |
Transação de leitura/gravação | Não |
As leituras direcionadas não são compatíveis com transações de leitura e gravação
e tipos de atualizações em massa de DML particionada. Isso
é porque as transações de leitura/gravação precisam ser processadas na região líder. Se
leituras direcionadas forem usadas em uma transação de leitura e gravação, a transação falhará com
um erro BAD_REQUEST
.
Limitações
As leituras direcionadas do Spanner têm as seguintes limitações:
- Só é possível usar leituras direcionadas em uma instância do Spanner que esteja em uma configuração de instância multirregional ou uma configuração regional personalizada com regiões somente leitura opcionais.
- Não é possível usar leituras direcionadas com solicitações de leitura/gravação porque as solicitações de gravação são sempre atendidas pela região líder.
- Não é possível usar leituras direcionadas no console do Google Cloud ou na Google Cloud CLI. Ela está disponível usando as APIs REST e RPC e as bibliotecas de cliente do Spanner.
- É possível especificar no máximo 10 réplicas em uma única leitura direcionada.
Antes de começar
Considere o seguinte antes de usar leituras direcionadas:
- O aplicativo pode gerar mais latência se você estiver roteando leituras para um réplica ou região diferente da mais próxima do aplicativo.
- É possível rotear o tráfego com base em:
- Nome da região (por exemplo,
us-central1
). - Tipo de réplica (valores possíveis:
READ_ONLY
eREAD_WRITE
).
- Nome da região (por exemplo,
- A opção de failover automático em leituras direcionadas é ativada por padrão. Quando a opção de failover automático
está ativada e todas as réplicas especificadas estão indisponíveis
ou com problemas, o Spanner encaminha solicitações para uma réplica fora da
lista
includeReplicas
. Se você desativar a opção de failover automático e as réplicas especificadas não estiverem disponíveis ou não estiverem íntegras, as leituras direcionadas serão falha.
Parâmetros de leitura direta
Se você estiver usando a API REST ou RPC para executar leituras direcionadas, será necessário definir
esses campos no parâmetro directedReadOptions
. Só é possível incluir um dos
includeReplicas
ou excludeReplicas
, não os dois.
includeReplicas
: contém um conjunto repetido dereplicaSelections
. Esta lista indica a ordem em que as leituras foram direcionadas para regiões ou réplicas específicas. precisam ser considerados. É possível especificar até 10includeReplicas
.replicaSelections
: consiste nolocation
ou na réplica detype
que veicula a solicitação de leitura direcionada. Se você usarincludeReplicas
, você precisa informar pelo menos um dos seguintes campos:location
: o local que atende à solicitação de leituras direcionadas. O local precisa ser uma das regiões na configuração multirregional do banco de dados. Se o local não for um dos regiões na configuração multirregional do seu banco de dados, as solicitações não serão roteadas como esperado. Em vez disso, eles são atendidos pela região mais próxima. Por exemplo, é possível direcionar leituras para o localus-central1
em um banco de dados na configuração da instância multirregionalnam6
.Também é possível especificar o parâmetro
location
com um literal de stringleader
ounon-leader
. Se você inserir o valorleader
, O Spanner direciona suas solicitações para réplica líder. Por outro lado, se você inserir o valornon-leader
, o Spanner vai atender à solicitação na réplica não líder mais próxima.type
: o tipo de réplica que atende à solicitação de leituras direcionadas. Os tipos possíveis incluemREAD_WRITE
eREAD_ONLY
.
autoFailoverDisabled
: por padrão, é definido comoFalse
, o que significa que quando o failover está ativado. Quando a opção de failover automático está ativada, e todos os réplicas especificadas não estiverem disponíveis ou não estiverem íntegras, o Spanner encaminha solicitações para uma réplica fora da lista deincludeReplicas
. Se você desativar a opção de failover automático e todas as réplicas especificadas estiverem indisponíveis ou com problemas, a solicitação de leituras direcionadas falhará. Valores possíveis incluirTRUE
para desativado eFALSE
para ativado.
excludeReplicas
: contém um conjunto repetido dereplicaSelections
que é excluído das solicitações de atendimento. O Spanner não faz o roteamento solicitações para as réplicas da lista.replicaSelections
: o local ou tipo de réplica excluído do envio da solicitação de leituras direcionadas. Se você usaexcludeReplicas
, você deve fornecer pelo menos um dos seguintes campos:location
: o local excluído da veiculação da solicitação de leituras direcionadas.type
: o tipo de réplica que é excluída da veiculação do direcionado lê a solicitação. Os tipos possíveis incluemREAD_WRITE
eREAD_ONLY
.
Para conferir um exemplo de como é um corpo de solicitação REST, clique na guia REST na seção Usar leituras direcionadas.
Usar leituras direcionadas
É possível usar as bibliotecas de cliente do Spanner e as APIs REST e RPC para realizar leituras direcionadas.
Bibliotecas de cliente
C++
C#
Go
Java
Node.js
PHP
Python
Ruby
REST
Você pode usar as seguintes APIs REST para realizar leituras direcionadas:
Por exemplo, para executar leituras direcionadas em us-central1
usando executeSQL
:
Para a sessão, digite:
projects/<VAR>PROJECT-ID</VAR>/instances/<VAR>INSTANCE-ID</VAR>/databases/<VAR>DATABASE-ID</VAR>/sessions/<VAR>SESSION-ID</VAR>
Substitua:
- PROJECT-ID: o ID do projeto;
- INSTANCE-ID: o ID da instância
- DATABASE-ID: o ID do banco de dados.
- SESSION-ID: o ID da sessão.
Você recebe o valor
SESSION-ID
quando cria uma sessão.
Para o Corpo de solicitação, use o seguinte:
{ "directedReadOptions": { "includeReplicas": { "replicaSelections": [ { "location": "us-central1", } ] } }, "sql": "SELECT SingerId, AlbumId, AlbumTitle FROM Albums" }
Clique em Executar. A resposta exibe os resultados da consulta.
RPC
É possível usar as seguintes APIs RPC para executar leituras direcionadas:
Monitoramento
O Spanner oferece uma métrica de latência para ajudar você a monitorar lê as atividades das instâncias. A métrica está disponível em Cloud Monitoring:
spanner.googleapis.com/api/read_request_latencies_by_serving_location
É possível filtrar essa métrica usando os campos /serving_location
ou /is_directed_read
. O campo /serving location
indica o local
do servidor do Spanner de onde a solicitação é enviada. O
campo /is_directed_read
indica se a opção de leituras direcionadas está
ativada.
Para uma lista completa das métricas disponíveis, consulte a lista de métricas do Spanner.
A seguir
- Saiba como realizar Leituras fora das transações.