Replicação

Nesta página, descrevemos como os dados são replicados no Spanner, os diferentes tipos de réplicas do Spanner e as funções deles em leituras e gravações, além dos benefícios da replicação.

Visão geral

O Spanner replica automaticamente no nível de bytes. Conforme descrito em O ciclo de leituras e gravações do Spanner, ele aproveita esse no sistema de arquivos em que ele foi criado. O Spanner grava mutações do banco de dados em arquivos nesse sistema de arquivos, e o sistema de arquivos cuida da replicação e recuperação dos arquivos quando uma máquina ou disco falha.

Mesmo que o sistema de arquivos distribuído subjacente que o Spanner já fornece replicação no nível de bytes, o Spanner também replica dados para fornecer os benefícios adicionais de disponibilidade de dados e localidade geográfica. De modo geral, todos os dados no Spanner são organizados em linhas. O Spanner cria várias cópias, ou réplicas, dessas linhas e as armazena em diferentes áreas geográficas. O Spanner usa um esquema de replicação síncrono baseado em Paxos, em que as réplicas de votação recebem um voto em cada solicitação de gravação antes que a gravação seja confirmada. Essa propriedade da replicação globalmente síncrona permite ler os dados mais atualizados de qualquer réplica de leitura/gravação ou somente leitura do Spanner.

O Spanner cria réplicas de cada divisão do banco de dados. Uma divisão contém um intervalo de linhas contíguas, em que as linhas são ordenadas pela chave primária. Todos os dados em uma divisão são armazenados fisicamente na réplica e O Spanner exibe cada réplica de uma falha independente zona. Para mais informações, consulte a Visão geral dos esquemas.

Um conjunto de divisões é armazenado e replicado usando o Paxos. Dentro de cada conjunto de réplicas Paxos, uma réplica é eleita para atuar como líder. Réplicas líderes processam gravações, enquanto réplicas de leitura/gravação ou somente leitura podem atender a uma sem se comunicar com o líder. Se uma leitura forte for solicitada, o líder normalmente será consultado para garantir que a réplica somente leitura tenha recebido todas as mutações recentes. Para monitorar a taxa de mudança e a quantidade de dados replicada da réplica líder para as réplicas de várias regiões na configuração da instância, consulte Monitorar a replicação de dados.

Benefícios da replicação do Spanner

Os benefícios da replicação do Spanner incluem:

  • Disponibilidade dos dados: ter mais cópias de seus dados os torna mais disponíveis para clientes que farão a leitura deles. Além disso, o Spanner pode ainda disponibilizam gravações mesmo que algumas réplicas não estejam disponíveis, apenas a maioria das réplicas de votação é necessária para confirmar uma gravação.

  • Localidade geográfica: com a capacidade de colocar dados em diferentes regiões e continentes com o Spanner, esses dados podem ficar geograficamente mais próximos e, portanto, mais rápidos para os usuários e serviços que precisam deles.

  • Experiência de banco de dados único: o Spanner pode fornecer uma com um único banco de dados devido à replicação síncrona e consistência forte global.

  • Desenvolvimento mais fácil de aplicativos: como o Spanner é compatível com ACID e oferece consistência forte global, os desenvolvedores que trabalham com o Spanner não precisam adicionar mais lógica aos aplicativos para lidar com a consistência eventual. Isso facilita e acelera o desenvolvimento e a manutenção subsequente dos aplicativos.

Tipos de réplica

O Spanner tem três tipos de réplicas: de leitura/gravação, réplicas somente leitura e réplicas testemunha. As regiões e as topologias de replicação que formam as configurações de instâncias básicas são fixas:

É possível criar configurações de instância personalizadas e adicionar mais réplicas somente leitura para configurações de instâncias regionais e multirregionais.

A tabela a seguir resume os tipos de réplicas do Spanner e as respectivas propriedades:

Tipo de réplica Pode votar Pode se tornar líder Pode atender leituras É possível configurar a réplica manualmente
Leitura/gravação sim sim sim não
Somente leitura não não sim sim*
Testemunha sim não não não

* Para mais informações, consulte como criar uma instância com uma configuração de instância personalizada.

Réplicas de leitura/gravação

As réplicas de leitura/gravação permitem leituras e gravações. Elas:

  • mantêm uma cópia completa dos dados;
  • atendem a leituras;
  • podem votar sobre a necessidade de fazer o commit de uma gravação;
  • participam de uma eleição de liderança;
  • estão qualificadas para se tornarem líderes;
  • são o único tipo de réplica usado em instâncias regionais.

