Opções de roteamento

Ao enviar solicitações de um aplicativo para o Bigtable , você usa um perfil de app que informa ao Bigtable como lidar com as solicitações. Um perfil de app especifica a política de roteamento das solicitações. Para instâncias que usam replicação, a política de roteamento controla quais clusters recebem as solicitações e como os failovers são processados.

Neste documento, descrevemos as políticas de roteamento disponíveis para um perfil de app padrão.

As políticas de roteamento são especialmente importantes para casos de uso de isolamento de carga de trabalho, quando não é possível usar o Data Boost (prévia). É possível configurá-las em conjunto com as prioridades de solicitação.

As políticas de roteamento não afetam a replicação, mas você precisa estar familiarizado com como a replicação do Bigtable funciona antes de ler esta página. Leia também sobre Failovers.

Roteamento de cluster único

Uma política de roteamento de cluster único encaminha todas as solicitações para um cluster na instância. Caso esse cluster fique indisponível, será preciso fazer failover manualmente para outro cluster.

Essa é a única política de roteamento que permite ativar transações de linha única.

Uma instância replicada normalmente fornece consistência eventual. No entanto, é possível atingir uma consistência de leitura de gravações para uma carga de trabalho em uma instância replicada se você configurar um perfil de aplicativo para que ela use o roteamento de cluster único para enviar solicitações de leitura e gravação para o mesmo cluster. É possível rotear o tráfego de cargas de trabalho adicionais na instância replicada para outros clusters na instância, dependendo dos requisitos da carga de trabalho.

Roteamento de vários clusters

Uma política de roteamento de vários clusters encaminha as solicitações enviadas para uma instância para a região mais próxima em que a instância tem um cluster. Se o cluster ficar indisponível, o tráfego realizará automaticamente o failover para o cluster disponível mais próximo.

Essa configuração oferece consistência posterior. Não é possível ativar transações de linha única com roteamento de vários clusters porque elas podem causar conflitos de dados quando você usa esse recurso. de dois minutos. Para mais detalhes, consulte Transações de linha única.

Use o roteamento de vários clusters se quiser alta disponibilidade (HA, na sigla em inglês). Para ver as configurações de instância recomendadas e mais detalhes, consulte Criar alta disponibilidade (HA, na sigla em inglês).

Os dois tipos de roteamento de vários clusters são qualquer cluster e grupo de clusters.

Qualquer roteamento de cluster

Qualquer roteamento de cluster disponibiliza todos os clusters na instância para receber solicitações e para failover.

Roteamento do grupo de clusters

Para excluir um ou mais clusters de uma instância de um possível failover, use o roteamento do grupo de clusters. Essa forma de roteamento de vários clusters permite especificar um subconjunto de clusters para os quais um perfil de app pode enviar tráfego. Isso pode ser útil se você quiser reservar um cluster para uma carga de trabalho separada.

Transações de linha única

Mutações do Bigtable, como solicitações de leitura, gravação e exclusão, são sempre atômicas no nível da linha. Isso inclui mutações para várias colunas em uma única linha, desde que elas estejam contidas na mesma operação de mutação. O Bigtable não é compatível com transações que atualizam atomicamente mais de uma linha.

Porém, o Bigtable também aceita algumas operações de gravação que exigiriam uma transação em outros bancos de dados: Na verdade, o Bigtable usa transações de linha única para concluir essas operações. Entre essas operações estão leituras e gravações, e todas as leituras e gravações são executadas de maneira atômica, mas as operações ainda continuam atômicas apenas no nível da linha:

  • Operações de leitura/modificação/gravação, inclusive incrementos e acréscimos. Uma operação de leitura/modificação/gravação lê um valor, incrementa ou acrescenta ao valor, além de gravar o valor atualizado na tabela.
  • Operações de verificação/mutação, também conhecidas como mutações ou gravações condicionais. Em uma operação de verificação e mutação, o Bigtable verifica uma linha para saber se atende a uma condição especificada. Caso a condição seja atendida, o Bigtable gravará novos valores na linha.

Conflitos entre transações de linha única

Cada cluster em uma instância do Bigtable é um cluster principal que aceita leituras e gravações. Consequentemente, operações que exigem transações de linha única podem causar problemas em instâncias replicadas.

Por exemplo, digamos que você tenha uma tabela para armazenar dados de um sistema de venda de ingressos. Use um contador de números inteiros para armazenar o número de ingressos vendidos. Cada vez que você vende um ingresso, seu app envia uma operação read-modify-write para incrementar o contador em 1.

Se a instância tiver um cluster, os apps clientes poderão vender ingressos ao mesmo tempo e incrementar os contadores sem perda de dados, já que as solicitações serão processadas atomicamente na ordem em que forem recebidas por esse único cluster.

Por outro lado, se a instância tiver vários clusters e o perfil do app permitir o roteamento de vários clusters, solicitações simultâneas para incrementar o contador poderão ser enviadas a clusters diferentes e replicadas para os outros clusters na instância. Se você enviar duas solicitações de incremento ao mesmo tempo que são roteadas para clusters diferentes, cada uma concluirá a transação sem "saber" sobre o outro. O contador em cada cluster é incrementado em um. Quando os dados são replicados para o outro cluster, o Bigtable talvez não saiba que quer aumentar para 2.

Para ajudar a evitar resultados não pretendidos, o Bigtable:

  • Exige que cada perfil de app especifique se ele permite transações de linha única
  • Evita que você ative transações de linha única em um perfil de app que usa roteamento multicluster, porque não há maneira segura de ativar esses recursos de uma só vez
  • Avisa se você ativa transações de linha única em dois ou mais perfis de app diferentes que usam roteamento de cluster único e apontam para clusters diferentes. Caso opte por criar esse tipo de configuração, você precisará garantir que não esteja enviando solicitações de leitura/modificação/gravação conflitantes ou de verificação/mutação para dois clusters diferentes.

A seguir