Replicação

Nesta página, descrevemos como os dados são replicados no Spanner, os diferentes tipos de réplicas do Spanner e seus papéis em leituras e gravações e os 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 recurso no sistema de arquivos subjacente em que é baseado. O Spanner grava mutações do banco de dados em arquivos nesse sistema de arquivos, e o sistema de arquivos se encarrega de replicar e recuperar os arquivos quando uma máquina ou um disco falha.

Embora o sistema de arquivos distribuídos subjacente em que o Spanner já foi criado já forneça replicação em nível de byte, o Spanner também replica dados para oferecer os benefícios adicionais de disponibilidade de dados e localidade geográfica. Em um nível alto, 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íncrona baseado em Paxos, em que as réplicas de votação recebem um voto em cada solicitação de gravação antes do commit da gravação. Essa propriedade da replicação síncrona globalmente oferece a capacidade de ler os dados mais atualizados de qualquer réplica de leitura/gravação do Spanner ou réplica somente leitura.

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 por chave primária. Todos os dados em uma divisão são armazenados fisicamente juntos na réplica, e o Spanner veicula cada réplica de uma zona de falha independente. Para mais informações, consulte Sobre 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. As réplicas líder são responsáveis por processar gravações. Qualquer réplica de leitura/gravação ou somente leitura pode atender a uma solicitação de leitura sem se comunicar com a líder. Em alguns casos, se uma leitura forte é solicitada, a líder normalmente será consultada para garantir que a réplica somente leitura tenha recebido todas as mutações recentes.

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 ainda pode exibir gravações mesmo que algumas das réplicas não estejam disponíveis, porque 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, os dados podem ficar geograficamente mais próximos dos usuários e serviços que precisam deles, o que agiliza o acesso.

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

  • Desenvolvimento mais fácil de aplicativos: como o Spanner está em conformidade com o 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 posterior, tornando o desenvolvimento de aplicativos e a manutenção subsequente mais rápidos e fáceis.

Tipos de réplica

O Spanner tem três tipos de réplicas: 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ância básicas são fixas. As configurações de instância regional de base usam apenas réplicas de leitura e gravação, enquanto as configurações de instâncias multirregionais de base usam uma combinação dos três tipos de réplica. É possível criar configurações de instância personalizadas e adicionar outras 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 propriedades deles:

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 usado em instâncias de região única.

Réplicas somente leitura

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

  • Mantenha uma cópia completa dos dados, que são replicados a partir de réplicas de leitura/gravação.
  • atendem a leituras;
  • Não participam da votação sobre a necessidade de fazer commit de gravações. Portanto, o local das réplicas somente leitura nunca contribui para a latência da gravação;
  • Se for a réplica mais próxima do aplicativo, a réplica somente leitura geralmente poderá exibir leituras desatualizadas sem precisar de um retorno à região líder padrão, supondo que a inatividade seja de pelo menos 15 segundos. Também é possível usar leituras direcionadas para rotear transações somente leitura e leituras únicas para um tipo de réplica ou região específica em uma configuração de instância multirregional. Para mais informações, consulte Leituras direcionadas.

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

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

  • não estão qualificadas para se tornarem líderes.

É 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 leituras desatualizadas de baixa latência. É possível adicionar locais listados em Região opcional como uma réplica somente leitura opcional. Se o local de réplica somente leitura escolhido não for exibido, solicite uma nova região de réplica somente leitura opcional. Não é possível alterar a topologia de replicação das configurações de instância base, que são fixas.

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

Quando você adiciona réplicas somente leitura, a réplica líder enfrenta mais carga de replicação, o que pode afetar o desempenho. Como prática recomendada, teste primeiro as cargas de trabalho de desempenho em instâncias de não produção na configuração da instância personalizada. Consulte o painel "Comparativo de mercado de latência e capacidade de processamento" para ver dados de latência mediana entre regiões. Por exemplo, se você criar uma configuração de instância personalizada com a configuração base multirregional eur6 e uma réplica opcional somente leitura em us-east1, a latência de leitura forte esperada para um cliente em us-east1 é de cerca de 100 milissegundos devido ao tempo de retorno para a região líder em europe-west4. Leituras desatualizadas com inatividade suficiente não afetam o ciclo de ida e volta e, portanto, são muito mais rápidas. Também é possível usar a métrica Latência por tipo de transação para visualizar dados de latência para transações de leitura/gravação e somente leitura.

Para mais instruções, consulte Criar uma configuração de instância personalizada.

Réplicas de testemunha

As réplicas testemunhas não são compatíveis com leituras, mas participam da votação sobre 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 somente em instâncias multirregionais;
  • Não mantenha uma cópia completa dos dados.
  • não atender a leituras.
  • votam se é necessário fazer o commit de gravações;
  • participam na eleição da líder, mas não estão qualificadas para se tornarem líderes.

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

Nesta seção, descrevemos o papel das réplicas nas gravações e leituras do Spanner. Isso é útil para entender por que o Spanner usa réplicas de testemunha em configurações multirregionais.

Em gravações

As solicitações de gravação do cliente são sempre processadas primeiro na réplica líder, mesmo que haja uma réplica não líder que esteja 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 multirregional e seu aplicativo cliente estiver localizado em uma região não líder, o Spanner usará o roteamento com reconhecimento de líder para rotear dinamicamente transações de leitura e gravação para 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. O commit da gravação é feito quando a maioria das réplicas da votação (ou "quórum de gravação") concorda sobre isso. 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. Saiba mais sobre esses modos de simultaneidade em 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 disponível somente leitura ou de leitura/gravação mais próxima que esteja capturada até o carimbo de data/hora da solicitação. Pode ser a réplica líder se ela for a mais próxima do cliente que emitiu a solicitação de leitura.