Réplicas somente leitura

As réplicas somente leitura aceitam apenas leituras, mas não gravações. Essas réplicas não votam para líderes nem fazem a confirmação de gravações. Elas permitem que você dimensione a capacidade de leitura sem aumentar o tamanho do quórum necessário para gravações. Réplicas somente leitura:

  • Manter uma cópia completa dos dados, que são replicados pelo líder réplica de leitura/gravação.
  • não participam na votação sobre a confirmação de gravações. Portanto, o local das réplicas somente leitura nunca contribui para a latência da gravação;
  • não estão qualificadas para se tornarem líderes;
  • atendem a leituras;
  • Se ela for a réplica mais próxima do seu aplicativo, a réplica somente leitura poderá normalmente atendem a leituras desatualizadas sem a necessidade de uma ida e volta à região líder supondo que a inatividade seja de pelo menos 15 segundos. Também é possível usar leituras direcionadas para encaminhar transações somente leitura e leituras únicas para um tipo de réplica específico ou uma região em uma configuração de instância multirregional. Para mais informações, consulte Leituras direcionadas.

    Leituras fortes podem exigir uma ida e uma volta à réplica líder. A ida e volta é apenas para negociar o carimbo de data/hora, e não enviar os dados reais do líder. A negociação do carimbo de data/hora é uma operação eficiente de CPU no líder, e, normalmente, os dados já estão a caminho. Essa comunicação é tratada automaticamente pelo sistema.

    Para mais informações sobre leituras antigas e fortes, consulte a seção de leituras.

Réplicas somente leitura opcionais

É possível criar uma configuração de instância regional ou multirregional personalizada. e adicionar réplicas somente leitura opcionais para escalonar leituras e oferecer suporte a baixas latências lê. É possível adicionar locais listados em Região opcional como uma réplica somente leitura opcional. Se o local da réplica de leitura escolhido não aparecer, solicite uma nova região de réplica somente leitura opcional.

Todas as réplicas somente leitura opcionais estão sujeitas à custos de capacidade de computação, armazenamento e replicação. Além disso, adicionar réplicas somente leitura a uma configuração de instância personalizada não muda os SLAs do Spanner da configuração da instância. Se você optar por adicionar uma réplica somente leitura a um que esteja em um continente diferente da região líder, recomendamos adicionando no mínimo duas réplicas somente leitura. Isso ajuda a manter a latência de leitura baixa no caso de uma das réplicas somente leitura ficar indisponível.

Como prática recomendada, teste as cargas de trabalho de desempenho em instâncias de não produção na configuração de instância personalizada. Consulte o painel de comparativos de mercado de latência e throughput entre regiões para conferir dados de latência mediana entre regiões. Por exemplo, se você criar um de instância com a configuração base multirregional eur6 e uma réplica somente leitura opcional em us-east1, a forte latência de leitura esperada para um em us-east1 é de cerca de 100 milissegundos devido ao tempo de retorno até o região líder do mercado em europe-west4. Leituras desatualizadas com inatividade suficiente não incorrer em viagens de ida e volta e, portanto, são muito mais rápidas. Você também pode usar os insights de bloqueio e de transação para identificar transações que levam a altas latências.

Para instruções sobre como adicionar réplicas opcionais somente leitura, consulte Criar uma configuração de instância personalizada.

Réplicas testemunha

As réplicas testemunhas não são compatíveis com leituras, mas participam da votação sobre a necessidade de fazer a confirmação das gravações. Essas réplicas facilitam o recebimento de quóruns para gravações sem os recursos de armazenamento e computação exigidos pelas réplicas de leitura/gravação para armazenar uma cópia completa dos dados e atender leituras. Réplicas testemunha:

  • São usadas em instâncias birregionais e multirregionais.
  • Não mantenha uma cópia completa dos dados.
  • não atendem a leituras;
  • votam se é necessário fazer o commit de gravações;
  • participam da eleição do líder, mas não estão qualificadas para se tornarem uma réplica de líder.

O papel das réplicas em gravações e leituras

Esta seção descreve o papel das réplicas nas gravações e leituras do Spanner, o que é útil para entender por que o Spanner usa réplicas de testemunha em configurações de região dupla e multirregional.

Em gravações

