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 para um tipo ou região de réplica específica em uma configuração de instância birregional ou multirregional ou uma configuração regional personalizada com regiões somente leitura opcionais.
Vantagens
As leituras direcionadas oferecem os seguintes benefícios:
- Oferecer mais controle sobre cargas de trabalho de balanceamento de carga em várias regiões para alcançar uma utilização mais uniforme da CPU e evitar o provisionamento excessivo de instâncias do Spanner.
- Ative o isolamento da carga de trabalho. É possível direcionar suas cargas de trabalho de análise e leituras de streams de mudanças para réplicas específicas do Spanner e minimizar o impacto nas cargas de trabalho transacionais executadas no mesmo banco de dados do Spanner.
Operações de consulta compatíveis
Operações de consulta | A leitura direcionada é compatível? |
---|---|
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 DML particionada para atualizações em massa. Isso acontece porque as transações de leitura e 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 vai 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 birregional, multirregional ou 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 Google Cloud ou na Google Cloud CLI. Ele 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 uma réplica ou região diferente da mais próxima a ele.
- É possível encaminhar 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 integridade comprometida, o Spanner encaminha as solicitações para uma réplica fora da
lista
includeReplicas
. Se você desativar a opção de failover automático e todas as réplicas especificadas estiverem indisponíveis ou em estado ruim, a solicitação de leitura direcionada vai falhar.
Parâmetros de leitura direcionada
Se você estiver usando a API REST ou RPC para fazer leituras direcionadas, defina
esses campos no parâmetro directedReadOptions
. É possível incluir apenas um dos seguintes: includeReplicas
ou excludeReplicas
.
includeReplicas
: contém um conjunto repetido dereplicaSelections
. Essa lista indica a ordem em que as leituras direcionadas a regiões ou tipos de réplicas específicos devem ser consideradas. É possível especificar no máximo 10includeReplicas
.replicaSelections
: consiste nolocation
ou na réplicatype
que atende à solicitação de leitura direcionada. Se você usarincludeReplicas
, informe pelo menos um dos seguintes campos:location
: o local que atende à solicitação de leitura direcionada. O local precisa ser uma das regiões na configuração birregional ou multirregional do banco de dados. Se a localização não for uma das regiões na configuração birregional ou multirregional do banco de dados, as solicitações não serão encaminhadas como esperado. Em vez disso, elas são veiculadas pela região mais próxima. Por exemplo, é possível direcionar leituras para o localus-central1
em um banco de dados na configuração de 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 vai direcionar suas solicitações para a réplica principal do banco de dados. 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 leitura direcionada. Os tipos possíveis incluemREAD_WRITE
eREAD_ONLY
.
autoFailoverDisabled
: por padrão, essa opção é definida comoFalse
, o que significa que o failover automático está ativado. Quando a opção de failover automático está ativada e todas as réplicas especificadas estão indisponíveis ou em estado ruim, o Spanner encaminha as solicitações para uma réplica fora da listaincludeReplicas
. Se você desativar a opção de failover automático e todas as réplicas especificadas estiverem indisponíveis ou em mau estado, a solicitação de leitura direcionada vai falhar. Os valores possíveis incluemTRUE
para desativado eFALSE
para ativado.
excludeReplicas
: contém um conjunto repetido dereplicaSelections
que é excluído das solicitações de veiculação. O Spanner não roteia solicitações para réplicas nessa lista.replicaSelections
: o local ou tipo de réplica excluído do atendimento à solicitação de leituras direcionadas. Se você usarexcludeReplicas
, é necessário fornecer pelo menos um dos seguintes campos:location
: o local excluído do atendimento à solicitação de leituras direcionadas.type
: o tipo de réplica excluído do atendimento à solicitação de leituras direcionadas. Os tipos possíveis incluemREAD_WRITE
eREAD_ONLY
.
Para ver 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 fazer leituras direcionadas.
Bibliotecas de cliente
C++
C#
Go
Java
Node.js
PHP
Python
Ruby
REST
Você pode usar as seguintes APIs REST para fazer leituras direcionadas:
Por exemplo, para fazer 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
Você pode usar as seguintes APIs RPC para fazer leituras direcionadas:
Monitoramento
O Spanner fornece uma métrica de latência para ajudar você a monitorar as atividades de leitura direcionada nas suas instâncias. A métrica está disponível no 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 em que a solicitação é veiculada. 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.