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.
Benefícios
As leituras direcionadas oferecem os seguintes benefícios:
- Oferecem mais controle sobre as 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.
- Permitem o isolamento da carga de trabalho. É possível direcionar as cargas de trabalho de análise e as leituras de fluxos de alterações para réplicas específicas 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 compatíveis
| Operações de consulta | 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/gravação
e tipos de DML particionada de atualizações em massa. Isso ocorre porque as transações de leitura/gravação precisam ser processadas na região líder. Se as leituras direcionadas forem usadas em uma transação de leitura/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 ou 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 Google Cloud console do Google Cloud ou na Google Cloud CLI. Elas estão disponíveis usando REST e RPC APIs e as bibliotecas de cliente do Spanner.
- É possível especificar um máximo de 10 réplicas em uma única leitura direcionada.
Antes de começar
Considere o seguinte antes de usar leituras direcionadas:
- O aplicativo poderá gerar latência adicional se você estiver roteando leituras para uma 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_ONLYeREAD_WRITE).
- Nome da região (por exemplo,
- A opção de failover automático em leituras direcionadas está 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 não íntegras, o Spanner roteia 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 não íntegras, a solicitação de leituras direcionadas vai falhar.
Parâmetros de leituras direcionadas
Se você estiver usando a API REST ou RPC para realizar leituras direcionadas, defina esses campos no parâmetro directedReadOptions. Só é possível incluir um de includeReplicas ou excludeReplicas, não ambos.
includeReplicas: contém um conjunto repetido dereplicaSelections. Essa lista indica a ordem em que as leituras direcionadas para regiões ou tipos de réplica específicos devem ser consideradas. É possível especificar um máximo de 10includeReplicas.replicaSelections: consiste nolocationou na réplicatypeque atende à solicitação de leituras direcionadas. Se você usarincludeReplicas, forneça 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 birregional ou multirregional do banco de dados. Se o local não for uma das regiões na configuração birregional ou multirregional do banco de dados, as solicitações não serão roteadas conforme o esperado. Em vez disso, elas são atendidas pela região mais próxima. Por exemplo, é possível direcionar leituras para o localus-central1em um banco de dados na configuração de instância multirregionalnam6.Também é possível especificar o parâmetro
locationcom umleaderounon-leaderliteral de string. Se você inserir o valorleader, o Spanner direcionará suas solicitações para a réplica líder 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 leituras direcionadas. Os tipos possíveis incluemREAD_WRITEeREAD_ONLY.
autoFailoverDisabled: por padrão, esse valor é definido 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 não íntegras, o Spanner roteia 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 não íntegras, a solicitação de leituras direcionadas vai falhar. Os valores possíveis incluemTRUEpara desativado eFALSEpara ativado.
excludeReplicas: contém um conjunto repetido dereplicaSelectionsque é excluído do atendimento de solicitações. O Spanner não roteia solicitações para réplicas nessa lista.replicaSelections: o local ou tipo de réplica que é excluído do atendimento da solicitação de leituras direcionadas. Se você usarexcludeReplicas, forneça pelo menos um dos seguintes campos:location: o local que é excluído do atendimento da solicitação de leituras direcionadas.type: o tipo de réplica que é excluído do atendimento da solicitação de leituras direcionadas. Os tipos possíveis incluemREAD_WRITEeREAD_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
É possível usar as seguintes APIs REST para realizar leituras direcionadas:
Por exemplo, para realizar 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-IDao criar 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 realizar leituras direcionadas:
Monitoramento
O Spanner fornece uma métrica de latência para ajudar a monitorar as atividades de leituras direcionadas nas 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 é atendida. 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.