As solicitações de gravação de clientes sempre são processadas na réplica líder primeiro, mesmo que haja uma réplica não líder mais próxima do cliente ou se a réplica líder estiver geograficamente distante do cliente. Se você usar uma configuração de instância de duas ou várias regiões e o aplicativo cliente estiver localizado em uma região que não é líder, o Cloud Spanner vai usar o roteamento com reconhecimento de líder para encaminhar transações de leitura e gravação dinamicamente e reduzir a latência no banco de dados. Para mais informações, consulte Roteamento com reconhecimento de líder.

A réplica líder registra a gravação recebida e a encaminha, em paralelo, para as outras réplicas que estão qualificadas para votar naquela gravação. Cada réplica qualificada completa a respectiva gravação e, em seguida, responde de volta à líder com uma votação sobre a necessidade de fazer o commit da gravação. A gravação é confirmada quando a maioria da votação as réplicas (ou quórum de gravação) concordam em confirmar a gravação. Em segundo plano, todas as réplicas restantes (não testemunhas) registram a gravação. Se uma réplica de leitura/gravação ou somente leitura se atrasar no registro das gravações, ela poderá solicitar os dados ausentes de outra réplica que tenha uma cópia completa e atualizada dos dados.

Em leituras

As solicitações de leitura pelo cliente podem ser executadas na réplica líder ou exigir a comunicação com ela, dependendo do modo de simultaneidade da solicitação.

  • As leituras que fazem parte de uma transação de leitura e gravação são atendidas pela réplica líder, já que ela mantém os bloqueios exigidos para impor a capacidade de serialização.

  • Os métodos de leitura única (uma leitura fora do contexto de uma transação) e as leituras em transações somente leitura podem exigir a comunicação com a líder, dependendo do modo de simultaneidade da leitura. Para mais informações sobre os modos de simultaneidade, consulte Tipos de leitura.

    • As solicitações de leitura forte podem acessar qualquer réplica de leitura e gravação ou somente leitura. Se a solicitação acessar uma réplica não líder, ela precisará se comunicar com a líder para executar a leitura.

    • As solicitações de leitura desatualizadas acessam a réplica de leitura/gravação ou somente leitura mais próxima disponível com o mesmo carimbo de data/hora da solicitação. Isso pode acontecer com a réplica líder se ela for a mais próxima do cliente que emitiu a solicitação de leitura.

Monitorar a replicação de dados

É possível monitorar a taxa de mudança e a quantidade de dados replicados da réplica líder para as réplicas entre regiões na configuração da instância. A taxa de mudança é em bytes por segundo, e a quantidade de dados é em bytes. Para fazer isso, use a métrica de monitoramento Bytes replicados entre regiões (instance/cross_region_replicated_bytes_count).

Para conferir essa métrica no console do Google Cloud, siga estas etapas:

  1. No Console do Google Cloud, acesse o Monitoring:

    Acessar Monitoring

  2. No menu de navegação, selecione Metrics Explorer.

  3. No campo Métrica, clique no menu suspenso Selecionar uma métrica.

  4. No campo Filtrar por nome do recurso ou da métrica, selecione Instância do Cloud Spanner > Instância > Bytes replicados entre regiões e clique em Aplicar.

    Essa métrica só estará disponível em Métricas ativas se houver atividade de replicação da região na instância. Caso contrário, aparecerá em Métricas inativas. Por padrão, a interface filtra e mostra apenas as métricas ativas. Desmarque a marca de seleção Ativo para visualizar os itens ativos e inativos métricas.

    O gráfico mostra a taxa de mudança (em bytes por segundo) de dados replicados em todas as instâncias do Spanner no período especificado.

  5. Opcional: para mostrar a quantidade de dados (em bytes) replicados em vez de a taxa de mudança:

    1. No campo Agregação, clique no menu suspenso Soma e selecione Configurar alinhador.
    2. No campo Função de alinhamento, clique no menu suspenso Taxa e selecione Delta.
    3. Selecione Tabela ou Ambas em vez de "Gráfico".

      A tabela mostra a quantidade de dados (em bytes) que foram replicados no período especificado.

  6. Opcional: para conferir o uso de uma instância ou um atributo específico, faça o seguinte:

    1. Use o campo Filtro para adicionar filtros, como um ID de instância, um banco de dados ID, região de origem, região de destino ou uma tag.
    2. Clique em Adicionar filtro para incluir vários filtros.

Para ver uma lista completa de métricas do Google Cloud, consulte Métricas do Google Cloud.

A seguir